Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 03.03.2022, 15:12  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Запуск отложенных программ

С названием темы заморочился...
И так, задача:
Есть удаленное устройство (радиоканал) и нужно на него передать до восьми команд, потом запустить их исполнение в цикле до получения следующего набора.
Команды могут быть в произвольном порядке, но не более восьми. Для исполнения каждой есть функция.
Как-то не приходилось сталкиваться с такими задачками, поэтому растерялся.
Для справки восемь команд - это 8!, более 40 тысяч комбинаций.
Форумчане, посоветуйте что-нибудь, либо ткните носом в известные (не мне) способы. Установку какой-либо OS на конечном устройстве не предлагать.
Реклама:
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 03.03.2022, 15:16  
Yuri222
Почётный гражданин KAZUS.RU
 
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 7,780
Сказал спасибо: 2,671
Сказали Спасибо 2,645 раз(а) в 1,953 сообщении(ях)
Yuri222 на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Сообщение от marera Посмотреть сообщение
передать до восьми команд, потом запустить их
Добавьте 9-ю команду - GO (START).
Или - поле/признак запуска выполнения принятого набора.
Или - жестко задать прием строго 8 команд, добавить команду NOP в набор уже имеющихся.
Yuri222 вне форума  
Непрочитано 03.03.2022, 16:05  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Сообщение от Yuri222 Посмотреть сообщение
Добавьте 9-ю команду - GO (START).
Или - поле/признак запуска выполнения принятого набора.
Или - жестко задать прием строго 8 команд, добавить команду NOP в набор уже имеющихся.
Старт и стоп - понятно. И набор команд в разных видах принять можно. Вопрос в том, как с помощью этого набора обеспечить вызов последовательности соответствующих функций.
Мне видится вариант с размещением функций по заданным адресам и сопоставлением их командам. Правда я этого ни когда не пробовал и пока не представляю как.
__________________
Будь проще, дойдет и до синтеза.

Последний раз редактировалось marera; 03.03.2022 в 16:09.
marera вне форума  
Непрочитано 04.03.2022, 10:33  
LiVit
Частый гость
 
Регистрация: 20.11.2011
Адрес: Казань
Сообщений: 36
Сказал спасибо: 65
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
LiVit на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Команды могут исполняться по очереди? Или необходимо "одновременное" исполнение?
Если по очереди - фигня вопрос. Делаете FIFO буфер, куда запихиваете команды. Раз у вас не более 8, то сделайте буфер на 10 или 16 команд - про запас.
Как команда выполнилась (функция отработала и что-то вернула), сдвигаете буфер и выполняете следующую команду, пока не опустошите буфер.

Поправочка - сразу не заметил, что у вас требуется кольцевое исполнение - делаете не FIFO, а 2 кольцевых буфера. Один для записи поступающих команд, второй - для исполнения. Выбор какой что сейчас делает - по флагу. Если установлен, исполняем из буфера0, в противном случае - из буфера1.

Слушайте, вы сколько программированием занимаетесь, что у вас такие вопросы вообще появляются?

А если вам надо что-то типа параллельного выполнения - FreeRTOS вам в помощь

Последний раз редактировалось LiVit; 04.03.2022 в 10:40.
LiVit вне форума  
Непрочитано 04.03.2022, 16:21  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Сообщение от LiVit Посмотреть сообщение
Слушайте, вы сколько программированием занимаетесь, что у вас такие вопросы вообще появляются?
Хороший вопрос...
Мне не нравится конструкция SWITCH, которая необходима для "простого" сопоставления кода команды с вызовом соответствующей функции.
Функций-то восемь, как и команд, а вот цепочку этих команд хотелось бы удлинить хотя бы до двух десятков и во что превратится SWITCH?
Полагал, что существуют традиционные способы с которыми я не сталкивался. Вот и весь вопрос, а рассказывать про буферы надобности нет.
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 04.03.2022, 16:37  
marera
Гражданин KAZUS.RU
 
Регистрация: 26.09.2005
Сообщений: 569
Сказал спасибо: 58
Сказали Спасибо 509 раз(а) в 135 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Пожалуй мои заблуждения рассеиваются. SWITCH - то всегда будет иметь 8 CASEов. А цикл по буферу ограничится только размером буфера. Пожалуй тему можно закрывать, спасибо посочувствовавшим. Хорошо, когда есть с кем поговорить, особенно, когда начинаешь тупить.
__________________
Будь проще, дойдет и до синтеза.
marera вне форума  
Непрочитано 04.03.2022, 17:23  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Запуск отложенных программ

8 команд - uint8_t в качестве флага (запускать - не запускать). Пришла команда запускать — выставляем данный флаг. Пришла команда прекратить — снимаем его. А в суперлупе просто перебираем биты флага и запускаем те функции, где единицы..
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 04.03.2022, 17:26  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Сообщение от marera Посмотреть сообщение
а вот цепочку этих команд хотелось бы удлинить хотя бы до двух десятков и во что превратится SWITCH?
А, т.е. важна еще и последовательность? Типа "ехать прямо, ехать влево" и т.п.?
Ну, тогда завести кольцевой буфер, скажем, на 128 байт: будет максимум 128 команд. Содержимое буфера - индекс в массиве указателей на функции.

Вот только в данном случае не представляю, каким должен быть протокол, чтобы можно было что-то выбрасывать и что-то добавлять. Разве что полностью: ввел команду "стереть содержимое буфера", затем заполняешь, проверяешь, и если все ОК, разрешаешь выполнение...
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Непрочитано 04.03.2022, 17:42  
LiVit
Частый гость
 
Регистрация: 20.11.2011
Адрес: Казань
Сообщений: 36
Сказал спасибо: 65
Сказали Спасибо 13 раз(а) в 11 сообщении(ях)
LiVit на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Сообщение от marera Посмотреть сообщение
Пожалуй мои заблуждения рассеиваются. SWITCH - то всегда будет иметь 8 CASEов. А цикл по буферу ограничится только размером буфера.
Более того, можно обойтись вообще без switch/case.
Немножко заморочно, зато позволяет увеличить количество команд до... ну, скажем так, до существенного размера.

const void(*ALGO_PTR_ARRAY[])(void) = {
(void(*)(void))Algo1,
(void(*)(void))Algo2,
(void(*)(void))Algo3,
(void(*)(void))Algo4,
(void(*)(void))Algo5,
};

Массив ALGO_PTR_ARRAY содержит указатели на функции, которые должны работать в соответствии с принятыми командами.

Вызовем нужный алгоритм:
(*ALGO_PTR_ARRAY[command_num])();

Надеюсь, дальше не нужно объяснять?

Последний раз редактировалось LiVit; 04.03.2022 в 17:44.
LiVit вне форума  
Сказали "Спасибо" LiVit
marera (04.03.2022)
Непрочитано 04.03.2022, 17:54  
eddy
Почётный гражданин KAZUS.RU
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,581
Сказал спасибо: 115
Сказали Спасибо 806 раз(а) в 583 сообщении(ях)
eddy на пути к лучшему
По умолчанию Re: Запуск отложенных программ

Так и есть. Вот, например:
Код:
typedef void(*specfpointer)(char *arg);
...
static specfpointer speccmdlist[SCMD_AMOUNT] = {
    [SCMD_IGNORE] = addIGN,
    [SCMD_DELIGNLIST] =  delignlist,
    [SCMD_DFU] =  bootldr,
    [SCMD_FILTER] =  add_filter,
    [SCMD_CANSPEED] =  CANini,
    [SCMD_CANID] =  canid,
    [SCMD_LISTFILTERS] =  list_filters,
    [SCMD_IGNBUF] =  print_ign_buf,
    [SCMD_PAUSE] =  inpause,
    [SCMD_RESUME] =  inresume,
    [SCMD_SEND] =  sendCANcommand,
    [SCMD_DUMPCONF] =  dump_userconf,
    [SCMD_GETCTR] =  getcounter,
    [SCMD_WD] = wdcheck,
    [SCMD_DUMPCMD] = dumpcmdcodes,
    [SCMD_DUMPERR] = dumperrcodes,
    //[SCMD_ST] = stp_check,
};
Ну и дальше просто вызывается speccmdlist[i](arg).
__________________
Смерть бандеровской мразоте!
eddy вне форума  
Сказали "Спасибо" eddy
marera (04.03.2022)
 

Закладки
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PIC самомодификация кода в памяти программ Pasatst Proteus 0 28.02.2018 13:49
Портативные осцилографы - своими руками picavr Измерительное оборудование 767 24.02.2018 18:48
80C31 - работа с внешней памятью программ avgust75 ПЛИС и другие МК 9 08.11.2016 10:22
Работа с памятью программ ATmega128(256) paha1956 Микроконтроллеры, АЦП, память и т.д 8 11.08.2006 10:02
PIC16F877A pawelk Микроконтроллеры, АЦП, память и т.д 17 28.05.2005 23:54


Часовой пояс GMT +4, время: 22:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot