Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: stm32 cubeide два инкремента не совместимы.

Чт янв 20, 2022 17:49:52

Eddy_Em писал(а):А твой код "софтового таймера" - ад какой-то.
Опять мне присваивают чужое.
Этот код взять отсюда.
Значит так, друзья, вы уж сами определитесь что такое КА, а то вы, по ходу дела, каждый по своему видите реализацию этих КА.

Re: stm32 cubeide два инкремента не совместимы.

Чт янв 20, 2022 18:55:37

tonyk, я поторопился, надо было так
Код:
   KA = 0;
   while (1) {
     switch (KA) {
       case 0: инит_всего();   KA = 1; break;
       case 1: опрос_кнопок(); KA = 2; break;
       case 2: действие();     KA = 3; break;
       case 3: вывод_лсд();    KA = 1; break;
       default: в пиииии.....();
     }
   }

И всё равно неправильно! Я же говорю, теорию изучи. У тебя тут ни Мили, ни Мур.

Добавлено after 1 minute 33 seconds:
Dimon456, все равно неправильно. У тебя - не конечный автомат, а тупой последовательный код, написанный через жопу!

Дядя Эдик часто резок и прямолинеен до грубости, но тут я с ним полностью согласен.

Re: stm32 cubeide два инкремента не совместимы.

Чт янв 20, 2022 22:41:48

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

Добавлено after 3 hours 24 minutes 46 seconds:
Конечный автомат
Энкодер прикрутить

Re: stm32 cubeide два инкремента не совместимы.

Чт янв 20, 2022 23:53:52

Dimon456, ну кто ж пишет комментарии на русском? Это же вообще ниже плинтуса!

Re: stm32 cubeide два инкремента не совместимы.

Чт янв 20, 2022 23:56:57

Dimon456, ну кто ж пишет комментарии на русском?
Наверное тот, кто хорошо им владеет ? :shock:

Это же вообще ниже плинтуса!
Такая реакция, как будто он на арабском написал :)))

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 10:48:07

Наверное проблемы с кодировкой.

Мне нравится микро-меню на конечных автоматах

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 11:09:36

Наверное проблемы с кодировкой.

Мне нравится микро-меню на конечных автоматах

MENU_ITEM-это что постоянная?А через указатель как сделать меню?

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 12:02:24

MENU_ITEM() - может оказаться макросом, результатом которого будет константа, которая хранится во Flash памяти как статический массив. Удобно. У себя я сделал через структуры:
Код:
typedef struct ScreenItem {
   SCREEN_OBJECT obj_type;            // Element type
   char *menu_text;            // Menu text link
   void (*exec_func)(uint8_t v);         // Menu callback or null
   uint16_t Left, Top, Width, Height;      // Coordinates of menu item   
   int TextColor, BGColor;            // Colors
   const uint8_t *Pictogramm;         // Pointer to pictogramm, or NULLPTR
} ScreenItem_t;

ScreenItem_t Scr1_Button2 = {SO_BUTTON, "ADC", *TestPress2, 0, 54, 32, 32, COLOR_LIME, COLOR_BLACK, NULLPTR};
ScreenItem_t Scr1_Button8 = {SO_BUTTON, "Voltage", *VScreenItem_t ScrTDR_Sw = {SO_BUTTON + SO_ADJUSTABLE, "<- Pairs ->", *TDR_SwitchPairs, 132, 200, 134, 21 ,COLOR_LIME, COLOR_BLACK, NULLPTR};
ScreenItem_t ScrTDR_quit = {SO_BUTTON, "Exit", *TDR_Exit, 269, 200, 50, 21, COLOR_LIME, COLOR_BLACK, NULLPTR};
oltageTest_CB, 180, 54, 90, 32, COLOR_LIME, COLOR_BLACK, NULLPTR};
ScreenItem_t ScrSett_BrLVL = {SO_BUTTON + SO_ADJUSTABLE, "BackLight", *BLPress_CallBack, 0, 51, 110, 35, COLOR_WHITE, COLOR_BLACK, NULLPTR};

Опять же, это для графического меню с указателями и красивостями.
После этого элементы объединяются в массивы указателей на кнопки, а на массивы указателей ссылаются экраны.

Ну это так, к слову.

ScanButtons(); - удобная абстракция, чтобы основной цикл не раздувался, был компактнее и проще в отладке. В моём коде эта функция проходится по пинам, проверяет их состояние, работает с таймерами и вызывает обработчики событий нажатия кнопки. Так же может вызывать событие удержания кнопки (но это в другом устройстве было сделано).
И получаем следующее:
main -> while(1) -> Scanuttons() -> OnButtonPress(n) -> SomeFunc[n]();
В другом проекте всё происходит не столь тривиально, но это другая история.

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 15:08:26

Аlex, уважающий себя человек не будет в коде писать комментарии на языке, отличном от английского! Ведь это будет означать, что 99.9% населения Шарика комментарии не поймут.

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 15:15:12

Eddy_Em, смотря для чего эти комментарии пишутся. Если я пишу для себя, то я буду их писать на своём родном языке. И мне пофиг, поймёт там кто их, или нет.

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 15:25:45

Аlex, но тогда не выкладывай это на всеобщее обозрение! Некошерно же!!!
И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 16:21:21

И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.
Обоснуй. А то может я всю жизнь всё неправильно делал?

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 16:24:42

Аlex, но тогда не выкладывай это на всеобщее обозрение!
Да не выдумывай.
Твои фразы звучат как "Не пишите тут на форуме на Русском языке ! Это ниже плинтуса !".

Re: stm32 cubeide два инкремента не совместимы.

Пт янв 21, 2022 18:57:29

Аlex, уважающий себя человек не будет в коде писать комментарии на языке, отличном от английского! Ведь это будет означать, что 99.9% населения Шарика комментарии не поймут.

Дядя Эдик в своём репертуаре: пятничное обострение максимализма и перфекционизма вкупе с заносами на поворотах. Не обращайте внимание, воспаление пройдёт вместе с пятницей. Пора уже привыкнуть и не реагировать, а то вы своими комментами только возбуждаете у него приступ. :)))

Re: stm32 cubeide два инкремента не совместимы.

Сб янв 22, 2022 08:50:16

Нафлудили-то аж на пять страниц, при это самое главное пропустили - Иван начал осваивать логику. Это уже прогресс, хотя и кривой как всё что он пишет. От детских болезней так и не избавился. Я пытался разговорить его, где он брал ресурсы для обучения - с целью заблокировать заразу, но Иван молчит как партизан.
Вот сейчас опять уйдёт в анабиоз на пару месяцев, а потом выкатит очередной шедевр, от которого мозги плавятся.

Re: stm32 cubeide два инкремента не совместимы.

Сб янв 22, 2022 08:58:59

Аlex, но тогда не выкладывай это на всеобщее обозрение! Некошерно же!!!
И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.

И тут у меня пошли флэшбеки китайских исходников с индусскими корнями.
Для себя пишу от настроения - на русском и на английском. Перемежая их время от времени.
По большей части никому мой код не нужен, а сам разберусь потом.

Re: stm32 cubeide два инкремента не совместимы.

Сб янв 22, 2022 14:37:16

В чем то "Дядя Эдик" прав, рано или поздно IDE сломает этот коммент, да так сломает, что потом не возможно будет восстановить. Это факт.
AVI-crak писал(а):а потом выкатит очередной шедевр, от которого мозги плавятся.
Вот так вот не надо говорить, чего стоит только вот этот шедевр
вот от него точно будут не только мозги плавиться, но и еще кое что за плавится. Или может вы считаете что у других интеллект равносильный вашему?
А с чего вы начинали? Ответьте мне на вопрос. Случайно не с такого же шедевра, как у ТС? Или может сразу начали с методов эффективного программирования?

Ни кто не ответил на его вопрос
ivan dimir писал(а):А через указатель как сделать меню?
Там везде указатели используются, куда не плюнь.
ivan dimir существует много разновидностей этих микро-меню, инет кишит ими, даже на asm есть, правда для avr.
По степени управления различаются от одной кнопки. две кнопки, три кнопки, до целых клавиатур.
Но либо так не подходит, либо эдак, либо слишком заумно сделано, хотя подробная инструкция имеется.

В моем меню
Код:
MENU_ITEM(m_0, m_1, null_menu, null_menu, null_menu, STANDART_SCREEN);   // STANDART_SCREEN
к каждому пункту привязана своя функция, к примеру
Код:
STANDART_SCREEN();
я ее могу наполнить так, как захочу, наполнить теми данными какими мне надо.

В коде я отслеживаю в каком пункте меню нахожусь и выполняю с ним те действия которые требуется
Код:
id = menu->SelectCallback;
Читаемо это, не читаемо, да ... с высокой горки.
Минус - большой размер кода. Плюс - практично и эффективно.
Если пример нужен, могу дать.

Re: stm32 cubeide два инкремента не совместимы.

Сб янв 22, 2022 17:35:40

Dimon456 писал(а):А с чего вы начинали? Ответьте мне на вопрос. Случайно не с такого же шедевра, как у ТС? Или может сразу начали с методов эффективного программирования?

Да так-же как все, с моргалки светодиодом. Разница в том что мне были интересны внутренности мк, отчего пришлось изучать документацию и множество примеров. К тому-же выбранная IDE сразу демонстрировала код в асме при пошаговом режиме - это дало стимул писать не так как в примерах, а после - вообще не так.
Мериться мозгами желания не имею, тут без меня желающих навалом - у каждого второго и длинше и ширше, и вообще иного цвета.

Re: stm32 cubeide два инкремента не совместимы.

Чт фев 03, 2022 23:20:29

Вот мой код по изменению инкремента.С борьбой дребезга контактов.

Re: stm32 cubeide два инкремента не совместимы.

Сб фев 05, 2022 20:59:48

Иван, научись не использовать условия, ну или максимально сокращать их до простейшей математики.
Ну и с форматированием текста немного поработать нужно. Почти все IDE имеют кнопку "сделать красиво" - форматируют код.
Пришлось твой код в кучу собирать, а то так и косоглазие получить можно.

Умножения, сдвиги, сложения и вычитания - все эти команды выполняются за один такт.
Один условный оператор тормозит выполнение программы на 1-12 тактов.
Вообще-то антидребезг выполняется гораздо проще, но если уж хочется...
Ответить