Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Выравнивание при чтении данных,компилятор GCC под AVR  (Прочитано 9525 раз)
0 Пользователей и 1 Гость смотрят эту тему.
k_pt
Гость
« : 01-03-2005 10:18 » 

Привет всем!
Пользую компилятор GCC, под чип AVR.
Вопрос такой: при чтении данных с флэшки такая картинка наблюдается:
чтение 4-байтового корректно работает, если читаем с адреса кратного 4, соответственно 2 байтового - кратного 2. Байты - нормально читаются Ага
Ассемблер посмотрел - там есть такая фича при чтениии, но почему при этом варнинги при компиляции исходника на С++ не выскакивают, когда читаю, например DWORD, с адреса не кратного 4 - непонятно. И вообще - есть в GCC какой-нить ключ, который такую фичу лечит, т.е. корректно читает 2,4-байтовое с адреса не кратного, соответственно, 2, 4?
Записан
Lex
Специалист

ru
Offline Offline

WWW
« Ответ #1 : 01-03-2005 12:19 » 

Копай в сторону выравнивания переменных по границе слова и т.п. Сходу сказать не могу, с вариантом под AVR не работал, но режим выравнивания пожно самому настраивать через соответствующие #pragma
Записан

Megabyte be with you!
k_pt
Гость
« Ответ #2 : 01-03-2005 12:34 » 

2Lex:
Если бы о структурах шла речь - это понятно, прагмами выправляется.
Тут скорее особенность компилятора под данный чип.
Фишка вот в чем: в ассемблере (для AVR) есть загрузка в регистр из памяти байта, слова, двойного слова. И в описании самих команд сказано, что слово мы можем читать только кратно 2, дваойное - кратно 4. Т.о. тут по идее компилятор должен генерировать спец код для чтения: т.е. читать побайтно, а потом преобразовывать в слово, двойное слово...Это и самому легко написать, чем и занимаюсь, тут скорее проблемма выловить все места где такая фича может происходить + если бы компилятор сам мого это сделать проще было бы...
Записан
miv
Гость
« Ответ #3 : 27-04-2005 15:17 » 

А с какой стати компил ворнинги должен выдавать ! С какого хочешь места во flash с такого и читай ! Ага
Записан
miv
Гость
« Ответ #4 : 27-04-2005 15:20 » new

Кстати где это у AVR регистры в которые можно хотя бы слово грузить, уж не говоря о DWORD !?
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines