0 / 0 / 0
Регистрация: 30.05.2022
Сообщений: 6
1

Можно ли создать массив в прерывании?

18.06.2022, 20:27. Показов 489. Ответов 7
Метки нет (Все метки)

В прерывании одновременно считывается АЦП и создается массив. Или лучше вынести формирование массива в main?
C
1
2
3
4
5
6
7
8
9
ISR (TIMER1_COMPA_vect) 
{
    float a = ADC_read(); 
    for (i=0; i<size; i++)
    {
        arr[i]=a;
    }
    i==0;
}
Добавлено через 2 минуты
Массив создается в течение одной секунды, обрабатывается, затем создается новый за следующую секунду. И нужно ли обнуление i и насколько верно оно реализовано?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.06.2022, 20:27
Ответы с готовыми решениями:

Таймеры: можно ли менять значения периода в прерывании?
Вопрос такой - нужно сформировать временные интервалы с несколькими заданными значениями, которые...

Если можно создать массив TButton, то как создать массив их событий?
Пишу программу в которой много однообразных Едитов и кнопок. Чтобы &quot;облегчить сбе жизнь&quot; создал...

можно ли и если можно, то как в сессии создать двумерный массив ?&
нужен сабж

О потоках std::thread: можно ли вложить потоки друг в друга и можно ли создать динамический массив потоков?
1) Могу ли я вложить потоки друг в друга? 2) Могу ли я создать динамический массив потоков,...

7
-12 / 1 / 0
Регистрация: 27.12.2021
Сообщений: 45
19.06.2022, 11:40 2
При срабатывании вектора прерывания идёт наполнение массива.
i обнуляется одним =

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
int SIZE = 20; // размер массива
if (i>0) (i=0); // обнуления индекса
         
ISR (TIMER1_COMPA_vect) //срабатывание вектора прерывания по совпадению
{
        if (i>SIZE) (i=0); //проверяем индекс i чтоб не было переполнения и обновляем его если достигнут предел
    float a = ADC_read();  //запись в переменную 'a' значение полученное из функции ADC_read
    
        arr[i]=a; // запись переменной 'a' в массив
                i++; // инкремент индекса
 
 
}
Тут вопрос успеет ли за одно прерывание наполниться массив. У те бы же идёт вектор по совпадению. Если происходит наполнение по одному байту за одно прерывание то тогда обнулять его надо в том случае когда ты получаешь нужное количество байт.


Это мое мнение.
0
Просто Лис
Эксперт Python
4483 / 2874 / 940
Регистрация: 17.05.2012
Сообщений: 8,395
Записей в блоге: 9
19.06.2022, 19:35 3
Не понятно зачем в массив вносятся одни и те же данные. Точно вызов функции ADC_read() не внутри цикла?
0
-12 / 1 / 0
Регистрация: 27.12.2021
Сообщений: 45
21.06.2022, 21:38 4
В массив вносятся разные данные из вызываемой функции ADC_read.
0
1146 / 627 / 105
Регистрация: 15.05.2012
Сообщений: 3,774
22.06.2022, 11:32 5
Один раз вызвали, а потом этим значением
C
1
arr[i]=a;
всё позаполняли.
0
7 / 6 / 1
Регистрация: 28.03.2020
Сообщений: 18
22.06.2022, 18:54 6
операции с float в прерывании?
Это жуть. АЦП АВР выдает 10 или 8 битное целочисленное значение, преобразование его во float на ходу займет много ресурсов.
Откуда Вы взяли функцию ADC_read(), поглядеть бы на нее внутри?
1
Grey
23.06.2022, 11:34
  #7

Не по теме:

А тут сплошная жуть.
Динамическое создание массива.
Длительная работа в прерывании.
Компилятор может этот массив и выкинуть, при оптимизации.

0
194 / 154 / 23
Регистрация: 16.08.2013
Сообщений: 735
23.06.2022, 11:38 8
Тише тише, тс давно умыл руки..
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2022, 11:38
Помогаю со студенческими работами здесь

Массив: Как можно создать массив, не прописывая каждую строку, а с применением цикла?
Добрый день. Имеется массив: var priceList = { &quot;1644&quot; : {&quot;id&quot; : &quot;1644&quot;, &quot;subid&quot; : {},...

Можно ли создать динамический массив?
можно ли на авс паскале работать с динамическим массивом?

Можно ли создать массив словарей
Всем доброе. Есть 5 словарей вида Dictionary&lt;string, List&lt;string&gt;&gt; D1 = new Dictionary&lt;string,...

Можно ли создать массив с именем?
Можно ли создать массив с именем? На php легко $cid = 1; $item = 2; $stroka =...

Можно ли создать массив Bitmap?
Можно ли на С++ создать массив Bitmap? Если да, то просьба привести пример записи. Bitmap^...

Можно ли создать массив PngImage?
при подключенной библиотеке &quot;pngimage.hpp&quot; запись типа TPngImage *test = new TPngImage; ошибок...

Можно ли создать массив размера 10^20?
Возможно ли создать массив такого размера?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru