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

 
 
> 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
Ответов
Arlleex
сообщение Jul 6 2018, 09:27
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Код
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 везде и всюду, но народ требует крови и зрелищ biggrin.gif

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


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

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



Цитата(Arlleex @ Jul 6 2018, 14:27) *
Код
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 везде и всюду, но народ требует крови и зрелищ biggrin.gif


если я объявляю volatile char usart1_rx_buf[RX1_BUFFERSIZE];
то IAR ругается во многих случаях - и мне приходиться делать приведение к типу
Код
memset((char *)usart1_rx_buf, '\0', RX1_BUFFERSIZE);
PARSER_ParseCommand(volatile char *com_str)
uint32_t len = StrLen((char*)com_str);
strcpy (temp_str, (char*)com_str);


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


Местный
***

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



Цитата(Jenya7 @ Jul 6 2018, 12:37) *
если я объявляю volatile char usart1_rx_buf[RX1_BUFFERSIZE]; то IAR ругается во многих случаях


И заполняете его в прерываниях, ку?

А вы тоже на стек его, чтобы интересней было sm.gif
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 09:45
Сообщение #5


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

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



Цитата(VladislavS @ Jul 6 2018, 14:40) *
И заполняете его в прерываниях, ку?

А вы тоже на стек его, чтобы интересней было sm.gif


usart1_rx_buf принимает правильные значения, адрес передается правильно нигде не затирается.
переделал на volatile - по прежнему uint32_t len = StrLen(com_str); выдает мусор с оптимизацией.
Go to the top of the page
 
+Quote Post
Arlleex
сообщение Jul 6 2018, 09:52
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 492
Регистрация: 12-11-11
Пользователь №: 68 264



Цитата(Jenya7 @ Jul 6 2018, 13:45) *
usart1_rx_buf принимает правильные значения, адрес передается правильно нигде не затирается.
переделал на volatile - по прежнему uint32_t len = StrLen(com_str); выдает мусор с оптимизацией.

Вы когда оптимизацию включаете - забудьте про адекватность отладчика сразу.
Прочитайте мое сообщение еще раз внимательно. После всех озвученных мной пунктов программа падает в HF?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Jul 6 2018, 10:26
Сообщение #7


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

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



Цитата(Arlleex @ Jul 6 2018, 14:52) *
Вы когда оптимизацию включаете - забудьте про адекватность отладчика сразу.
Прочитайте мое сообщение еще раз внимательно. После всех озвученных мной пунктов программа падает в HF?


да.

то есть включил оптимизацию - хрен тебе адекватность - выпал в хард фолт. потом отключил дебагер, сделал рисет.....и там же остался - в жо...в хард фолте

нет что то ахренительно сломалось. глобальные переменные принимают мусорные значения даже при инициализации.

ЧИЗЭС КРАЙСТ! вот я дурак. ошибся и передавал в функцию memcpy(&mot_task, addr, size); неправильный размер. у меня там по ходу убивалось около тысячи переменных в РАМ.

все ж таки жив ИАРка, рулит. надо свой мемкопи написать с проверкой размера.

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


Гуру
******

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



Цитата(Jenya7 @ Jul 6 2018, 13:26) *
ЧИЗЭС КРАЙСТ! вот я дурак. ошибся и передавал в функцию memcpy(&mot_task, addr, size); неправильный размер. у меня там по ходу убивалось около тысячи переменных в РАМ.

Семён Семёныч...
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
- - Jenya7   ок. ничего не выделяю. никаких массивовю просто К...   Jul 6 2018, 08:36
|- - jcxz   Цитата(Jenya7 @ Jul 6 2018, 11:36) ок. ни...   Jul 6 2018, 08:38
|- - VladislavS   Цитата(Jenya7 @ Jul 6 2018, 11:36) ок. ни...   Jul 6 2018, 08:41
|- - Jenya7   Цитата(VladislavS @ Jul 6 2018, 13:41) С ...   Jul 6 2018, 08:45
|- - VladislavS   Цитата(Jenya7 @ Jul 6 2018, 11:45) я все ...   Jul 6 2018, 08:56
|- - Jenya7   Цитата(VladislavS @ Jul 6 2018, 13:56) Пр...   Jul 6 2018, 08:59
|- - VladislavS   А на строке return count; какое значение count? С...   Jul 6 2018, 09:04
|- - Jenya7   Цитата(VladislavS @ Jul 6 2018, 14:04) А ...   Jul 6 2018, 09:08
|- - 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:08) хм...д...   Jul 6 2018, 09:12
|- - Jenya7   Цитата(scifi @ Jul 6 2018, 14:12) Оптимиз...   Jul 6 2018, 09:16
|- - scifi   Цитата(Jenya7 @ Jul 6 2018, 12:14) и выле...   Jul 6 2018, 09:18
||- - Jenya7   Цитата(scifi @ Jul 6 2018, 14:18) Хотите ...   Jul 6 2018, 09:27
|- - scifi   Цитата(Jenya7 @ Jul 6 2018, 12:16) нет то...   Jul 6 2018, 09:31
||- - aaarrr   Цитата(Jenya7 @ Jul 6 2018, 12:45) uint32...   Jul 6 2018, 09:52
||- - 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 Текстовая версия Сейчас: 27th June 2025 - 18:58
Рейтинг@Mail.ru


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