Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 28 мар 2024, 15:53

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 11:52 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
Есть массив однобайтных данных (допустим, из пяти переменных Data1...Data5), находящийся в SRAM или в РОН.
В ходе выполнения основной программы периодически вызывается подпрограмма, в которой есть счетчик (Loop), инкрементируемый при каждом вызове подпрограммы. После пятого вызова подпрограммы Loop обнуляется, и далее счет начинается с нуля.
Подскажите, как при входе в подпрограмму вызвать DataN, номер которой (N) должен быть равен текущему значению Loop?


Последний раз редактировалось Valentinych 24 янв 2018, 13:11, всего редактировалось 1 раз.

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 12:13 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3769
Откуда: Россия
Если я правильно понял, то вот один из вариантов…
1.png
1.png [ 6.22 КБ | Просмотров: 11067 ]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 12:55 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
Не вижу массив в Вашем примере. Если прописываю массив в РОН (r20...r24), ничего не вызывается. Мне нужно данные из любой переменной массива сохранять в дугой регистр (Rusult, пусть будет r25).
А как прикрепить код из АВ в текст сообщения?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 13:08 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
Отредактированный пример выглядит уже корректнее, но тоже не решает моей задачи.
Объясню подробнее. Есть массив однобайтных переменных (пусть будет r20...r24). При первом входе в подпрограмму или макрос, нужно прочитать значение первой переменной массива (r20), и записать это значение в регистр Result (r25). При втором входе в подпрограмму - отправить в Result данные второй переменной (r21), и т.д. Прочитали (и обработали) все пять переменных, снова начинаем с первой.

Данные в самих переменных массива изменяются в других ветвях программы. По ряду условий для хранения переменных предпочтительнее использовать РОН, а не SRAM.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 13:39 


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 13:58 
Кстати мой пример так и действует по твоему алгоритму... единственное отличие, что используется для массива SRAM а не РОН.

Для РОН делай так: в подпрограмме выброси макрос (он там будет без надобности), а в места него результаты сравнения переменной Loop и по каждому значению этой переменной производишь копирование нужного регистра (r20...r24) в регистр r25... при выполнении действий с r24 незабываем обнулить переменную Loop... вот так будет выглядеть один из вариантов с РОН. :)
Писал SVN.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 15:02 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
Спасибо. Хотелось обойтись без многоэтажных сравнений, но видимо, придется сделать именно так.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 15:22 


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 18:00 
Не в сети
Аватара пользователя

Зарегистрирован: 29 май 2011, 17:59
Сообщения: 3769
Откуда: Россия
Вот обещанный пример…
1.png
1.png [ 14.26 КБ | Просмотров: 11051 ]


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Как в цикле вызывать нужную переменную из массива?
СообщениеДобавлено: 24 янв 2018, 18:28 
Не в сети

Зарегистрирован: 12 дек 2017, 23:11
Сообщения: 33
Вот это интересно. Мне еще не приходилось использовать такие конструкции. Теперь буду знать.
Но пока решил сделать по другому:
_Run_Error.jpg
_Run_Error.jpg [ 47.7 КБ | Просмотров: 11048 ]

Кусок ** Error **. Только здесь в массиве всего 4 переменные.
Байт DataOut_0 собирается из трех разных переменных, одна из которых - Loop, из которой берется текущее значение, и записывается в 2 младших бита DataOut_0.
Значение Error_Counter_n должно помещается во 2-й и 3-й биты DataOut_0, а значение из C_Module_E занимает всю старшую тетраду DataOut_0.
Ну и в DataOut_1 пишется идентификатор C_Error, который занимает весь байт.
Весь этот бутерброд, в итоге, отправляется по SPI в NRF24 для отправки в эфир.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB