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

 
 
> Непонятный рестарт программы
Вячик13
сообщение Jun 18 2018, 07:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 71
Регистрация: 17-01-12
Пользователь №: 69 604



Имеется устройство на базе микроконтроллера STM32F100RC. Для него разработано программное обеспечение под Keil 4.22a:
Total RO Size (Code + RO Data) 76796 ( 75.00kB)
Total RW Size (RW Data + ZI Data) 7776 ( 7.59kB)
Total ROM Size (Code + RO Data + RW Data) 76944 ( 75.14kB)
Устройство (весовой терминал ротационных промышленных весов) установлено на промышленном объекте у заказчика в количестве 3 штук.

Наблюдается следующий эффект. Через произвольное время (от 3 до 30 минут) происходит сброс программы. Причём сброс странный. Статические переменные обнуляются, но сброс не "ловится" при отладке (установка breakpoint как в в начале SystemInit(), так и в начале main()). Мало того, при рестарте программы должно производиться тестирование дисплеев из 7-сегментных индикаторов (в начале main()), но оно не происходит.
В программе используется WDT IWDG, но это не его рук дело. Эти явления происходят на всех 3 устройствах. До этого я разработал более 20 аналогичных проектов на этом же устройстве с аналогичной структурой программы, но подобного никогда не наблюдал.

Буду благодарен за любой совет.

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
редактор
сообщение Jun 19 2018, 16:59
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 9-06-07
Пользователь №: 28 315



склоняюсь к версии "дикого" указателя (неверное значение адреса или размера блока для копирования). Уж больно симптомы к этому располагают - ОЗУ зачищается (частично), а код не перезапускается (нет начального тестирования по словам ТС -значит сработал не RESET - и WDT с питанием скорее всего ни при чем). Возможно, неверный указатель на функцию забрасывает исполнение в случайное место.


--------------------
Хорошую систему делают из стандартных блоков нестандартно мыслящие инженеры.
Go to the top of the page
 
+Quote Post
Михась
сообщение Jun 21 2018, 12:34
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 161
Регистрация: 29-09-10
Пользователь №: 59 816



Цитата(редактор @ Jun 19 2018, 23:59) *
склоняюсь к версии "дикого" указателя (неверное значение адреса или размера блока для копирования). Уж больно симптомы к этому располагают - ОЗУ зачищается (частично), а код не перезапускается (нет начального тестирования по словам ТС -значит сработал не RESET - и WDT с питанием скорее всего ни при чем). Возможно, неверный указатель на функцию забрасывает исполнение в случайное место.


Есть полезная функция в Кейле
http://www.keil.com/support/man/docs/armcc...59124940593.htm

7.136 --protect_stack, --no_protect_stack
Inserts a guard variable onto the stack frame for each vulnerable function.

The guard variable is inserted between any buffers and the return address entry.
A function is considered vulnerable if it contains a vulnerable array. A vulnerable array is one that has:
Automatic storage duration.
A character type (char or wchar_t).
In addition to inserting the guard variable and check, the compiler also moves vulnerable arrays to the top of the stack, immediately preceding the guard variable. The compiler stores a copy of the guard variable's value at another location, and uses the copy to check that the guard has not been overwritten, indicating a buffer overflow.

Код
/*******************************************************************************
*     Функции проверки переполнения стека
        Parameter: none
        Return:
КЛЮЧ КОМПИЛЯТОРА
--protect_stack
*******************************************************************************/
void * __stack_chk_guard = (void *)(0xDEADBEEF);     // initialize guard variable

// Called by stack checking code if guard variable is corrupted
void __stack_chk_fail(void)
{
    // переполнение стека
}

// тестер
void teststack(void)
{
    char buf[4];
    strcpy(buf, "123456"); // больше размера буфера
}




Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Вячик13   Непонятный рестарт программы   Jun 18 2018, 07:53
- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 10:53) Буду...   Jun 18 2018, 08:11
- - aaarrr   Цитата(Вячик13 @ Jun 18 2018, 10:53) Набл...   Jun 18 2018, 08:13
|- - kovigor   Цитата(aaarrr @ Jun 18 2018, 11:13) Так м...   Jun 18 2018, 08:14
||- - Вячик13   Цитата(kovigor @ Jun 18 2018, 10:14) Или ...   Jun 18 2018, 09:53
||- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 12:53) Во-в...   Jun 18 2018, 10:11
||- - Вячик13   Цитата(kovigor @ Jun 18 2018, 12:11) Хоро...   Jun 18 2018, 10:27
||- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 13:27) В пе...   Jun 18 2018, 10:28
||- - Вячик13   Цитата(kovigor @ Jun 18 2018, 12:28) Болг...   Jun 18 2018, 10:37
||- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 13:37) Тогд...   Jun 18 2018, 10:40
|- - Вячик13   Цитата(aaarrr @ Jun 18 2018, 10:13) Так м...   Jun 18 2018, 09:27
|- - aaarrr   Цитата(Вячик13 @ Jun 18 2018, 12:27) А ка...   Jun 18 2018, 09:50
|- - Вячик13   Цитата(aaarrr @ Jun 18 2018, 11:50) memse...   Jun 18 2018, 10:19
|- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 13:19) ... ...   Jun 18 2018, 10:21
|- - jcxz   Цитата(Вячик13 @ Jun 18 2018, 13:19) Оста...   Jun 18 2018, 10:47
|- - Вячик13   Цитата(jcxz @ Jun 18 2018, 12:47) Вам ука...   Jun 18 2018, 11:07
|- - jcxz   Цитата(Вячик13 @ Jun 18 2018, 14:07) Пред...   Jun 18 2018, 11:14
|- - Вячик13   Цитата(jcxz @ Jun 18 2018, 13:14) Ну знач...   Jun 18 2018, 11:20
|- - jcxz   Цитата(Вячик13 @ Jun 18 2018, 14:20) Спас...   Jun 18 2018, 11:38
|- - Obam   Цитата(jcxz @ Jun 18 2018, 14:38) А в исп...   Jun 19 2018, 14:47
|- - jcxz   Цитата(Obam @ Jun 19 2018, 17:47) В STM32...   Jun 19 2018, 15:05
|- - Obam   Цитата(jcxz @ Jun 19 2018, 18:05) Это поч...   Jun 19 2018, 15:14
- - k155la3   Цитата(Вячик13 @ Jun 18 2018, 10:53) . . ...   Jun 18 2018, 12:56


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 20:12
Рейтинг@Mail.ru


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