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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> SAM4S, Ничего не выходит
Грендайзер
сообщение Aug 7 2015, 13:20
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Ну началось... Бог с ней с пилой... Мне не важно, что там будит формироваться, мне важно что б там хоть что то формироалось. Я пробовал обнулять в основной программе номера элементов буфера. Т.е. так
Код
while (1)
    {    
        if (n == 8)
        {n = 0;}
    }
    return 0;
}

void DACC_Handler( void )
{
    volatile int IRQ_sense = 0;
    IRQ_sense = DACC -> DACC_ISR;
    DACC -> DACC_CDR = DACC_CDR_DATA(dout[n]);
    n = n + 1;
    return;
}


Так вот команда "n + 1" исправно выполняется, а вот обнуление в цикле "while(1)" т.е. "n = 0" не происходит. Почему? Может кто нибудь предложить программку, что б данные из "main" передать в "void DACC_Handler( void )"?
P.S.
int dout[8] = {300, 800, 1300, 1800, 2300, 2800, 3200, 100};

Сообщение отредактировал Грендайзер - Aug 7 2015, 13:24
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 7 2015, 13:31
Сообщение #47


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Грендайзер @ Aug 7 2015, 16:20) *
а вот обнуление в цикле "while(1)" т.е. "n = 0" не происходит.

Ну почему-же не происходит? Иногда может быть и происходит - как звезды на небе станут. Что написали, то и получили - два асинхронных процесса что-то делают с одной переменной.
QUOTE
Может кто нибудь предложить программку, что б данные из "main" передать в "void DACC_Handler( void )"?

Вы свое 'n' и 'dout' как-бы передаете, только делаете с ним хрен знает что. Повторяю - думайте над АЛГОРИТМОМ. Над его реализацией будете думать ПОТОМ.
while (1)
for(;; )
{
if (n == 8)
{n = 0;}
}

void DACC_Handler( void )
{
volatile int IRQ_sense = 0;
IRQ_sense = DACC -> DACC_ISR; // (полагаю, что дефайн для DACC структуры писал не индийский недоучка и не Грендайзер)
DACC -> DACC_CDR = DACC_CDR_DATA( dout[n] );
n = n + 1;
if( ++n > 7 )
n = 0;
return;
}


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 7 2015, 13:39
Сообщение #48


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Вы свое 'n' и 'dout' как-бы передаете, только делаете с ним хрен знает что

Частота работы ядра - 100 МГц, частота работы ЦАП - 50 МГц, прерывание возникает не ратьше чем в 25 циклов ЦАП. Ядро какбэ успеет ещё до Камчатки пешком дойти, пока процесс чухнётся.
Такая программа и без for(;;) нормально работает. Как n в main передать?

Сообщение отредактировал Грендайзер - Aug 7 2015, 13:45
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 13:45
Сообщение #49


Гуру
******

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



Цитата(Грендайзер @ Aug 7 2015, 16:39) *
Частота работы ядра - 100 МГц, частота работы ЦАП - 50 МГц, прерывание возникает не ратьше чем в 25 циклов ЦАП. Ядро какбэ успеет ещё до Камчатки пешком дойти, пока процесс чухнётся.

Ну тогда так: не забыли приписать volatile к переменной n?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 7 2015, 13:47
Сообщение #50


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Ну тогда так: не забыли приписать volatile к переменной n?

Нет, не забыл! Volatile куда тока не писал....
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 7 2015, 13:51
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Грендайзер @ Aug 7 2015, 16:39) *
Частота работы ядра - 100 МГц, частота работы ЦАП - 50 МГц, прерывание возникает не ратьше чем в 25 циклов ЦАП. Ядро какбэ успеет ещё до Камчатки пешком дойти, пока процесс чухнётся.

Написаное Вами Выше ни о чем, кроме каши в голове не свидетельствует, что было ясно и раньше sad.gif. Абсолютное непонимание того, что сотворили. Читайте по буквам еще раз - "два асинхронных процесса что-то делают с одной переменной".
QUOTE
Такая программа и без for(;;) нормально работает.

Писать ГРАМОТНО нужно даже если "работает".


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 13:51
Сообщение #52


Гуру
******

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



Цитата(Грендайзер @ Aug 7 2015, 16:47) *
Нет, не забыл! Volatile куда тока не писал....

Ну тогда не знаю, вы что-то недоговариваете. Ну и zltigo прав, конечно: не каждый раз оно сможет занулить эту переменную, даже если цикл успевает крутиться между прерываниями. Может, это вас и подкосило.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 7 2015, 13:55
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



QUOTE (Грендайзер @ Aug 7 2015, 16:47) *
Нет, не забыл! Volatile куда тока не писал....

Можете еще и в бубен постучать, свечку поставить. Только все работает у Вас правильно, в том смысле, как НАПИСАЛИ, так и "работает".



--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 13:58
Сообщение #54


Гуру
******

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



Кстати, а что надо-то? А то пока что и пила, которая не пила, и зануление, которое не зануляется (исключительно из-за каши в голове). Что на выходе получиться должно-то?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 7 2015, 14:11
Сообщение #55


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Что на выходе получиться должно-то?

Должно получится обнуление переменной n в цикле "while(1)" функции main.
Цитата
как НАПИСАЛИ, так и "работает".

Так подскажите, как написать, что б без бубна и свечек...
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 14:14
Сообщение #56


Гуру
******

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



Цитата(Грендайзер @ Aug 7 2015, 17:11) *
Так подскажите, как написать, что б без бубна и свечек...

Легко. Запретить прерывания на время проверки и обнуления переменной.
Только зачем всё это? Что мешает обнулять в обработчике прерывания?
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 7 2015, 14:20
Сообщение #57


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Цитата
Легко. Запретить прерывания на время проверки и обнуления переменной.

Честно говоря звучит... странновато... но попробую! К сожалению плата на работе, так что придётся до пн. потерпеть.
Цитата
Только зачем всё это? Что мешает обнулять в обработчике прерывания?

Проблема в том, что у меня почему то не передаются даннные из main в подпрограмму прерывания. Обнулить n кончно можно и в обработчике, но вот если мне надо какой нить хитрый фильтр посчитать... Эдак я пока из обработчика выйду столько событий могу напропускать... Да и насколько я понимаю, прерывания не для того, что б в них что то считать, они лишь нужны для общения с переферией.
Цитата
не каждый раз оно сможет занулить эту переменную, даже если цикл успевает крутиться между прерываниями. Может, это вас и подкосило

Не вижу корелляции если честно... На том всё и основано...

Сообщение отредактировал Грендайзер - Aug 7 2015, 14:30
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 15:46
Сообщение #58


Гуру
******

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



Цитата(Грендайзер @ Aug 7 2015, 17:20) *
Проблема в том, что у меня почему то не передаются даннные из main в подпрограмму прерывания.

Всё передаётся. Просто передаётся оно не так, как вам кажется, а так, как написано в исходнике. То есть проблема в том, что ваше видение программы и её поведение в соответствии с исходником отличаются. Надо что-то подправить в консерватории laughing.gif

Цитата(Грендайзер @ Aug 7 2015, 17:20) *
Да и насколько я понимаю, прерывания не для того, что б в них что то считать, они лишь нужны для общения с переферией.

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

Цитата(Грендайзер @ Aug 7 2015, 17:20) *
Обнулить n кончно можно и в обработчике, но вот если мне надо какой нить хитрый фильтр посчитать... Эдак я пока из обработчика выйду столько событий могу напропускать...

Насколько я могу судить, затягивание обработки прерывания АЦП может привести к отложенной обработке прерывания ЦАР. А это, в свою очередь, может привести к чрезмерному джиттеру на выходе ЦАП (а может и не привести). Есть простое решение: дать прерыванию ЦАП более высокий приоритет.
Go to the top of the page
 
+Quote Post
Грендайзер
сообщение Aug 7 2015, 17:18
Сообщение #59


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Имею некоторый негативный опыт запихивания изрядно куска кода в обработчик и с тех пор как то рефлектора стараюсь этого избегать, даже если надо обнулить переменную laughing.gif
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 7 2015, 19:22
Сообщение #60


Гуру
******

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



Цитата(Грендайзер @ Aug 7 2015, 20:18) *
Имею некоторый негативный опыт запихивания изрядно куска кода в обработчик и с тех пор как то рефлектора стараюсь этого избегать, даже если надо обнулить переменную laughing.gif

Ну, лишний раз интимные подробности лучше не разглашать. Типа, в красных панталонах успех у женской части публики не поимел, с тех пор красное в одежде избегаю laughing.gif
Дьявол в деталях. Вообще-то надо понимать, как система работает. Иногда приходится понимать до последнего бита в регистре и милливольта в осциллограмме. Пардон, но вам до такого понимания как пешком до Луны. Могу только пожелать успехов в профессиональном росте.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 11:13
Рейтинг@Mail.ru


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