|
Проблема с 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

|
Всё, теперь мне все стало понятно. Жалко, что компилятор даже не думает о том, что глобальная переменная может быть изменена прерыванием... Не, погодите, а как тогда семафоры передавать? И ждать их изменения? Тут что-то не так все равно.
Получается что ли так: -если перед вызовом функции глобальной переменной присвоить значение, компилятор считает, что ее прерывание не изменит. -если значение не присваивать, компилятор считает, что переменная может быть изменена прерыванием.
?
|
|
|
|
|
Sep 25 2013, 14:05
|
Участник

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

|
Ага. Все понял, как только в раздел Type qualifiers заглянул. Спасибо за наводку! Пошел читать руководство...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|