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

 
 
> Интересный глюк в CodeVisionAVR
DMD
сообщение Apr 17 2008, 09:02
Сообщение #1


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

Группа: Свой
Сообщений: 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


Интересно, зачем это надо или это просто баг??..


--------------------
Все будет хорошо! Я проверял!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Dec 4 2008, 20:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 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. Если туда добавить клаву, звук, светодиоды, то вообще такой законченный переферийный модуль будет себя оправдывать. Остаётся вопрос конструкции. smile.gif

По поводу ASM вставок.
Как то не совсем себе представляю ASM текст прямо по тексту Си программы. Если это работа с оборудованием, то как правило IAR её делает не хуже, а если просто прога, то смутно себе представляю. С другой стороны вызов законченной процедуры вполне уместен и не портит картину. Ну или там прерывание полностью на ASMе. Это я понимаю. Это как раз делается легко на IAR и просто.

Какие сложности? Просто берёшь и пишешь отдельным файлом все свои процедуры ASM. Никакого гимора нет. Ну и включаешь в проект общий, да и всё! Никаких дополнительных танцев с бубном не надо.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 5 2008, 02:41
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 05:27
Рейтинг@Mail.ru


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