Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика
> Я не увидел у тебя ничего из С++, поэтому не понимаю, зачем ты применяешь компилятор от плюсов для простого кода для Си.
Ну, мне так захотелось.
> Вот как ты думаешь, что делает вот этот кусок твоего кода:
>> while ( tmphead == UART_TxTail );/* wait for free space in buffer */
Я думаю, что он ждёт пока освободится буфер. В инлайновой реализации именно это место выкинуто потому что она используется в обработчике прерывания и у неё ни времени ждать нет ни буфер никогда не освободится если прерывания не разрешить, а разрешить их там нельзя.
> И ещё я не понял, где у тебя обозначенный в заголовке "доступ к переменным из соседнего объектного файлика"?
Пример определения этих переменных я привёл, остальные заданы точно так же. По сути вопроса согласен - скорее правильнее утверждать, что это функции из uart.cpp не там смотрят эти переменные в главной программе.
> И ващё, смотри ассемблерные листинги и бери в руки avr-gdb+simulavr (WinAVR, если религия позволяет) и смотри что у тебя конкретно не так.
Дык что не так понятно: они в разных местах один и тот же свой буфер ищут. У меня для теста в main.cpp реализована точная копия uart_putc() приведённой выше, называется void test_putc(void), не инлайновая и не использует модификаторов и точно так же не работает - сравнить листинги обеих функций легко - видно что они в разные места смотрят:
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика
> Я не увидел у тебя ничего из С++, поэтому не понимаю, зачем ты применяешь компилятор от плюсов для простого кода для Си.
Ну, мне так захотелось.
> Вот как ты думаешь, что делает вот этот кусок твоего кода:
>> while ( tmphead == UART_TxTail );/* wait for free space in buffer */
Я думаю, что он ждёт пока освободится буфер. В инлайновой реализации именно это место выкинуто потому что она используется в обработчике прерывания и у неё ни времени ждать нет ни буфер никогда не освободится если прерывания не разрешить, а разрешить их там нельзя.
> И ещё я не понял, где у тебя обозначенный в заголовке "доступ к переменным из соседнего объектного файлика"?
Пример определения этих переменных я привёл, остальные заданы точно так же. По сути вопроса согласен - скорее правильнее утверждать, что это функции из uart.cpp не там смотрят эти переменные в главной программе.
> И ващё, смотри ассемблерные листинги и бери в руки avr-gdb+simulavr (WinAVR, если религия позволяет) и смотри что у тебя конкретно не так.
Дык что не так понятно: они в разных местах один и тот же свой буфер ищут. У меня для теста в main.cpp реализована точная копия uart_putc() приведённой выше, называется void test_putc(void), не инлайновая и не использует модификаторов и точно так же не работает - сравнить листинги обеих функций легко - видно что они в разные места смотрят:
uart_putc():
test_putc():