|
Проблема с inline в EWAVR, Оптимизация Function inlining режет код |
|
|
|
 |
Ответов
|
Sep 25 2013, 12:39
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 8-10-07
Пользователь №: 31 163

|
Как глобальная переменная (это видно по коду modbus_slave_routine()). unsigned char usart_count=0;
А, я понял, к чему вы клоните. Тогда, похоже, компилятор даже не предполагает, что в modbus_slave_routine() между usart_count=0; и modbus_frame_check() переменная usart_count может быть изменена прерыванием.
Но тогда при чем здесь Function inlining???
|
|
|
|
|
Sep 25 2013, 13:28
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 8-10-07
Пользователь №: 31 163

|
Всё, теперь мне все стало понятно. Жалко, что компилятор даже не думает о том, что глобальная переменная может быть изменена прерыванием... Не, погодите, а как тогда семафоры передавать? И ждать их изменения? Тут что-то не так все равно.
Получается что ли так: -если перед вызовом функции глобальной переменной присвоить значение, компилятор считает, что ее прерывание не изменит. -если значение не присваивать, компилятор считает, что переменная может быть изменена прерыванием.
?
|
|
|
|
Сообщений в этой теме
Makki Проблема с inline в EWAVR Sep 24 2013, 17:45 Сергей Борщ Возможно, компилятор видит, что результат этой фун... Sep 24 2013, 21:27 Makki В общем-то вызываемая функция возвращает разные за... Sep 25 2013, 11:54 aaarrr modbus_frame_check() в том виде, в котором он прив... Sep 25 2013, 12:08 Makki Естественно об этом я тоже думал. Вот такой код:
... Sep 25 2013, 12:20    aaarrr Цитата(Makki @ Sep 25 2013, 17:28) Жалко,... Sep 25 2013, 13:47     Makki Ага. Все понял, как только в раздел Type qualifier... Sep 25 2013, 14:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|