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

 
 
> STM32vlDiscovery цикл for не работает
domowoj
сообщение Mar 22 2015, 16:44
Сообщение #1


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



STM32vlDiscovery.
Простейшая конструкция - просуммировать элементы массива.
Код
uint16_t GAME[m]={19,64,32,64,64,32,32,64,64,32,64,32,64,32,32,64,64,32,1152};
   const uint8_t m = 255;
uint16_t Tsinhro_T=0;
....
....                      
                    N = GAME[0];
                    Tsinhro_T = 0;
                    for    (i=1; i<N; i++)    
                    {                        
                    Tsinhro_T =Tsinhro_T +GAME[i];
                    }

Не хочет работать, виснет в теле цикла, причем в отладчике, пошагово,
все работает как надо.
В чем дело, мозг сломал.
Подскажите, пожалуйста, куда копать?

Сообщение отредактировал domowoj - Mar 22 2015, 19:31


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 20)
Golikov A.
сообщение Mar 22 2015, 19:41
Сообщение #16


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
Не знаю, что такого в этой процедуре, что может стек поломать...

да нет там ничего, 3 строчки, все просто...

ТС почему то упорно скрывает от нас реальный код, и дает какие-то выжимки. Тем самым от нас скрыта правда, а видно только то что автор считаем важным, при этом поскольку у автора ошибка, очевидно автор не очень осознает что же на самом деле важно, а что нет)...

Если только Tsinhro_T - ни какой-то злобный тип для которого перегружен оператор присвоения как-то очень злобно...

что с вочь догом, с задержкой чтения флеши, с другими прерываниями?

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

Go to the top of the page
 
+Quote Post
domowoj
сообщение Mar 22 2015, 19:46
Сообщение #17


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Ладно, спасибо за наводки, буду пробовать,
потом отпишусь.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
domowoj
сообщение Mar 26 2015, 17:53
Сообщение #18


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

Группа: Участник
Сообщений: 1 548
Регистрация: 20-12-07
Из: г.Новосибирск
Пользователь №: 33 486



Добрый вечер уважаемые друзья!
Цитата(Golikov A. @ Mar 23 2015, 01:41) *
ТС почему то упорно скрывает от нас реальный код, и дает какие-то выжимки.
Тем самым от нас скрыта правда,
а видно только то что автор считаем важным, при этом поскольку у автора ошибка,
очевидно автор не очень осознает что же на самом деле важно, а что нет)...

Вы оказались абсолютно правы.
После таймаута, (взгляд все-таки замыливается) и внимательного разбора написанного,
нашел ЛЯП, как AVR_овский отголосок,
при сбросе флага одного из прерываний я его не сбрасывал в 0, а устанавливал в "1".
Вместо
Код
    TIM4->SR &= ~TIM_SR_UIF; //

было
Код
    TIM4->SR |=  TIM_SR_UIF; //


Спасибо всем, тема закрыта.


--------------------
И на камнях растут деревья!
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Mar 26 2015, 18:00
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Стойте стойте... Давайте пока она не совсем закрыта еще кое что скажем...

В АРМах не принято сбрасывать флаги прерываний через &=, это несет в себе потенциальную опасность сбросить прерывание которое наступило пока вы сбрасываете прерывание...

обычно все такие флаговые регистры чувствительны только к записи одного уровня, то есть обычно надо записать в регистр значение через = с помеченным для сброса флагом, а всем остальными стоящими в обратном значении.... это сбросит только помеченные флаги и не изменит остальные.... Обратите на это внимание...

на пальцах
&= - это не атомарная операция, это
взять регистр
изменить регистр
записать регистр
между этими командами может придти еще прерывание, и вы его случайно затрете этими действиями...
Go to the top of the page
 
+Quote Post
etoja
сообщение Apr 3 2015, 09:23
Сообщение #20


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

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



Напишите
volatile int i;

чтобы компилятор не кешировал переменную в регистр процессора.
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Apr 3 2015, 11:10
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Если это ответ мне, то это не поможет....
Если не понимаете почему, то надо читать что я написал и думать...
Если не мне, то к чему это?

Go to the top of the page
 
+Quote Post

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

 


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


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