|
Интересный глюк в CodeVisionAVR |
|
|
|
Apr 17 2008, 09:02
|

Частый гость
 
Группа: Свой
Сообщений: 120
Регистрация: 19-02-08
Пользователь №: 35 166

|
Обнаружил интересный глюк в CodeVision, целый день вчера просидел - думал во мне дело, оказалось, что нет. Если мы делаем сдвиг и результирующее число выходит из размера 1 байта, то, почему-то, компилятор не преобразует его к int (хотя обязан по стандарту). То есть вот такой код работает непрявильно: Код unisigned char s = 243; //... unsigned int d = (unsigned int)(s << 4); // d != 3888 а надо так делать, что глупо... Код unisigned char s = 243; //... unsigned int d = (unsigned int)(((unsigned int)s) << 4); // d = 3888 Интересно, зачем это надо или это просто баг??..
--------------------
Все будет хорошо! Я проверял!
|
|
|
|
|
 |
Ответов
|
Dec 4 2008, 20:56
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Стоимость LCD от 3.5$ за 2х16 до 11 за 4х20. Думаю экзотика в виде SPI LCD будет на 1$ дороже (За счёт экзотичности). Таким образом применив ATMega8, к примеру, и зашив там свою кодовую таблицу (Или несколько) вы можете получить за теже деньги LCD модуль с любым интерфейсом. SPI,I2C,RS232. Если туда добавить клаву, звук, светодиоды, то вообще такой законченный переферийный модуль будет себя оправдывать. Остаётся вопрос конструкции.  По поводу ASM вставок. Как то не совсем себе представляю ASM текст прямо по тексту Си программы. Если это работа с оборудованием, то как правило IAR её делает не хуже, а если просто прога, то смутно себе представляю. С другой стороны вызов законченной процедуры вполне уместен и не портит картину. Ну или там прерывание полностью на ASMе. Это я понимаю. Это как раз делается легко на IAR и просто. Какие сложности? Просто берёшь и пишешь отдельным файлом все свои процедуры ASM. Никакого гимора нет. Ну и включаешь в проект общий, да и всё! Никаких дополнительных танцев с бубном не надо.
|
|
|
|
|
Dec 5 2008, 02:41
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(SasaVitebsk @ Dec 4 2008, 22:56)  По поводу ASM вставок. Как то не совсем себе представляю ASM текст прямо по тексту Си программы. Иногда бывает полезно: Код //Нету у arm-???-gcc intrinsic-функций для запрета/разрешения прерываний. Пишем inline-функцию доступа к регистру состояния процессора. Точно такие же intinsic-и намертво вшиты в ИАР для ARM : INLINE inline TStatusReg __get_CPSR() { TStatusReg cpsr; asm volatile ( " MRS %0,CPSR \r\n" :"=r"(cpsr) : ); return cpsr; } INLINE inline void __set_CPSR_c(TStatusReg cpsr) { asm volatile ( " MSR CPSR_c, %0 \r\n" : :"r"(cpsr) ); }
// Загрузчик для msp430. Объем критичен. На С короче не получится: inline uint16_t CRC_XMODEM(uint16_t crc, uint8_t byte) { static const uint16_t CRC_POLYNOME = 0x8408;
asm volatile( "\r\n" " XOR %1, %0 \r\n" "1: \r\n" " RRA %2 \r\n" " JNC 2f \r\n" " XOR %3, %2 \r\n" "2: \r\n" " DEC %4 \r\n" " JNE 1b \r\n" :"=r"(crc) :"r"(byte), "0"(crc), "i"((uint16_t)CRC_POLYNOME), "r"((uint8_t)8) ); /* crc ^= byte; uint8_t i = 8; do { if (crc & 0x01) { crc >>= 1; crc ^= CRC_POLYNOME; } else crc >>= 1; } while(--i); */ return crc; }
// Есть у меня в области загрузчика AVR функции, написанные на ИАРе. Они хотят параметр в R16. А gcc передает его в R24. Пишем обертку: inline static void SynthInit(uint16_t FrequencyCoeff) { register uint16_t Tmp asm("r16"); Tmp = FrequencyCoeff; asm volatile ( " .extern SynthInit_driver \n\t" " RCALL SynthInit_driver \n\t" :"=r" (Tmp) :"r" (Tmp) ); }
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
DMD Интересный глюк в CodeVisionAVR Apr 17 2008, 09:02 Сергей Борщ Да, выходит, это еще одно несоответствие стандарту... Apr 17 2008, 09:17 defunct Цитата(Сергей Борщ @ Apr 17 2008, 11:17) ... Dec 3 2008, 00:15  Сергей Борщ Цитата(defunct @ Dec 3 2008, 02:15) Можно... Dec 3 2008, 01:58  zhevak Цитатаdefunct[/b]' date='Dec 3 2008, 05:15... Dec 3 2008, 21:26   defunct zhevak
за подробнейшие ответы. Dec 3 2008, 22:47   LordVader Цитата(zhevak @ Dec 4 2008, 01:26) Если L... Dec 4 2008, 10:26    zhevak Цитата(LordVader @ Dec 4 2008, 15:26) Сущ... Dec 4 2008, 10:47     LordVader Цитата(zhevak @ Dec 4 2008, 13:47) Я вам ... Dec 4 2008, 18:22      zhevak Цитата(LordVader @ Dec 4 2008, 23:22) Ну ... Dec 4 2008, 19:15 prottoss Цитата(DMD @ Apr 17 2008, 16:02) Обнаружи... Apr 17 2008, 10:31 Сергей Борщ Цитата(prottoss @ Apr 17 2008, 13:31) А п... Apr 17 2008, 11:20  prottoss Цитата(Сергей Борщ @ Apr 17 2008, 18:20) ... Apr 18 2008, 00:42  Andrew O. Shadoura Цитата(Сергей Борщ @ Apr 17 2008, 14:20) ... Apr 18 2008, 02:01 WHALE Цитата(DMD @ Apr 17 2008, 13:02) Обнаружи... Apr 17 2008, 12:33 DMD Ворнинги не генерились, что и странно. А насчет то... Apr 18 2008, 09:41 ReAl Цитата(DMD @ Apr 17 2008, 12:02) Обнаружи... Apr 18 2008, 14:50 zhevak Выбрось каку
Прошу не пинать -- прошелся поиском... Dec 2 2008, 15:52  Nick_Shl Цитата(zhevak @ Dec 2 2008, 17:52) Вопрос... Dec 3 2008, 06:15 delamoure Цитата(ReAl @ Apr 18 2008, 16:50) Уже обс... Dec 3 2008, 11:48  Сергей Борщ Цитата(delamoure @ Dec 3 2008, 13:48) Но ... Dec 3 2008, 13:35   SasaVitebsk Цитата(Сергей Борщ @ Dec 3 2008, 17:35) Т... Dec 3 2008, 23:53    Qwertty Цитата(SasaVitebsk @ Dec 4 2008, 02:53) В... Dec 4 2008, 04:57    Сергей Борщ Цитата(SasaVitebsk @ Dec 4 2008, 01:53) А... Dec 4 2008, 09:36 _Pasha Интересно, какие грабельки еще подкинет 16-битная ... Dec 3 2008, 14:22 Serj78 Цитата(_Pasha @ Dec 3 2008, 17:22) Интере... Dec 4 2008, 08:20 delamoure Впрочем, IAR для меня не новость
"Многостроч... Dec 4 2008, 00:52 ARV а как можно преобразовать строки для вывода на LCD... Dec 4 2008, 09:51 Сергей Борщ Цитата(ARV @ Dec 4 2008, 11:51) понимаю, ... Dec 4 2008, 10:16  ARV Цитата(Сергей Борщ @ Dec 4 2008, 13:16) Н... Dec 4 2008, 10:19   ReAl Цитата(ARV @ Dec 4 2008, 12:19) это очеви... Dec 5 2008, 11:06 zhevak Цитата(ARV @ Dec 4 2008, 14:51) а как мож... Dec 4 2008, 10:25 _Pasha Цитата(ARV @ Dec 4 2008, 13:51) а как мож... Dec 4 2008, 10:38 delamoure Цитата(SasaVitebsk @ Dec 4 2008, 22:56) П... Dec 4 2008, 21:25  SasaVitebsk Цитата(delamoure @ Dec 5 2008, 01:25) В C... Dec 4 2008, 23:39
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|