реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Баг от Кейла, Запись int -ов жить не мешает но кровь портит
редактор
сообщение Jan 28 2008, 11:55
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



Столкнулся в Keil c такой фишкой: для лакальных и глобальных переменных типа int разная последовательность записи данных.
ex:
sfr16 CAN0DAT= 0xD8;;
int a

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

}
все бы ничего, и жить можно, но в C8051F04X при записи чтении младшей части слова в CAN происходит автоигкремент адреса, в результате данные попадают не по адресу.
Мелочь а противно, каждый раз по байтам писать.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
Kirill Frolov
сообщение Jan 28 2008, 14:03
Сообщение #2


Частый гость
**

Группа: Новичок
Сообщений: 111
Регистрация: 10-02-07
Из: St.Petersburg, Russia
Пользователь №: 25 241



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


Порядок чтения байтов на 8-битном контроллере... хе-хе. ВСЕГДА РУКАМИ ПО БАЙТАМ -- единственный вообще разумный вариант.


--------------------
[ZX]
Go to the top of the page
 
+Quote Post
oran-be
сообщение Jan 29 2008, 10:45
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 234
Регистрация: 30-03-07
Из: Одесса
Пользователь №: 26 621



Общеизвестно, что Кейл под 51-е использует BIG ENDIAN упаковку байт, в отличии от компиляторов под АВР, например или х86. Поэтому при разработке интерфейса стоит посмотреть, какую упаковку байт стоит выбрать - может быть и не придется маслать байты вручную.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 31 2008, 07:25
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(редактор @ Jan 28 2008, 14:55) *
Столкнулся в Keil c такой фишкой: для лакальных и глобальных переменных типа int разная последовательность записи данных.


Попробовал при разных уровнях оптимизации - и ни разу не увидел разной последовательности записи: в обоих случаях (и для глобальных и для локальных переменных) запись производится - сначала старший байт, затем - младший. Брал процедуру ааа(), которую Вы привели в качестве примера. Транслятор - версии 8.04
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 07:32
Рейтинг@Mail.ru


Страница сгенерированна за 0.01393 секунд с 7
ELECTRONIX ©2004-2016