Код
if (usart1_rx_ready)
{
usart1_rx_ready = 0;
PARSER_ParseCommand(usart1_rx_buf);
}
uint32_t PARSER_ParseCommand(char *str)
{
uint32_t com_found = 0;
uint32_t len = 0;
len = strlen(str);
}
usart1_rx_ready есть volatile-переменная?
PARSER_ParseCommand() определена как функция, возвращающая значение. Если явно от нее ничего не требуется, значит и пишите (void)PARSER_ParseCommand(...), тем более когда применяются оптимизирующие ключи компиляции.
Сам буфер usart1_rx_buf должен иметь модификатор volatile, поскольку является буфером приема сырых данных и важно дать понять оптимизатору, чтобы не борогозил особо.
Еще в uint32_t PARSER_ParseCommand(char *str) я бы добавил uint32_t PARSER_ParseCommand(
volatile char *str) для соответствия типов, тогда уж.
Вот теперь можно начинать включать оптимизацию и смотреть. Я, конечно, не сторонник ставить volatile везде и всюду, но народ требует крови и зрелищ
Сообщение отредактировал Arlleex - Jul 6 2018, 09:30