anonymous@RULINUX.NET~# Last login: 2025-04-02 03:59:51
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск


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():

  1.  000004a0 :
  2.   4a0: 20 91 b3 00 lds r18, 0x00B3
  3.   4a4: 2f 5f subi r18, 0xFF ; 255
  4.   4a6: 2f 71 andi r18, 0x1F ; 31
  5.   4a8: 90 91 b4 00 lds r25, 0x00B4
  6.   4ac: 29 17 cp r18, r25
  7.   4ae: e1 f3 breq .-8 ; 0x4a8
  8.   4b0: e5 eb ldi r30, 0xB5 ; 181
  9.   4b2: f0 e0 ldi r31, 0x00 ; 0
  10.   4b4: e2 0f add r30, r18
  11.   4b6: f1 1d adc r31, r1
  12.   4b8: 80 83 st Z, r24
  13.   4ba: 20 93 b3 00 sts 0x00B3, r18
  14.   4be: 55 9a sbi 0x0a, 5 ; 10
  15.   4c0: 08 95 ret
  16.  

test_putc():

  1.  0000027a :
  2.   27a: 20 91 91 00 lds r18, 0x0091
  3.   27e: 2f 5f subi r18, 0xFF ; 255
  4.   280: 2f 71 andi r18, 0x1F ; 31
  5.   282: 90 91 92 00 lds r25, 0x0092
  6.   286: 29 17 cp r18, r25
  7.   288: e1 f3 breq .-8 ; 0x282
  8.   28a: e3 e9 ldi r30, 0x93 ; 147
  9.   28c: f0 e0 ldi r31, 0x00 ; 0
  10.   28e: e2 0f add r30, r18
  11.   290: f1 1d adc r31, r1
  12.   292: 80 83 st Z, r24
  13.   294: 20 93 91 00 sts 0x0091, r18
  14.   298: 55 9a sbi 0x0a, 5 ; 10
  15.   29a: 08 95 ret
  16.  

anonymous(*)(2011-09-22 16:05:39)

Тема:

Ваш комментарий:

Выберите фильтр: матерные выражения
торсионщина
нацпол
спам
флуд
порно
изображения
модераторские/пользовательские фильтры
captcha
Введите символы либо ответ (если на картинке задача):

Пользователям браузеров без CSS: Поле для проверки, заполнять НЕ НАДО:




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!