Форум РадиоКот https://radiokot.ru/forum/ |
|
концепция программы системы управления https://radiokot.ru/forum/viewtopic.php?f=57&t=103083 |
Страница 1 из 1 |
Автор: | jazz393 [ Пт апр 18, 2014 19:16:33 ] |
Заголовок сообщения: | концепция программы системы управления |
здравствуйте, вообщем я человек молодой, неопытный, самоучка, если кто подкинет мне статью и подскажет как и что буду очень благодарен, интересует след концепция: у меня есть дисплей, есть клавиатура, и есть некое устройство с n кол-вом плат. Мне надо написать систему управления данным устройством ( CAN интерфейс ), скажем так, на данном этапе я освоил сам интерфейс (уже связал 2 платы, разобрался с идентификаторами, данными), написал свой API для работы с дисплеем, с CAN шиной, с клавиатуров. Интересует следующее - у меня есть функция, которая возвращает в глобальную переменную код символа нажатой клавиши, или код отсутсвия нажатия. У меня есть таймер, который каждую 1мс генерирует прерывание, в теле этого прекрывания я вызываю эту функцию т.е. каждую 1 мс я переписываю содержимое кода клавиши. Какой вид всё это будет иметь? я вижу это примерно так: Код: unsigned char key=0xff; // глобальная переменная с кодом клавишы 0xff - отсутсвие нажатия клавишы interrup timer { code_keys(); // здесь я вызываю функцию сканирования клавиатуры } int main() { initialization(); // допусти тут инициализация всякой перефирии итп // отсюда я начинаю выводить на дисплей меню и соответвенно обрабатывать нажатия клавиш // как я это представляю себе while(1) { switch(key) { case 1: // вызов менюшки 1 - графика + новые реакции на нажатия клавиш - т.е. аналогичная данной конструкции, т.е. while содержит // такой же switch итж break case 2: // вызов менюшки 2 break; key=0xff; // по идее я должен обнулять здесь нажатие клавиши и точно так же должен его обнулять при каждом вызове функции // сканирвоания клавишы... } } } просто уже споткнуля несколько раз на то, что приходится переписывать всё почти заного, вот поэтому хотелось бы по возможности на чужих граблях подучиться |
Автор: | ARV [ Пт апр 18, 2014 19:21:06 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
уточните: на кой ляд раз миллион раз в секунду определять код клавиши, если клавишу по определению нажимать может человек, который даже если он Брюс Ли и Джеки Чан в одном флаконе не сумеет нажать кнопку чаще, чем 100 раз в секунду?! и еще, чисто из опыта: вы почему-то присвоили отсутствию нажатия ненулевой код... не смотря на то, что программе все равно, для человека 0 - это аналог отсутствия чего-либо. советую при написании программы, а тем более при обдумывании ее концепции, придерживаться традиционной человеческой логики - тогда и проблем с переделками с нуля будет меньше навеняка. |
Автор: | jazz393 [ Пт апр 18, 2014 19:28:57 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
ARV писал(а): уточните: на кой ляд раз миллион раз в секунду определять код клавиши, если клавишу по определению нажимать может человек, который даже если он Брюс Ли и Джеки Чан в одном флаконе не сумеет нажать кнопку чаще, чем 100 раз в секунду?! и еще, чисто из опыта: вы почему-то присвоили отсутствию нажатия ненулевой код... не смотря на то, что программе все равно, для человека 0 - это аналог отсутствия чего-либо. советую при написании программы, а тем более при обдумывании ее концепции, придерживаться традиционной человеческой логики - тогда и проблем с переделками с нуля будет меньше навеняка. вот об этом я и говорю, я не знаю как лучше делать) допустим буду я это делать каждые 200мс, а в обработчике буду просто counter++ какой-нибудь считать до 200 - нормально? про отсутсвие нажатия и 0 - там это связанно с аппаратным подключением мк к клавишам и опросом клавиатуры, вообщем так сделать проще и так уже было сделано до меня, и в др устройствах сделано у нас так же, поэтому тут лучше оставить, сам опрос я поменял - добавил проверок и т.п. |
Автор: | ARV [ Пт апр 18, 2014 19:33:16 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
чтобы мои ответы не были пустословием, мне недостаточно информации о том, какую конечную цель вы хотите достичь - это раз. неизвестно, как и на какой элементной базе вы построили схемотехнику: что за клава, сколько кнопок, как она подключена к МК и т.п. - это два это минимум вопросов, без ответов на которые все советы будут пустым звуком. |
Автор: | ИС-пытатель [ Пт апр 18, 2014 19:35:18 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
ARV, #define NULL 57 ![]() |
Автор: | jazz393 [ Пт апр 18, 2014 19:45:27 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
ARV писал(а): чтобы мои ответы не были пустословием, мне недостаточно информации о том, какую конечную цель вы хотите достичь - это раз. неизвестно, как и на какой элементной базе вы построили схемотехнику: что за клава, сколько кнопок, как она подключена к МК и т.п. - это два это минимум вопросов, без ответов на которые все советы будут пустым звуком. а зачем эта инфа? у меня есть рабочий опрос клавиш, который выдает мне код , опрос сделан как-то хитро - код клавишы обязательно содержит 6 единиц, что собственно я и проверяю. Какая там клава - беспонятия, работает и слава богу. Мк - at90can128 16MHz - врядли вам это что-то даст.. .. |
Автор: | ARV [ Пт апр 18, 2014 19:52:00 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
jazz393 писал(а): а зачем эта инфа? да хотя бы затем, что лично мне обращаться к функции опроса клавиатуры в прерывнии по таймеру, да еще миллион раз в секунду, никогда бы и в голову не пришло даже с перепою! но вы почему-то так сделали - я хочу знать вашу мотивацию. я ведь не исключаю, что теоретически такое может быть необходимо... ща я начну вам рассказывать, как надо работать с клавой и заведу вас в тупик... мне хотелось бы, чтобы вы мне спасибо сказали за советы, а не послали куда-то... и вообще, все решения зависят от условия задачи. с вашим МК я работал, кстати. и с клавой тоже ![]() |
Автор: | jazz393 [ Пт апр 18, 2014 20:12:55 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
ARV писал(а): да хотя бы затем, что лично мне обращаться к функции опроса клавиатуры в прерывнии по таймеру, да еще миллион раз в секунду, никогда бы и в голову не пришло даже с перепою! но вы почему-то так сделали - я хочу знать вашу мотивацию. я ведь не исключаю, что теоретически такое может быть необходимо... ща я начну вам рассказывать, как надо работать с клавой и заведу вас в тупик... я не знаю как лучше и почему, с этой целью я и создал данную тему... и источников которые бы адекватно описывали данную информацию я тоже не имею |
Автор: | ИС-пытатель [ Пт апр 18, 2014 20:14:36 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
Прям как у меня на работе: Сделайте мне что-нибудь, не знаю что... |
Автор: | jazz393 [ Пт апр 18, 2014 21:02:39 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
ИС-пытатель писал(а): Прям как у меня на работе: Сделайте мне что-нибудь, не знаю что... ну простите что я пытаюсь разобраться, чтобы не быть быдлокодером) |
Автор: | ARV [ Пт апр 18, 2014 22:31:34 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
вот лично я из множества реализованных проектов задействовал прерывания для клавиатуры буквально в одном или двух случаях, во всех остальных все делал исключительно методом поллинга, сиречь опроса. если ваша функция опроса возвращает код нажатых кнопок - почему бы вым не использовать ее именно для опроса? почему хотите сунуть ее в прерывания? Код: static uint8_t get_key(void); чем плох этот подход в вашем случае?int main(void){ initialization(); while(1){ switch(get_key()){ case K_NONE: break; case K_ENTER : // что-то там } } } далее, пусть ваша функция возвращает 0xFF, если кнопки не нажаты. могу ли я предположить, что если нажать какую-то кнпку, придет один или несколько нулевых битов в возвращаемом значении? т.е. у вас как бы инверсное кодирование кодов. ну и скажите, где логика: не нажато (т.е. ничего нет) - НЕ НОЛЬ, нажато (т.е. что-то есть) - выдаем НУЛИ... разве человек привык про пустой карман говорить - в нем лежит много пустоты, а про полный - в нем лежит не много пустоты? это ведь не по-человечески! кто мешает вам в вашей функции вместо return keykode; сделать return ~keykode; и получить коды кнопок в соответствии с логикой человека: 0 если не нажато, не ноль - если нажато? далее, обработка меню (заметил в вашем коде). меню - это не совсем основной режим, поэтому обработку перемещений по меню я никогда не делаю в основном цикле - выношу это в отдельную функцию: Код: static uint8_t get_key(void); как-то так для начала...
static uint8_t do_menu(void); int main(void){ initialization(); while(1){ switch(get_key()){ case K_NONE: break; case K_ENTER : // что-то там break; case K_MENU: switch(do_menu()){ case MNU_HELP: do_help(); break; case MNU_MODE1: set_mode(1); break; case MNU_PWR_OFF: sleep(); } break; } } } |
Автор: | uni [ Сб апр 19, 2014 23:51:43 ] |
Заголовок сообщения: | Re: концепция программы системы управления |
Ну, если действительно серьёзно и на долго хотите освоить комплексный подход к проектированию программной части такой системы, то нужно двигаться в сторону работы с сообщениями. Пример организации меню, основанного на сообщениях можно посмотреть тут: Организация древовидного меню. Также автор недавно выложил исходники в этой теме: PinBoard и древовидное меню. Смысл в том, что при объединении многих частей в систему, нужно как-то единообразно и одновременно со всем этим хозяйством общаться. Для этих целей используются операционные системы, но их трудно применить, когда точно сам не знаешь что нужно или нет большого опыта в этой части. Поэтому можно сделать упрощённую модель ОС, основанную на сообщениях и менеджере сообщений, который доставляет их куда нужно. Чтобы понять концепцию, нужно загрузить исходник в Proteus, поставить везде точки останова и изучать работу алгоритма. Скажу ещё, что я лично этот код не пробовал, я просто на него взглянул по-диагонали. Для себя я написал похожий код, но он выглядит куда сложнее и на C++. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |