Например TDA7294

Форум РадиоКот • Просмотр темы - stm32 cubeide два инкремента не совместимы.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 10:12:49

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 270 ]    , , , , 5, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Чт янв 20, 2022 17:49:52 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Eddy_Em писал(а):
А твой код "софтового таймера" - ад какой-то.
Опять мне присваивают чужое.
Этот код взять отсюда.
Значит так, друзья, вы уж сами определитесь что такое КА, а то вы, по ходу дела, каждый по своему видите реализацию этих КА.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Чт янв 20, 2022 18:55:37 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
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 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Eddy_Em, и tonyk, мне это, КА, без надобности.
И так что-то и без КА могу сляпать, а читается код, не читается, мне до балды.
Другой реализации я пока не видел, будем придерживаться этой.

Добавлено after 3 hours 24 minutes 46 seconds:
Конечный автомат
Спойлер
Код:
   #define BTN_LOCK_TIME   50                  // время обработки дребезга в папугаях
   #define BTN_LONG_TIME   150                  // время фиксации длинного нажатия в папугаях

   //настройка портов и линий                
   #define BTN_PIN           GPIOB->IDR            // порт кнопок
   #define BTN_LINE1      GPIO_Pin_5            // линии кнопок
   #define BTN_LINE2      GPIO_Pin_0   
   #define BTN_LINE3      GPIO_Pin_1
   #define BTN_LINE3      GPIO_Pin_2      

   //определения флагов кнопок
   #define BTN_SHRT1      (1<<0)               // флаги короткого нажатия кнопок
   #define BTN_SHRT2      (1<<1)
   #define BTN_SHRT3      (1<<2)
   #define BTN_LINE4      (1<<3)
 
   #define BTN_LONG1      (1<<4)               // флаги длинного нажатия кнопок
   #define BTN_LONG2      (1<<5)
   #define BTN_LONG3      (1<<6)
   #define BTN_LONG4      (1<<7)
 
//глобальные переменные
volatile uint8_t BtnFlags;              //регистр флагов нажатых кнопок

//функция инициализации портов 
void BtnInit (void)                             
{   
лень писать
}

//функция циклического опроса кнопок (вызывать с частотой хГц, например в прерывании)
void BtnExe (void)                                 
{   
   static uint8_t BtnLockBit;                 //защелка (защита от дребезга)
   static uint16_t BtnLockCoun;               //счетчик защелки (защита от дребезга)
   static uint16_t BtnLongCoun;               //счетчик длинного нажатия
   static uint8_t BtnMascLast;                //запомнить маску нажатой кнопки для анализа после отжатия кнопки

   unsigned uint8_t BtnMask = 0; 
   if (~BTN_PIN & BTN_LINE1)    BtnMask = BTN_SHRT1;//формирование маски нажатых кнопок
   if (~BTN_PIN & BTN_LINE2)    BtnMask = BTN_SHRT2;
   if (~BTN_PIN & BTN_LINE3)    BtnMask = BTN_SHRT3;
   if (~BTN_PIN & BTN_LINE4)    BtnMask = BTN_SHRT4;

   //основной алгоритм обработки событий кнопки
   if (BtnMask){                               //клавиша нажата
      BtnMascLast = BtnMask;                  //запоминаем для использования после отпускания кнопки

      if (BtnLockCoun < (BTN_LOCK_TIME)){
         BtnLockCoun++;                      //обработка дребезга
         return;
      }

      BtnLockBit=1;                           //нажатие зафиксировано     
      if (BtnLongCoun >= (BTN_LONG_TIME))                               
         return;
      
      if (++BtnLongCoun >= (BTN_LONG_TIME))
         BtnFlags |= (BtnMask << 4);         //установка бита длинного нажатия (старшие 4 бита флагов)
   }

   else{                                       //клавиша отжата             
      if (BtnLockCoun){                       //обработка дребезга
         BtnLockCoun --;
         return;
      }

      if (! BtnLockBit)                        //отжатие зафиксировано
         return;

      BtnLockBit =0;
      if (BtnLongCoun < (BTN_LONG_TIME))
         BtnFlags |= BtnMascLast;            //установка бита короткого нажатия (младшие 4 бита флагов)
      
      BtnLongCoun = 0;
   }
}


//чтени маски нажатых кнопок 
//возвращает маску нажатых кнопок (бит 0-3 - коротк нажат, бит 4-7 - длинн нажат)
uint8_t BtnGet (void)                               
{   
    uint8_t temp = BtnFlags;
    BtnFlags = 0;
    return temp;
}



button = BtnGet();            //читаем значение кнопок

if (button == BTN_SHRT1) {}
if (button == BTN_SHRT2) {}
if (button == BTN_SHRT3) {}
if (button == BTN_SHRT4) {}

if (button == BTN_LONG1) {}
if (button == BTN_LONG2) {}
if (button == BTN_LONG3) {}
if (button == BTN_LONG4) {}
Энкодер прикрутить
Спойлер
Код:
// Посмотреть относительное перемещение (по сравнению с прошлым вызовом)
int16_t enc_GetRelativeMove(void)
{
   // Для хранения предыдущего значения счетчика
   static uint16_t CNT_last = 0;
   // Текущее значение, чтоб только один раз было запрошено
   uint16_t CNT_now = TIM3->CNT;
   // Посчитаем перемещение
   int16_t  CNT_diff = (int16_t)(CNT_now - CNT_last);
   // Сохраним текущее значение как предыдущее
   CNT_last = CNT_now;
   // Вернем перемещение
   return CNT_diff;
}

temp = (int8_t)enc_GetRelativeMove();

if (temp < 0) { - temp }
if (temp > 0) { + temp }


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Чт янв 20, 2022 23:53:52 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Dimon456, ну кто ж пишет комментарии на русском? Это же вообще ниже плинтуса!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Чт янв 20, 2022 23:56:57 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Dimon456, ну кто ж пишет комментарии на русском?
Наверное тот, кто хорошо им владеет ? :shock:

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


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 10:48:07 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Наверное проблемы с кодировкой.

Мне нравится микро-меню на конечных автоматах
Спойлервзял тупо вот так вот натыкал
Изображение
на выходе получаем что-то вроде
Код:
// Menus   Name   | Next   | Prev   | Parent   | Child   | SelectFunction
MENU_ITEM(m_0, m_1, null_menu, null_menu, null_menu, STANDART_SCREEN);   // STANDART_SCREEN
MENU_ITEM(m_1, m_2, null_menu, null_menu, null_menu, POWER);         // POWER
MENU_ITEM(m_2, m_3, null_menu, null_menu, null_menu, CHARGE);         // CHARGE
MENU_ITEM(m_3, m_4, null_menu, null_menu, null_menu, OPERATION);      // OPERATION
MENU_ITEM(m_4, m_0, null_menu, null_menu, null_menu, TIME);            // TIME
MENU_ITEM(m_5, m_7, null_menu, m_6, m_6, SETTING_ENTER);            // SETTING_ENTER
MENU_ITEM(m_6, null_menu, null_menu, m_5, m_5, CLEER_PARAMETRS);      // CLEER_PARAMETRS
MENU_ITEM(m_7, m_13, m_5, m_8, m_10, CALIBRATIONS_DEVICES);            // CALIBRATIONS_DEVICES
MENU_ITEM(m_8, m_11, null_menu, m_9, m_7, UMAX_LIMIT);               // UMAX_LIMIT
MENU_ITEM(m_9, m_12, null_menu, m_10, m_8, IMAX_LIMIT);               // IMAX_LIMIT
MENU_ITEM(m_10, null_menu, null_menu, m_7, m_9, SAVE_SETTINGS);         // SAVE_SETTINGS
MENU_ITEM(m_11, null_menu, m_8, null_menu, null_menu, UMAX_LIMIT_1);   // UMAX_LIMIT_1
MENU_ITEM(m_12, null_menu, m_9, null_menu, null_menu, IMAX_LIMIT_1);   // IMAX_LIMIT_1
MENU_ITEM(m_13, m_15, null_menu, m_14, m_14, CALIBRATION_VOLTMETR);      // CALIBRATION_VOLTMETR
MENU_ITEM(m_14, m_17, null_menu, m_13, m_13, CALIBRATION_AMPERMETR);   // CALIBRATION_AMPERMETR
MENU_ITEM(m_15, m_16, m_13, null_menu, null_menu, VOLTMETR_1);         // VOLTMETR_1
MENU_ITEM(m_16, m_15, m_15, null_menu, null_menu, VOLTMETR_2);         // VOLTMETR_2
MENU_ITEM(m_17, m_18, m_14, null_menu, null_menu, AMPERMETR_1);         // AMPERMETR_1
MENU_ITEM(m_18, m_17, m_17, null_menu, null_menu, AMPERMETR_2);         // AMPERMETR_2
и даже не задумываясь над этим.

Мне продолжать?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 11:09:36 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Наверное проблемы с кодировкой.

Мне нравится микро-меню на конечных автоматах
Спойлервзял тупо вот так вот натыкал
Изображение
на выходе получаем что-то вроде
Код:
// Menus   Name   | Next   | Prev   | Parent   | Child   | SelectFunction
MENU_ITEM(m_0, m_1, null_menu, null_menu, null_menu, STANDART_SCREEN);   // STANDART_SCREEN
MENU_ITEM(m_1, m_2, null_menu, null_menu, null_menu, POWER);         // POWER
MENU_ITEM(m_2, m_3, null_menu, null_menu, null_menu, CHARGE);         // CHARGE
MENU_ITEM(m_3, m_4, null_menu, null_menu, null_menu, OPERATION);      // OPERATION
MENU_ITEM(m_4, m_0, null_menu, null_menu, null_menu, TIME);            // TIME
MENU_ITEM(m_5, m_7, null_menu, m_6, m_6, SETTING_ENTER);            // SETTING_ENTER
MENU_ITEM(m_6, null_menu, null_menu, m_5, m_5, CLEER_PARAMETRS);      // CLEER_PARAMETRS
MENU_ITEM(m_7, m_13, m_5, m_8, m_10, CALIBRATIONS_DEVICES);            // CALIBRATIONS_DEVICES
MENU_ITEM(m_8, m_11, null_menu, m_9, m_7, UMAX_LIMIT);               // UMAX_LIMIT
MENU_ITEM(m_9, m_12, null_menu, m_10, m_8, IMAX_LIMIT);               // IMAX_LIMIT
MENU_ITEM(m_10, null_menu, null_menu, m_7, m_9, SAVE_SETTINGS);         // SAVE_SETTINGS
MENU_ITEM(m_11, null_menu, m_8, null_menu, null_menu, UMAX_LIMIT_1);   // UMAX_LIMIT_1
MENU_ITEM(m_12, null_menu, m_9, null_menu, null_menu, IMAX_LIMIT_1);   // IMAX_LIMIT_1
MENU_ITEM(m_13, m_15, null_menu, m_14, m_14, CALIBRATION_VOLTMETR);      // CALIBRATION_VOLTMETR
MENU_ITEM(m_14, m_17, null_menu, m_13, m_13, CALIBRATION_AMPERMETR);   // CALIBRATION_AMPERMETR
MENU_ITEM(m_15, m_16, m_13, null_menu, null_menu, VOLTMETR_1);         // VOLTMETR_1
MENU_ITEM(m_16, m_15, m_15, null_menu, null_menu, VOLTMETR_2);         // VOLTMETR_2
MENU_ITEM(m_17, m_18, m_14, null_menu, null_menu, AMPERMETR_1);         // AMPERMETR_1
MENU_ITEM(m_18, m_17, m_17, null_menu, null_menu, AMPERMETR_2);         // AMPERMETR_2
и даже не задумываясь над этим.

Мне продолжать?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 12:02:24 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
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 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Аlex, уважающий себя человек не будет в коде писать комментарии на языке, отличном от английского! Ведь это будет означать, что 99.9% населения Шарика комментарии не поймут.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 15:15:12 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Eddy_Em, смотря для чего эти комментарии пишутся. Если я пишу для себя, то я буду их писать на своём родном языке. И мне пофиг, поймёт там кто их, или нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 15:25:45 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Аlex, но тогда не выкладывай это на всеобщее обозрение! Некошерно же!!!
И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 16:21:21 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.
Обоснуй. А то может я всю жизнь всё неправильно делал?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 16:24:42 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Аlex, но тогда не выкладывай это на всеобщее обозрение!
Да не выдумывай.
Твои фразы звучат как "Не пишите тут на форуме на Русском языке ! Это ниже плинтуса !".


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Пт янв 21, 2022 18:57:29 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
Аlex, уважающий себя человек не будет в коде писать комментарии на языке, отличном от английского! Ведь это будет означать, что 99.9% населения Шарика комментарии не поймут.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Сб янв 22, 2022 08:50:16 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Нафлудили-то аж на пять страниц, при это самое главное пропустили - Иван начал осваивать логику. Это уже прогресс, хотя и кривой как всё что он пишет. От детских болезней так и не избавился. Я пытался разговорить его, где он брал ресурсы для обучения - с целью заблокировать заразу, но Иван молчит как партизан.
Вот сейчас опять уйдёт в анабиоз на пару месяцев, а потом выкатит очередной шедевр, от которого мозги плавятся.

_________________
sRtoS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Сб янв 22, 2022 08:58:59 
Нашел транзистор. Понюхал.
Аватар пользователя

Карма: 5
Рейтинг сообщений: 21
Зарегистрирован: Пн июл 04, 2016 16:51:22
Сообщений: 196
Откуда: Россия, Омск
Рейтинг сообщения: 0
Аlex, но тогда не выкладывай это на всеобщее обозрение! Некошерно же!!!
И вообще, идеал - когда в исходниках нет символов выше 127 символов ASCII.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Сб янв 22, 2022 14:37:16 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
В чем то "Дядя Эдик" прав, рано или поздно IDE сломает этот коммент, да так сломает, что потом не возможно будет восстановить. Это факт.
AVI-crak писал(а):
а потом выкатит очередной шедевр, от которого мозги плавятся.
Вот так вот не надо говорить, чего стоит только вот этот шедевр
Спойлер
Код:
// threshold in ms for press/hold
#define PRESSTHRESHOLD  (9)
#define HOLDTHRESHOLD   (199)

// events
typedef enum{
    EVT_NONE,   // no events with given key
    EVT_PRESS,  // pressed
    EVT_HOLD,   // hold more than KEY_HOLDTIME ms
    EVT_RELEASE // released
} keyevent;
      
      uint16_t d = (uint16_t)(Tms - lastT);
        keybase *k = &allkeys[i];
        keyevent e = k->event;

            switch(e){
                case EVT_NONE: // just pressed
                case EVT_RELEASE:
                    if((k->counter += d) > PRESSTHRESHOLD)
                        k->event = EVT_PRESS;
                break;
                case EVT_PRESS: // hold
                    if((k->counter += d)> HOLDTHRESHOLD)
                        k->event = EVT_HOLD;
                break;
                default:
                break;
            }
вот от него точно будут не только мозги плавиться, но и еще кое что за плавится. Или может вы считаете что у других интеллект равносильный вашему?
А с чего вы начинали? Ответьте мне на вопрос. Случайно не с такого же шедевра, как у ТС? Или может сразу начали с методов эффективного программирования?

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

В моем меню
Спойлер
Код:
   typedef const struct Menu_Item {
      const struct Menu_Item *Next; /**< указатель на следующий пункт меню этого пункта меню */
      const struct Menu_Item *Previous; /**< указатель на предыдущий пункт меню этого пункта меню */
      const struct Menu_Item *Parent; /**< указатель на родительский пункт меню этого пункта меню */
      const struct Menu_Item *Child; /**< указатель на дочерний пункт меню этого пункта меню */
      void (*SelectCallback)(void); /**< указатель на функцию */
   } Menu_Item_t;
Код:
MENU_ITEM(m_0, m_1, null_menu, null_menu, null_menu, STANDART_SCREEN);   // STANDART_SCREEN
к каждому пункту привязана своя функция, к примеру
Код:
STANDART_SCREEN();
я ее могу наполнить так, как захочу, наполнить теми данными какими мне надо.

В коде я отслеживаю в каком пункте меню нахожусь и выполняю с ним те действия которые требуется
Код:
id = menu->SelectCallback;
Спойлер
Код:
        if (button == BTN_SHRT3) {
           if(id == SETTING_ENTER) { lcd_clear(); Menu_Navigate(MENU_CHILD); }
           if(id == CLEER_PARAMETRS) { lcd_clear(); Menu_Navigate(MENU_CHILD); }
           if(id == CALIBRATIONS_DEVICES) { lcd_clear(); Menu_Navigate(MENU_CHILD); }
           if(id == UMAX_LIMIT || id == IMAX_LIMIT) { lcd_clear(); Menu_Navigate(MENU_CHILD); }

           if(id==CALIBRATION_VOLTMETR || id==CALIBRATION_AMPERMETR) { lcd_clear(); Menu_Navigate(MENU_CHILD); }

           if(id==STANDART_SCREEN || id==POWER || id==CHARGE || id==OPERATION || id==TIME) {
                if (U_I == 0) { x_pwm_1 -=10; }
                if (U_I == 1) { x_pwm_2 -=10; }
           }
Читаемо это, не читаемо, да ... с высокой горки.
Минус - большой размер кода. Плюс - практично и эффективно.
Если пример нужен, могу дать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Сб янв 22, 2022 17:35:40 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Dimon456 писал(а):
А с чего вы начинали? Ответьте мне на вопрос. Случайно не с такого же шедевра, как у ТС? Или может сразу начали с методов эффективного программирования?

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

_________________
sRtoS


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Чт фев 03, 2022 23:20:29 
Мучитель микросхем

Карма: -8
Рейтинг сообщений: -23
Зарегистрирован: Вс дек 29, 2019 08:05:21
Сообщений: 440
Рейтинг сообщения: 0
Вот мой код по изменению инкремента.С борьбой дребезга контактов.
Спойлер
Код:
                     if(READ_BIT(GPIOB->IDR,GPIO_IDR_IDR_5)==0)
                    {
                         // delay_ms(10);
                        pauza++;
                             if(pauza>200)
                             {

                                flag=1;

                             }
                          //   pauza++;


                       }

                     else

                     {
                        pauza2++;

                       //. flag=0;
                        if(pauza2>200)
                        {

                           flag1=1;

                        }
                       // pauza2++;

                     }


                       if(flag==1&&flag1==1)
                      {
                         // delay_ms(10);
                       flag=0;
                       flag1=0;
                       pauza=0;
                       pauza2=0;
                       menu_lcd++;
                       menu_btn++;

                      }


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: stm32 cubeide два инкремента не совместимы.
СообщениеДобавлено: Сб фев 05, 2022 20:59:48 
Прорезались зубы
Аватар пользователя

Карма: 2
Рейтинг сообщений: 12
Зарегистрирован: Сб янв 09, 2016 15:51:17
Сообщений: 200
Рейтинг сообщения: 0
Иван, научись не использовать условия, ну или максимально сокращать их до простейшей математики.
Ну и с форматированием текста немного поработать нужно. Почти все IDE имеют кнопку "сделать красиво" - форматируют код.
Пришлось твой код в кучу собирать, а то так и косоглазие получить можно.
Спойлер
Код:
 if(READ_BIT(GPIOB->IDR,GPIO_IDR_IDR_5)==0)
    {
        pauza++;
        if(pauza>200)flag=1;
    }else
    {
        pauza2++;
        if(pauza2>200) flag1=1;
    };
  if((flag==1)&&(flag1==1))
    {
        flag=0;
        flag1=0;
        pauza=0;
        pauza2=0;
        menu_lcd++;
        menu_btn++;
    };
   
/// чем-то выполнять каждую 1мс
    uint32_t tmp;
    tmp = (GPIOB->IDR >> 5) & 1; // масса кнопки Vcc
    tmp = 1 - tmp; //  масса кнопки Gnd
    pauza = pauza * tmp + tmp; // 255 раз подряд единица
    tmp = pauza >> 5; // > 255
    tmp = 1 - tmp;
    pauza *= tmp; // условие обнуляет pauza
    if (tmp == 0)
    {
        menu_lcd++;
        menu_btn++;
    };
 

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

_________________
sRtoS


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 270 ]    , , , , 5, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y