fk0, легенда (16.12.2008 19:51, просмотров: 6391)
picc18 9.5x версий. я плакал и билса головой апстену... ...когда узнал, что у этой @#$@#%$@ даже что-то вроде x==NULL НЕ РАБОТАЕТ. Помимо того, что НЕ РАБОТАЕТ арифметика с массивами, НЕ РАБОТАЕТ сравнение знаковых целых в определённом диапазоне, НЕ ТУДА кладёт константы, ещё не работает что-то, уже даже забыл что.
Как в этом @#$@% вообще софт пишут, а? Или эта у меня карма такая, все баги собирать? Да, конечно --CP=24... Ах да, printf у них, ТОЖЕ НЕ РАБОТАЕТ с длинными хексами. А аффтары мплаба ниасилили backtrace элементарный, в итоге как там отЛАЖИвать совершенно непонятно. Ну то что "malloc не нужен в embedded applications" эта да...
Версию 8.xx не предлагать. Там вообще ничего работать не будет.
void FREE(void *p)
....
if (p == NULL) return;
вырождается в:
1345 ;malloc.c: 299: if (p == (0)) return;
1346 007C64 0100 movlb __Lparam shr (0+8)
1347 007C66 517F movf ?_free^(__Lparam& (0+65280)),w
1348 007C68 1180 iorwf (?_free+1)^(__Lparam& (0+65280)),w
1349 007C6A 1181 iorwf (?_free+2)^(__Lparam& (0+65280)),w
1350 007C6C B4D8 btfsc status,2,c
1351 007C6E 0012 return
Несложно догадаться, что в ?_free+2 всегда будет 0x20 (дада, тот 21 бит, признак RAM).
[ZX]