Вернее сказать странность некомпиляции.
Код
for(;;){
evenFlag.Wait();
u08 *data;
u08 length = UART1_IsReceptionCompleate(data);
UART1_TransmitData(data, length);
u08 dataWeight[] = {0x03, 0x04, 0x76, 0xC1, 0x00, 0x02};
UART0_TransmitData(dataWeight, 6);
OS::Sleep(10);
length = UART0_IsReceptionCompleate(data);
// data[0] = 0;
}
Вероятно я чего-то недопонимаю, но логики не вижу.
Суть проблемы в следующем:
если разкоментарить последнюю строчку, то все замечательно собирается. Но если переменная data не используется, то получается вот такая вот ерунда:
c:/winavr-20100110/bin/../lib/gcc/avr/4.3.3/../../../../avr/lib/avr51/crtm128.o: In function `__vector_default':
(.vectors+0x80): relocation truncated to fit: R_AVR_13_PCREL against symbol `__vector_32' defined in .text.__vector_32 section in obj/Signal_UART.o
make: *** [exe/event_flag.elf] Error 1
Build failed with 1 errors and 6 warnings...
Причем не имеет значения, какие действия над переменной будут производиться, важен сам факт использования переменной data после строки "length = UART0_IsReceptionCompleate(data);".
Makefile взят из примера scmRTOS прот GCC