| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| CCS C - SWTICH() bug http://mcu-bg.com/mcu_site/viewtopic.php?f=14&t=13792 |
Страница 1 от 1 |
| Автор: | speedblue [ Пет Май 22, 2015 12:14 am ] | ||||||||||||||||||
| Заглавие: | CCS C - SWTICH() bug | ||||||||||||||||||
Пиша нещо с компилатора на CCS C 5.045 за PIC24F и попаднах на банален бъг който ме замота, беше неочаквано банален. И на други бъгове съм попадал, но да кажем, че някак се преживяват. Накратко - SWITCH() работи правилно с отрицателни числа само ако проверяваната стойност е 16 бита (signed int16). При 8 бита (signed int8) се омазва. Дизасемблера показва, че при (signed int8) компилатора не се усеща и сравнява с int16. Не съм тесвал при другите типове процесори. This does not work correctly:
This does work correctly:
|
|||||||||||||||||||
| Автор: | Desert Leo [ Пет Май 22, 2015 10:13 am ] |
| Заглавие: | Re: CCS C - SWTICH() bug |
А бе преживяват се, ама докато стоплиш, че е бъг на компилатора... Аз затова съм се закотвил на 5.025 и чакам да понамалее бълването на нови версии, за да скоча на последната. |
|
| Автор: | bateAz [ Пет Май 22, 2015 12:10 pm ] |
| Заглавие: | Re: CCS C - SWTICH() bug |
А опитвал ли си как ще се държи вариантът с 8-битов аргумент, ако е така: case (signed int8)(-1): .... ? |
|
| Автор: | speedblue [ Пет Май 22, 2015 5:54 pm ] | |||||||||
| Заглавие: | Re: CCS C - SWTICH() bug | |||||||||
|
||||||||||
| Автор: | bateAz [ Пет Май 22, 2015 5:59 pm ] |
| Заглавие: | Re: CCS C - SWTICH() bug |
Tова не е онова. Идеята беше да сложиш каст на case, а не на switch |
|
| Автор: | speedblue [ Пет Май 22, 2015 6:14 pm ] |
| Заглавие: | Re: CCS C - SWTICH() bug |
Нищо не помага. Твърдо обработват WORD вместо BYTE и няма откачане от ситуацията с такива трикове. При използването на IF () съвсем коректно цепят WORD-а на две и ползват правилната част. Иначе става и така - всички аргументи да са (signed int16) и цепи мрака.... докато не заорат другаде |
|
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|