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

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

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

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

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

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


 
Опции темы

Запуск отложенных программ

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

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

Сообщение от marera Посмотреть сообщение
передать до восьми команд, потом запустить их
Добавьте 9-ю команду - GO (START).
Или - поле/признак запуска выполнения принятого набора.
Или - жестко задать прием строго 8 команд, добавить команду NOP в набор уже имеющихся.
Yuri222 вне форума  
Непрочитано 03.03.2022, 16:05  
marera
Гражданин KAZUS.RUN
 
Регистрация: 26.09.2005
Сообщений: 572
Сказал спасибо: 58
Сказали Спасибо 506 раз(а) в 134 сообщении(ях)
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
Сказал спасибо: 67
Сказали Спасибо 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.RUN
 
Регистрация: 26.09.2005
Сообщений: 572
Сказал спасибо: 58
Сказали Спасибо 506 раз(а) в 134 сообщении(ях)
marera на пути к лучшему
По умолчанию Re: Запуск отложенных программ

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

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

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

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

Вот только в данном случае не представляю, каким должен быть протокол, чтобы можно было что-то выбрасывать и что-то добавлять. Разве что полностью: ввел команду "стереть содержимое буфера", затем заполняешь, проверяешь, и если все ОК, разрешаешь выполнение...
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
eddy вне форума  
Непрочитано 04.03.2022, 17:42  
LiVit
Частый гость
 
Регистрация: 20.11.2011
Адрес: Казань
Сообщений: 36
Сказал спасибо: 67
Сказали Спасибо 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.RUN
 
Аватар для eddy
 
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
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).
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
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, время: 15:08.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.