Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-сен-21 10:05

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: Ошибка компилятора???
СообщениеДобавлено: 2013-окт-23 08:47 
Не в сети

Зарегистрирован: 2011-авг-11 12:58
Сообщения: 16
Откуда: Тамбов
При отработке программы записи в основную память Flash из микросхемы Fram, столкнулся с проблемой правильности отображения окна «Дамп памяти» программы Phyton CMC-ARM. При стирании и записи по адресам 0x08000000…0x0801ffff, содержимое окна «Дамп памяти» не соответствует стираемым и записываемым данным. Лечится повторным выбором отладчика - JTAG JEM-ARM-V2. Одновременно заметил что, созданная структура UkPack при чтении 3-го элемента при записи в buff[2] и основную память Flash дает значение 0x63 вместо 0x02. Это ошибка компилятора или я что-то делаю неправильно? (Заготовка проекта в прикрепленном файле)


Вложения:
ProgWrite_mil.rar [85.15 КБ]
Скачиваний: 106
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Ошибка компилятора???
СообщениеДобавлено: 2013-окт-24 14:05 
Не в сети
Moderator

Зарегистрирован: 2010-мар-31 10:44
Сообщения: 54
Откуда: ООО "Фирма Фитон"
Vacheslav писал(а):
При стирании и записи по адресам 0x08000000…0x0801ffff, содержимое окна «Дамп памяти» не соответствует стираемым и записываемым данным. Лечится повторным выбором отладчика - JTAG JEM-ARM-V2.

Это, видимо, связано с кэшированием содержимого флэш-памяти. Будем разбираться.

Vacheslav писал(а):
Одновременно заметил что, созданная структура UkPack при чтении 3-го элемента при записи в buff[2] и основную память Flash дает значение 0x63 вместо 0x02. Это ошибка компилятора или я что-то делаю неправильно?

По поводу неверных значений в массиве buff.
В присланном Вами проекте, в файле Packet.c, указатель struct InitPack *UkPack инициализируется адресом одиночной структуры StPack. В цикле (файл ProgWrite.c):
Код:
   for (tmp=0,i=0;i<128;i++)
   {
    (*(uint8_t*)(UkPack+i))=tmp+i;
    buff[i]=tmp+i;
   }

для всех i > 0 идет присваивание значений за границу этой структуры – куда-то в память, поскольку выражение UkPack+i, с точки зрения семантики языка C, эквивалентно следующему выражению:
(struct InitPack*)(((unsigned char*)UkPack) + (i*sizeof(struct InitPack)))
Соответственно, результаты выполнения такого цикла могут быть самыми непредсказуемыми.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB