|
IAR сошел с ума. |
|
|
|
Jul 6 2018, 08:17
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Все работало вдруг началась проблема. Принимаю команду с терминала Код if (usart1_rx_ready) { usart1_rx_ready = 0; PARSER_ParseCommand(usart1_rx_buf); } ставлю точку останова на PARSER_ParseCommand(usart1_rx_buf); - вижу пришла красивая команда с '\0' в конце. захожу внутрь функции Код uint32_t PARSER_ParseCommand(char *str) { uint32_t com_found = 0; uint32_t len = 0; len = strlen(str); char temp_str[len]; strlen вычисляет длину строки - 504588880 - и естественно при алокации - char temp_str[len] - выпадаем в хард фолт. Ну и кто он (IAR) после этого?
Сообщение отредактировал Jenya7 - Jul 6 2018, 08:18
|
|
|
|
|
Jul 6 2018, 08:36
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
ок. ничего не выделяю. никаких массивовю просто Код uint32_t len = strlen(str); выдает какие то не реальные цифры.
|
|
|
|
|
Jul 6 2018, 08:38
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(Jenya7 @ Jul 6 2018, 11:36) ок. ничего не выделяю. никаких массивовю просто Код uint32_t len = strlen(str); выдает какие то не реальные цифры. У Вас нет эмулятора? Пошагать внутрь strlen и посмотреть что происходит - не судьба? Написать обработчик HF тоже видимо не судьба. Ну тогда да, конечно, в этом только IAR и может быть виноват.....
|
|
|
|
|
Jul 6 2018, 08:39
|
Профессионал
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075
|
Цитата(scifi @ Jul 6 2018, 13:33) Есть такая версия: буфер наполняется в фоне (прерывания или как-то ещё), поэтому на момент вычисления длины строки там не совсем то, что было вначале. я поставил точку останова в прием буфера - ничего не приходит. Цитата(jcxz @ Jul 6 2018, 13:38) У Вас нет эмулятора? Зайти внутрь strlen и посмотреть что происходит - не судьба? там асемблерные инструкции. я по ним мало что могу сказать.
Сообщение отредактировал Jenya7 - Jul 6 2018, 08:42
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 6 2018, 08:41
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Цитата(Jenya7 @ Jul 6 2018, 11:36) ок. ничего не выделяю. никаких массивовю просто Код uint32_t len = strlen(str); выдает какие то не реальные цифры. С размером стека порядок? Переходите на С++, он вам так в ногу стрелять не даст. Цитата Error[Pe028]: expression must have a constant [note]: the value of variable "len" (declared at line XX) cannot be used as a constant ЗЫ: Постой, постой! Что-то похожее припоминаю... Если не подключен string.h, он какую-то лажу вместо функций работы со строками подставлял. Прямо в этом модуле #include <string.h> добавь.
|
|
|
|
|
Jul 6 2018, 08:56
|
Местный
Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140
|
Цитата(Jenya7 @ Jul 6 2018, 11:45) я все закрыл. все. strlen все равно возвращает мусор. Прямо в этом модуле #include <string.h> добавь. Попробуй, это не долго.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|