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

 
 
> Непонятный рестарт программы
Вячик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
Ответов
aaarrr
сообщение Jun 18 2018, 08:13
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Вячик13 @ Jun 18 2018, 10:53) *
Наблюдается следующий эффект. Через произвольное время (от 3 до 30 минут) происходит сброс программы. Причём сброс странный. Статические переменные обнуляются, но сброс не "ловится" при отладке (установка breakpoint как в в начале SystemInit(), так и в начале main()). Мало того, при рестарте программы должно производиться тестирование дисплеев из 7-сегментных индикаторов (в начале main()), но оно не происходит.

Так может это и не сброс, а именно обнуление ОЗУ вследствие программной ошибки?
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jun 18 2018, 09:27
Сообщение #3


Участник
*

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



Цитата(aaarrr @ Jun 18 2018, 10:13) *
Так может это и не сброс, а именно обнуление ОЗУ вследствие программной ошибки?

Обнуляются все статические переменные (по крайней мере я проверил 7-8 разного типа). А какая может быть ошибка чтобы выйти на инициализирующий сброс статических переменных?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 18 2018, 09:50
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Вячик13 @ Jun 18 2018, 12:27) *
А какая может быть ошибка чтобы выйти на инициализирующий сброс статических переменных?

memset(x, 0, y), например. Не выходит оно никуда, просто самостоятельно стирает содержимое памяти.
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jun 18 2018, 10:19
Сообщение #5


Участник
*

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



Цитата(aaarrr @ Jun 18 2018, 11:50) *
memset(x, 0, y), например. Не выходит оно никуда, просто самостоятельно стирает содержимое памяти.

Проверил. Самое подозрительное:
memset(Display->Code,'\0',strlen((char *)Display->Code)); //Очистка кодовой строки
где Display->Code указатель на массив байт (unsigned char *).
Остальные memset все просты и явны.

Может быть функция strlen(), а тем более с аргументом-указателем на член структуры может глючить? Хотя в аналогичных проектах всё это работает безукоризненно.


Сообщение отредактировал Вячик13 - Jun 18 2018, 10:35
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 18 2018, 10:47
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Вячик13 @ Jun 18 2018, 13:19) *
Остальные memset все просты и явны.

Вам указали на одну из тысячи возможностей. Не надо понимать буквально. Любой цикл в вашей программе, который что-то пишет или просто копирует в память, может снести всю вашу ОЗУ например при разрушении переменных, от которых зависит адрес назначения или счётчик цикла.
Симптомы указывают на вполне типичный баг в работе с указателями. Странно не знать этого после "20 проектов"...
И в борьбе с такими багами часто помогает и защита памяти и обработка всех fault-ов. Чего у Вас также явно нет. Что опять же странно после "20 проектов"... laughing.gif

Цитата(aaarrr @ Jun 18 2018, 12:50) *
memset(x, 0, y), например. Не выходит оно никуда, просто самостоятельно стирает содержимое памяти.

У меня в таких ситуациях срабатывает ловушка по записи по недопустимому адресу (записи в регион где нет ОЗУ, и поэтому закрытый от записи в MPU) когда указатель такого цикла доходит до границы ОЗУ. Автор явно не знает про MPU. laughing.gif
.... Или STM32F100 - это не Cortex-M3? Лень смотреть в даташит....
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jun 18 2018, 11:07
Сообщение #7


Участник
*

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



Цитата(jcxz @ Jun 18 2018, 12:47) *
Вам указали на одну из тысячи возможностей. Не надо понимать буквально. Любой цикл в вашей программе, который что-то пишет или просто копирует в память, может снести всю вашу ОЗУ например при разрушении переменных, от которых зависит адрес назначения или счётчик цикла.
Симптомы указывают на вполне типичный баг в работе с указателями. Странно не знать этого после "20 проектов"...
И в борьбе с такими багами часто помогает и защита памяти и обработка всех fault-ов. Чего у Вас также явно нет. Что опять же странно после "20 проектов"... laughing.gif


У меня в таких ситуациях срабатывает ловушка по записи по недопустимому адресу (записи в регион где нет ОЗУ, и поэтому закрытый от записи в MPU) когда указатель такого цикла доходит до границы ОЗУ. Автор явно не знает про MPU. laughing.gif
.... Или STM32F100 - это не Cortex-M3? Лень смотреть в даташит....


Нет, не лень. И могу читать даже в оригинале. Но, знаете, как в известном анекдоте про немого мальчика: "А раньше я не разговаривал, потому что всё было в порядке". Представьте себе, за 20 проектов у меня не возникало даже потребности в каких-либо ловушках, поскольку всё работало нормально.

Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 18 2018, 11:14
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Вячик13 @ Jun 18 2018, 14:07) *
Представьте себе, за 20 проектов у меня не возникало даже потребности в каких-либо ловушках, поскольку всё работало нормально.

Ну значит - поздравляю! - Вы доросли до серьёзных проектов, сложнее мигания парой светодиодов rolleyes.gif
Go to the top of the page
 
+Quote Post
Вячик13
сообщение Jun 18 2018, 11:20
Сообщение #9


Участник
*

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



Цитата(jcxz @ Jun 18 2018, 13:14) *
Ну значит - поздравляю! - Вы доросли до серьёзных проектов, сложнее мигания парой светодиодов rolleyes.gif

Спасибо, за поздравление. Наконец то оценили. А то с 1983 года, когда я сделал свой первый проект на К1-20 никто ни одного доброго словечка!
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 18 2018, 11:38
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Вячик13 @ Jun 18 2018, 14:20) *
Спасибо, за поздравление. Наконец то оценили. А то с 1983 года, когда я сделал свой первый проект на К1-20 никто ни одного доброго словечка!

Понятно, что воспоминания о молодости и какие раньше были деревья зелёные процессоры хорошие и изученные - Вам дороги.
Но чтобы не жить воспоминаниями о былом, а делать устройства на современном уровне, надо всё-таки стараться изучать эти самые современные МК. А в используемых Вами Cortex-M уже лет так 10 точно (не 83-й канеш, куда там wink.gif наличествует MPU, который подобные ошибки с заполнением памяти константой часто позволяет находить на раз.
И другие разработчики, уже тоже лет 10 как, его успешно используют. А также есть fault-ы, которые тоже помогают в ловле багов.
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
|- - 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
|- - kovigor   Цитата(Вячик13 @ Jun 18 2018, 13:19) ... ...   Jun 18 2018, 10:21
|- - 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
- - редактор   склоняюсь к версии "дикого" указателя (н...   Jun 19 2018, 16:59
- - Михась   Цитата(редактор @ Jun 19 2018, 23:59) скл...   Jun 21 2018, 12:34


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

 


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


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