Vit2005 (24.05.2006 14:50, просмотров: 1) ответил КонстантинТ на Как вариант
Обнаружил интересные вещи и неожиданные int nonLibUart0Putch(int ch)
{
while (!(U0LSR & ULSR_THRE)) // wait for TX buffer to empty
continue; // also either WDOG() or swap()
U0THR = (uint8_t)ch; // put char to Transmit Holding Register
return (uint8_t)ch; // return char ("stdio-compatible"?)
}
int main (void)
{
Initialize();
IODIR0|=(1UL<<10);
for(;;)
{
nonLibUart0Putch('+');
//uart0Putch('+');
IOCLR0|=(1UL<<10);
delayUs(TEST_DELAY);
IOSET0|=1UL<<10;
}
return 0;
}
Имеются 2 одинаковые функции ( nonLibUart0Putch и uart0Putch).
С исходники 100% совпадают. uart0Putch находится в библиотеке,
которую я и создал.
Ширина импульса зависит от того откуда вызывается фунция ( из библиотеки или нет):
с nonLibUart0Putch генерится 278uS импульс на P0.10
с uart0Putch генерится 381uS импульс на P0.10
Как такое может быть ? Что-то с ARM/Thumb режимами?
Обе функции компилировались с одинаковыми опциями компилятора
{TOOLKITDIR}\bin\arm-elf-gcc.exe -mcpu=arm7tdmi -I./ -c -O3 -msoft-float -shared -Wformat=2 -g {SOURCEFILE} -o {OBJFILE}
{TOOLKITDIR}\bin\arm-elf-gcc.exe -mcpu=arm7tdmi -I./ -c -O3 -msoft-float -shared -Wformat=2 -g {SOURCEFILE} -o {OBJFILE}
Для создания библиотеки использовалась следующая строка
arm-elf-ar rc libbipom.a Init.out uart.out printf.out iprintf.out critical.out
Это строка линкера
{TOOLKITDIR}\bin\arm-elf-ld.exe -v -T {TOOLKITDIR}\arm-elf\include\libbipom\cstartup\lpc2138.ld -nostartfiles -nostdlib -o {TMPFILE} {TOOLKITDIR}\arm-elf\include\libbipom\cstartup\boot.o {OBJFILES} -L {TOOLKITDIR}\arm-elf\include\libbipom -lbipom -L {TOOLKITDIR}\arm-elf\lib -lc -L {TOOLKITDIR}\lib\gcc\arm-elf\4.0.0 -lgcc