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

 
 
> Глюк контроллера прерываний или что-то еще?, LPC1114
vasta
сообщение Nov 16 2012, 13:49
Сообщение #1


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

Группа: Участник
Сообщений: 183
Регистрация: 3-02-09
Из: Нск
Пользователь №: 44 325



Хотел бы узнать мнение специалистов по сим микроконтроллерам, ибо обнаружился глюк скорее всего на низком уровне, не знаю в какую сторону ковырять, ибо всю низкоуровненвые настройки далал библиотеками из иара, полагая, что все должно быть корректно, писал только верхний алгоритм, который как будто работает.
Алгоритм следующий.
НА I2C шине висит несколько (конкретно 5) устройств. LPC представляет собой тупо мост I2C - UART. Читает устройство №1, отправляет данные в UART, получает пакет из UART, пишет его в устройство №1, читает устройство №2, отправляет данные в UART, получает пакет из UART, пишет его в устройство №1 ... и далее по алгоритму до №5. Пакеты по 10 байт.
В общем, этот алгоритм у меня глючит. Может пройти 10 циклов, 20, 30, 50, но в конце концов виснет. В дебаггере это выглядит как СSTACK full, выпадает в B_Default_Handler.
Теперь интересные факты. Если убрать обмен по UART, т.е при алгоритме читает устройство №1, пишет в устройство №1, читает устройство №2, пишет в устройство №2 итд все работает без сбоев. UART сам по себе (без I2C) тоже работает - есть режим записи-чтения флеш по UArt, прогнал не один мегабайт, все нормально.
Изза чего может слетать стек? Была мысль, что может прерывания одновременно приходят - хотя вроде такого быть не должно, процессы разнесены. Понизил приоритет прерыванию I2C. Не помогает
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
paskal
сообщение Nov 17 2012, 18:08
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(vasta @ Nov 16 2012, 16:49) *
Изза чего может слетать стек?

Из-за некорректного возврата когда со стека снимаются не все параметры. Или в прерывании вы кладете что то на стек а потом забываете убрать. Тогда стек при каждом прерывании увеличивается и когда то переполняется
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 17 2012, 20:17
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(paskal @ Nov 17 2012, 20:08) *
Из-за некорректного возврата когда со стека снимаются не все параметры.
Или в прерывании вы кладете что то на стек а потом забываете убрать.

Интересно, как это может выглядеть?
разве что специально сделать.
Go to the top of the page
 
+Quote Post
paskal
сообщение Nov 18 2012, 15:18
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 352
Регистрация: 29-10-06
Из: Тула
Пользователь №: 21 769



Цитата(_Артём_ @ Nov 17 2012, 23:17) *
Интересно, как это может выглядеть?

Разные варианты.
1. Не те параметры параметры в функцию переданы. 2. На стек что то сохранили и забыли восстановить.

Цитата(_Артём_ @ Nov 17 2012, 23:17) *
разве что специально сделать.

Можно и специально. А можно и по ошибке.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Nov 18 2012, 16:55
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(paskal @ Nov 18 2012, 17:18) *
1. Не те параметры параметры в функцию переданы.

Если функции что-то передали, то считает она их так как умеет - то есть как те.

Цитата(paskal @ Nov 18 2012, 17:18) *
2. На стек что то сохранили и забыли восстановить.

Это больше для ассемблера актуально.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 25th July 2025 - 03:35
Рейтинг@Mail.ru


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