реклама на сайте
подробности

 
 
> IAR сошел с ума.
Jenya7
сообщение Jul 6 2018, 08:17
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Jenya7
сообщение Jul 6 2018, 08:36
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



ок. ничего не выделяю. никаких массивовю просто
Код
uint32_t len = strlen(str);
выдает какие то не реальные цифры.

Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 6 2018, 08:41
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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> добавь.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 08:45
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(VladislavS @ Jul 6 2018, 13:41) *
С размером стека порядок?

Переходите на С++, он вам так в ногу стрелять не даст.


я все закрыл. все. strlen все равно возвращает мусор.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 6 2018, 08:56
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Jenya7 @ Jul 6 2018, 11:45) *
я все закрыл. все. strlen все равно возвращает мусор.

Прямо в этом модуле #include <string.h> добавь. Попробуй, это не долго.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 08:59
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(VladislavS @ Jul 6 2018, 13:56) *
Прямо в этом модуле #include <string.h> добавь. Попробуй, это не долго.


переписал strlen.
Код
uint32_t StrlLen(char *str)
{
    uint32_t count = 0;
    while (*str != '\0')
    {
        str++;
        count++;
    }
    return count;
}
uint32_t len = StrlLen(str); возвращает тот же мусор
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 6 2018, 09:04
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



А на строке return count; какое значение count?

Сдаётся мне, в том месте где вы смотрите len в момент отладки её уже нет. Либо оптимизировалась, либо потёрлась.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 09:08
Сообщение #8


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(VladislavS @ Jul 6 2018, 14:04) *
А на строке return count; какое значение count?

Сдаётся мне, в том месте где вы смотрите len в момент отладки её уже нет. Либо оптимизировалась, либо потёрлась.

хм...да на строчке return count; вижу правильное значение. а в len уже мусор. ничего не понимаю.

фига се!!! отключил оптимизацию - все нормально - len принимает правильное значение. это что - с оптимизацией надо попрощаться? не судьба?

Сообщение отредактировал Jenya7 - Jul 6 2018, 09:12
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 6 2018, 09:12
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Jenya7 @ Jul 6 2018, 12:08) *
хм...да на строчке return count; вижу правильное значение. а в len уже мусор. ничего не понимаю.

Оптимизация?
Не знаю, как сейчас в яре, но вообще иногда замечал, что при оптимизации отладочная информация корёжится, и отладчик врёт. По-честному он должен был бы сказать "извините, из-за оптимизации не могу показать значение переменной".
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 09:16
Сообщение #10


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(scifi @ Jul 6 2018, 14:12) *
Оптимизация?
Не знаю, как сейчас в яре, но вообще иногда замечал, что при оптимизации отладочная информация корёжится, и отладчик врёт. По-честному он должен был бы сказать "извините, из-за оптимизации не могу показать значение переменной".


и вылетает в хард фолт. а жить с этим как?

нет товарищи - IAR мне без оптимизации не нужен - вся его сила в оптимизации. иначе я бы сидел на цветастом эклипсе.

я их маму в белых тапках видел.

Сообщение отредактировал Jenya7 - Jul 6 2018, 09:18
Go to the top of the page
 
+Quote Post
scifi
сообщение Jul 6 2018, 09:18
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(Jenya7 @ Jul 6 2018, 12:14) *
и вылетает в хард фолт. а жить с этим как?

Хотите отлаживать оптимизированный код - учите инструкции Thumb. А иначе жить с этим никак. Кстати, оч. простой обработчик Hard Fault вот такой:
Код
void hard_fault_handler(void)
{
  int volatile w = 1;
  while (w);
}

При попадании туда в отладчике делаем w=0 и в окне дизассемблера потихоньку возвращаемся из обработчика. Возвращаемся туда, где произошла неприятность, и пытаемся понять, что пошло не так.
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 09:27
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(scifi @ Jul 6 2018, 14:18) *
Хотите отлаживать оптимизированный код - учите инструкции Thumb. А иначе жить с этим никак. Кстати, оч. простой обработчик Hard Fault вот такой:
Код
void hard_fault_handler(void)
{
   int volatile w = 1;
   while (w);
}

При попадании туда в отладчике делаем w=0 и в окне дизассемблера потихоньку возвращаемся из обработчика. Возвращаемся туда, где произошла неприятность, и пытаемся понять, что пошло не так.

при чем тут отладчик? он при оптимизации и на обычной прошивке выпадает в хард фолт
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   IAR сошел с ума.   Jul 6 2018, 08:17
- - jcxz   Цитата(Jenya7 @ Jul 6 2018, 11:17) [/code...   Jul 6 2018, 08:25
|- - Jenya7   Цитата(jcxz @ Jul 6 2018, 13:25) Как он у...   Jul 6 2018, 08:29
||- - jcxz   Цитата(Jenya7 @ Jul 6 2018, 11:29) этот б...   Jul 6 2018, 08:33
||- - Сергей Борщ   QUOTE (jcxz @ Jul 6 2018, 11:33) Видимо к...   Jul 6 2018, 13:54
|- - scifi   Цитата(jcxz @ Jul 6 2018, 11:25) Как он у...   Jul 6 2018, 08:32
|- - jcxz   Цитата(scifi @ Jul 6 2018, 11:32) C99 это...   Jul 6 2018, 08:35
- - scifi   Цитата(Jenya7 @ Jul 6 2018, 11:17) strlen...   Jul 6 2018, 08:33
|- - Jenya7   Цитата(scifi @ Jul 6 2018, 13:33) Есть та...   Jul 6 2018, 08:39
|- - jcxz   Цитата(Jenya7 @ Jul 6 2018, 11:39) там ас...   Jul 6 2018, 08:42
|- - scifi   Цитата(Jenya7 @ Jul 6 2018, 11:39) там ас...   Jul 6 2018, 08:59
|- - jcxz   Цитата(Jenya7 @ Jul 6 2018, 11:36) ок. ни...   Jul 6 2018, 08:38
|- - VladislavS   Цитата(Jenya7 @ Jul 6 2018, 12:08) хм...д...   Jul 6 2018, 09:10
||- - Jenya7   Цитата(VladislavS @ Jul 6 2018, 14:10) Да...   Jul 6 2018, 09:13
||- - scifi   Цитата(VladislavS @ Jul 6 2018, 12:10) Да...   Jul 6 2018, 09:13
|- - scifi   Цитата(Jenya7 @ Jul 6 2018, 12:16) нет то...   Jul 6 2018, 09:31
- - Arlleex   Кодif (usart1_rx_ready) { usart1_rx_rea...   Jul 6 2018, 09:27
|- - Jenya7   Цитата(Arlleex @ Jul 6 2018, 14:27) Кодif...   Jul 6 2018, 09:37
||- - VladislavS   Цитата(Jenya7 @ Jul 6 2018, 12:37) если я...   Jul 6 2018, 09:40
||- - Jenya7   Цитата(VladislavS @ Jul 6 2018, 14:40) И ...   Jul 6 2018, 09:45
||- - aaarrr   Цитата(Jenya7 @ Jul 6 2018, 12:45) uint32...   Jul 6 2018, 09:52
||- - Arlleex   Цитата(Jenya7 @ Jul 6 2018, 13:45) usart1...   Jul 6 2018, 09:52
||- - Jenya7   Цитата(Arlleex @ Jul 6 2018, 14:52) Вы ко...   Jul 6 2018, 10:26
||- - scifi   Цитата(Jenya7 @ Jul 6 2018, 13:26) ЧИЗЭС ...   Jul 6 2018, 14:06
||- - Jenya7   Цитата(scifi @ Jul 6 2018, 19:06) Семён С...   Jul 7 2018, 05:35
|- - aaarrr   Цитата(Arlleex @ Jul 6 2018, 12:27) Сам б...   Jul 6 2018, 09:55
|- - Arlleex   Цитата(aaarrr @ Jul 6 2018, 13:55) Вот вс...   Jul 6 2018, 10:09
- - Сергей Борщ   QUOTE IAR сошел с ума.Мне кажется, кого-то уже пор...   Jul 7 2018, 05:46
- - Jenya7   Цитата(Сергей Борщ @ Jul 7 2018, 10:46) М...   Jul 7 2018, 06:11


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01537 секунд с 7
ELECTRONIX ©2004-2016