Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Баг от Кейла
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
редактор
Столкнулся в Keil c такой фишкой: для лакальных и глобальных переменных типа int разная последовательность записи данных.
ex:
sfr16 CAN0DAT= 0xD8;;
int a

void aaa(void)
{ int b;
CAN0DAT = a; // сперва пишет старшую часть слова, затем младшую
...
CAN0DAT = b; // сперва пишет младшую часть слова, затем старшую

}
все бы ничего, и жить можно, но в C8051F04X при записи чтении младшей части слова в CAN происходит автоигкремент адреса, в результате данные попадают не по адресу.
Мелочь а противно, каждый раз по байтам писать.
Kirill Frolov
Цитата(редактор @ Jan 28 2008, 14:55) *
все бы ничего, и жить можно, но в C8051F04X при записи чтении младшей части слова в CAN происходит автоигкремент адреса, в результате данные попадают не по адресу.
Мелочь а противно, каждый раз по байтам писать.


Порядок чтения байтов на 8-битном контроллере... хе-хе. ВСЕГДА РУКАМИ ПО БАЙТАМ -- единственный вообще разумный вариант.
oran-be
Общеизвестно, что Кейл под 51-е использует BIG ENDIAN упаковку байт, в отличии от компиляторов под АВР, например или х86. Поэтому при разработке интерфейса стоит посмотреть, какую упаковку байт стоит выбрать - может быть и не придется маслать байты вручную.
Палыч
Цитата(редактор @ Jan 28 2008, 14:55) *
Столкнулся в Keil c такой фишкой: для лакальных и глобальных переменных типа int разная последовательность записи данных.


Попробовал при разных уровнях оптимизации - и ни разу не увидел разной последовательности записи: в обоих случаях (и для глобальных и для локальных переменных) запись производится - сначала старший байт, затем - младший. Брал процедуру ааа(), которую Вы привели в качестве примера. Транслятор - версии 8.04
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.