anonymous@RULINUX.NET~# | Last login: 2024-11-23 01:14:34 |
Регистрация Вход | Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск |
Форум - Development | [RSS] |
Есть библиотечка для работы с UART'ом, состоящая из двух файлов с uart.h и uart.cpp В uart.h как водится дефиниции располагаются, например:
А в uart.cpp, соответственно, имплементация:
/* uart_putc */}
Всё работает просто зашибись.
Теперь я хочу вышеприведённую функцию сделать инлайновой. Для этого пишу в uart.h следующее:
} И делаю тестовую программку, которая инициализирует UART и поочереди выводит буквы то старым то новым способом.
Копулятор успешно программку копулирует, но вот при исполнении полученного бинарника оказывается, что первый вызов штатной ф-ии uart_putc() происходит успешно, а потом инлайновый вызов просто портит память и заканчивается ничем (хотя говорит что в буфер байт отложил успешно), все последующие "нормальные" вызовы так же более не работают. Есть мнение что avrgcc почему-то генерит объектный код для main.cpp (откуда вызываются putc-функции) и uart.cpp с разными адресами для буфера и сопутствующих переменных и при линковке это нихера не выравнивается. Вот выдержка из map-файла:
Вопрос - как заставить инлайн работать?
anonymous(*) (2011-09-22 14:35:00)
|
|
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> uart.cpp
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> static inline bool uart_putc_nowait(unsigned char data)
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> extern void uart_putc(unsigned char data);
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> Укурок, чтоли? Замени на .c и не насилуй свой проц.
> Читай ман про ключевое слово static.
> Про extern тоже не помешает прочесть. И код у тебя какой-то странный, каша какая-то
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> мало ли вильфред наформатировал
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> Чо не так?
> И шрифт тоже хуёвый.
> while ( tmphead == UART_TxTail );/* wait for free space in buffer */
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> первый вызов штатной ф-ии uart_putc() происходит успешно, а потом инлайновый вызов просто портит память и заканчивается ничем (хотя говорит что в буфер байт отложил успешно), все последующие "нормальные" вызовы так же более не работают.
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файликаs/WinAVR/AvrStudio/; |
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> Я не увидел у тебя ничего из С++, поэтому не понимаю, зачем ты применяешь компилятор от плюсов для простого кода для Си.
> Вот как ты думаешь, что делает вот этот кусок твоего кода:
> И ещё я не понял, где у тебя обозначенный в заголовке "доступ к переменным из соседнего объектного файлика"?
> И ващё, смотри ассемблерные листинги и бери в руки avr-gdb+simulavr (WinAVR, если религия позволяет) и смотри что у тебя конкретно не так.
uart_putc(): test_putc(): |
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> s/WinAVR/AvrStudio/;
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> lds r18, 0x00B3
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> Подозреваю там и секаса с доступом к переменным не было бы :) Однако хочется avr-gcc.
|
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика> А теперь покажи определение той самой UART_TxHead и соседней UART_TxTail. И в каких файлах они у тебя определены тоже показывай.
Проблема разрешилась - вернул переменные из main (относил их туда попробовать) в uart.cpp, т.е. в uart.c теперь внешние объявления: а сами переменные в uart.cpp: Результат: скомпилялось и заработало. Вобщем то, что с самого начала пробовал, только вычистил всё что было сгенерировано до этого. Видимо изначально что-то не перекомпилировалось. |
Скрыть
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файликаuart.c читать как uart.h |
|
|
|
Этот тред читают 3 пользователя: |
Анонимных: 3 Зарегистрированных: 0 |
Re: [AVR-GCC] Проблемы с доступом к переменным из соседнего объектного файлика
Блядь.. Туксоед мы чо, уже на новом движке? Чо с форматированием кода?