Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт апр 19, 2024 02:14:36

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7581 ]     ... , , , 275, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт апр 05, 2018 12:12:52 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
viiv писал(а):
Это так?
ну как... есть одна-единственная функция в программе, которая содержит в себе тот самый крутой автомат состояний, выполняющий ВСЁ. и эта единственная функция - обработчик прерывания, поэтому выходить из неё особо и не надо - некуда, кроме как снова в себя...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт апр 05, 2018 12:18:33 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Компилятор все заоптимизирует. Не будет никаких вызовов.
точно! заоптимизировал!

Добавлено after 4 minutes 11 seconds:
где можно почитать про возможности компилятора, про то как с ним более конструктивно взаимодействовать?
----------
ПС OSA скачал - начал изучать, но свой велосипед допилю - дело принципа!

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Последний раз редактировалось Ivanoff-iv Чт апр 05, 2018 12:21:00, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт апр 05, 2018 12:19:54 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Ivanoff-iv писал(а):
про то как с ним более конструктивно взаимодействовать?
не надо с ним взаимодействовать, потому как его пути неисповедимы. лучше сразу писать прилично, и радоваться.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


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

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

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт апр 05, 2018 13:25:11 
Друг Кота
Аватар пользователя

Карма: 46
Рейтинг сообщений: 2030
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Сообщений: 6618
Откуда: Сердце Пармы
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
доделаю сам, буду пользоваться сам, а с вами не поделюсь, злые вы 8) :)) :)) :))
пока задача - изучение языка, я знаю, что, уже для всего написаны готовые библиотеки, но, хочу чтото своё сделать и посмотреть насколько "коричневым" будет этот велосипед...

Добавлено after 1 minute 55 seconds:
пока я добился ощутимого сокращения потребления тока... и, вроде, ничего не глючит

Добавлено after 2 minutes 3 seconds:
пока смирюсь с отсутствием автонумерации и попробую побольше всего втолкать, посмотрю, насколько удобно вышло, а потом всё это на РТОС повторю

Добавлено after 1 minute 39 seconds:
на этот вопрос для себя я нашел консенсус, можете больше не отвечать.

Добавлено after 33 minutes 12 seconds:
viiv, перепроверил - с упаковкой в функцию получается на одно слово тяжелей, чем без упаковки.

Добавлено after 14 minutes 49 seconds:
_____
всё, оценил масштаб - буду переписывать на функциях, а то на дефайнах слишком жирно выходит, спасибо за идеи.

_________________
Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Чт апр 05, 2018 13:44:38 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
а нормальная ОС в тини влезет?
Зачем себя так ограничивать? Можно взять МК скажем с 128 КБ флеша и 20 КБ ОЗУ. Запустить на нем ОСь и пусть крутятся на ней скажем 10 задач. :)
Нормальная ОСь это не только планировщик задач, но и средства для доступа к общим ресурсам, очереди, программные таймеры и т. д. :)


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

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

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 06:40:21 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
сейчас код выглядит так (пример использования)

Это напоминает Протопотоки (protothreads),поздновато увидел вашу дискуссию, так что последний страницы пришлось прочитать по диагонали, так что извиняйте если такое уже поднималось.
Подключал несколько DS1821, в таймере, получилось как-то так.
Спойлер
Код:

#define Setdelay_us(Value)   TIM1->PSC=40-1;TIM1->ARR = Value-1;TIM1->CNT = 0; PT_YIELD(pt);
#define Setdelay_ms(Value)   TIM1->PSC=39800-1;TIM1->ARR = Value-1;TIM1->CNT = 0; PT_YIELD(pt);

PT_THREAD(DS1821_thread(struct pt *pt,unsigned char id)){
static unsigned char ReadData;
static unsigned char StatusDS1821=SENSOR_INIT_VALIDATION_SUCCESS;
static unsigned char Status;
unsigned char i;
unsigned char flag_exit;
//----------
PT_BEGIN(pt);
//----------
   PT_INIT(&Point_Ds1821_TransmitData);
   PT_INIT(&Point_Ds1821_ReadData);
   PT_INIT(&Point_Ds1821_ResetData);
   //---------- выводов термодатчиков------------------------------------------
   InitPinDS1821_HOT();
   //---------- инициализация--------------------------------------
   DS1821_ZT_OFF
   DS1821_OFF
   DS1821_HOT_IN
   DS1821_UL_IN
   DS1821_COLD_IN
   DS1821_COLLING_IN
   Setdelay_ms(2);
   //----------
   DS1821_ON
   DS1821_W
   //---------- на выход------------------------------------------------
   DS1821_HOT_OUT
   DS1821_COLD_OUT
   DS1821_UL_OUT
   DS1821_COLLING_OUT
   //---------- в порт логическую единицу------------------------------------
   DS1821_HOT_ON
   DS1821_COLD_ON
   DS1821_UL_ON
   DS1821_COLLING_ON
   //----------
   Setdelay_ms(2);
   DS1821_ZT_ON
   //---------- аварий термодатчиков----------------------------------------
   if(StatusDS1821==SENSOR_INIT_VALIDATION_FAIL){
      //1) Проверяем какой термодатчик привёл к аварии

      //---------- термодатчик который выдал аварию---------------------
      for(i=0;i<4;i++){
         if(TypeErrorTemp[i]>1){
            CounterErrorTemp[i]=CounterErrorTemp[i]+1;
            if(CounterErrorTemp[i]>=3){
               TypeErrorTemp[i]=TYPE_T_BLOCK;
               Send_MSG(MSG_EXIST_ERROR);
            }
         //HandlerError(CurrentTemp);
         }
      }
   }
   //---------- на включение термодатчика------------------------------------------
   Setdelay_ms(2000);
   //----------
   PT_WAIT_THREAD(pt,ds1821_Reset_thread(&Point_Ds1821_ResetData,&StatusDS1821));
   //---------- 0x0C-------------------------------------------------------------
   PT_WAIT_THREAD(pt,ds1821_transmit_data_thread(&Point_Ds1821_TransmitData,0x0C));
   //---------- 0x00-------------------------------------------------------------
   PT_WAIT_THREAD(pt,ds1821_transmit_data_thread(&Point_Ds1821_TransmitData,0x00));
   //----------
   //---------- цикл работы термодатчика---------------------------------
   //----------
   while(1){
      //----------
      PT_WAIT_THREAD(pt,ds1821_Reset_thread(&Point_Ds1821_ResetData,&StatusDS1821));
      //---------- команды на преобразование температуры-------------------------
      PT_WAIT_THREAD(pt,ds1821_transmit_data_thread(&Point_Ds1821_TransmitData,0xEE));
      //---------- времени преобразования температуры----------------------------
      Setdelay_ms(DS18B2_PERIOD_POLLING_AND_CONVERSIONS_T);
      //----------
      PT_WAIT_THREAD(pt,ds1821_Reset_thread(&Point_Ds1821_ResetData,&StatusDS1821));
      //---------- команды на чтение температуры---------------------------------------
      PT_WAIT_THREAD(pt,ds1821_transmit_data_thread(&Point_Ds1821_TransmitData,0xAA));
      //---------- температуры-------------------------------------------
      PT_WAIT_THREAD(pt,ds1821_read_data_thread(&Point_Ds1821_ReadData,CurrentTemp));
      //----------
      for(i=0;i<4;i++){
         if(TypeErrorTemp[i]==TYPE_T_BLOCK){
            //Термодатчик заблокирован
         }else{
            SetStatusTemp(CurrentTemp[i],i);// Если термодатчик не заблокирован то выставляем статус
         }
      }
      SendBroadcastMessages(TEMP_COMPLEATED);   //Для нескольких процессов в главном цикле.
      //----------
      if(StatusDS1821==SENSOR_INIT_VALIDATION_FAIL){
            //---------- термодатчик который выдал аварию---------------------
            for(i=0;i<4;i++){
               if(TypeErrorTemp[i]>=1){   //какая то авария КЗ на ноль или 1
                        CurrentStatusTemp[i]=STATUS_T_SHORT_CIRCUIT;
                  if(TypeErrorTemp[i]==TYPE_T_BLOCK){
                     //Термодатчик заблокирован можно продолжать работу
                  }else{
                     flag_exit=1;
                  }
               }else{
                  CounterErrorTemp[i]=0;   //Перезапустить счетчик аварий, так как чтение в норме.
               }
            }
            //-----дожидаемся установления всех статусов--------------
            if(flag_exit==1){
               PT_EXIT(pt);
            }
        }
      //----------
      PT_END_YIELD(pt);
   }
//----------
PT_END(pt);
}


PT_THREAD(ds1821_Reset_thread(struct pt *pt,unsigned char *ReturnValue)){
static unsigned short int Ack[2];
PT_BEGIN(pt);
   //----------
   //----------
   //----------
   DS1821_ZT_OFF
   //---------Порт на выход-----------------------
   DS1821_HOT_OUT
   DS1821_COLD_OUT
   DS1821_UL_OUT
   DS1821_COLLING_OUT
   //---------- ноль в порт----------------
   DS1821_HOT_OFF;
   DS1821_COLD_OFF
   DS1821_UL_OFF
   DS1821_COLLING_OFF
   //---------- региста на запись------------
   DS1821_W
   DS1821_ZT_ON
   Setdelay_us(600);
   //----------
   DS1821_R
   //---------- на вход----------------------
   DS1821_HOT_IN
   DS1821_UL_IN
    DS1821_COLD_IN
    DS1821_COLLING_IN
   //----------
   Setdelay_us(80);
   //----------
   Ack[0]=DS1821_READ_ALL;
   //----------
   Setdelay_us(300);
   //----------
   Ack[1]=DS1821_READ_ALL;
   //----------
   //----------
   //-------тут надо сделать проверку всех--------
   //----------
   //--------Если хоть 1 не ответил то выдаём команду  на зависание
   if((Ack[0] == 0)&&(Ack[1] == (DS1821_HOT_PIN|DS1821_COLD_PIN|DS1821_COLLING_PIN|DS1821_UL_PIN))){
      *ReturnValue=SENSOR_INIT_VALIDATION_SUCCESS;
   }else{
      //----------
      *ReturnValue=SENSOR_INIT_VALIDATION_SUCCESS; //Если не кто не изменил статус значит аварии заблокированны
      //----------
      //---------- какой термодатчик в аварии---------------------------------
      //----------
      //---------- горячий-----------------------------------------------
      if((Ack[0]&DS1821_HOT_PIN)==(Ack[1]&DS1821_HOT_PIN)){
         if(TypeErrorTemp[T_HOT]!=TYPE_T_BLOCK){   //Если авария не заблокирована
            Send_MSG(MSG_EXIST_ERROR);
            *ReturnValue=SENSOR_INIT_VALIDATION_FAIL;
            if(Stm32BitIsSet(Ack[0],DS1821_HOT_PIN)){
               TypeErrorTemp[T_HOT]=TYPE_T_SHORT_CIRCUIT_1; //Замыкание 1
            }else{
               TypeErrorTemp[T_HOT]=TYPE_T_SHORT_CIRCUIT_0; //Замыкание 0
            }
         }
      }else{
            TypeErrorTemp[T_HOT]=STATUS_T_NORM; //Сбрассываем предыдуший флаг аварии
        }
      //---------- Холодный-----------------------------------------------
      if((Ack[0]&DS1821_COLD_PIN)==(Ack[1]&DS1821_COLD_PIN)){
         if(TypeErrorTemp[T_COLD]!=TYPE_T_BLOCK){   //Если авария не заблокирована
            Send_MSG(MSG_EXIST_ERROR);
            *ReturnValue=SENSOR_INIT_VALIDATION_FAIL;
            if(Stm32BitIsSet(Ack[0],DS1821_COLD_PIN)){
               TypeErrorTemp[T_COLD]=TYPE_T_SHORT_CIRCUIT_1; //Замыкание 1
            }else{
               TypeErrorTemp[T_COLD]=TYPE_T_SHORT_CIRCUIT_0; //Замыкание 0
            }
         }
      }else{
            TypeErrorTemp[T_COLD]=STATUS_T_NORM; //Сбрассываем предыдуший флаг аварии
        }
      //----------
      if((Ack[0]&DS1821_COLLING_PIN)==(Ack[1]&DS1821_COLLING_PIN)){
         if(TypeErrorTemp[T_COLLING]!=TYPE_T_BLOCK){   //Если авария не заблокирована
            Send_MSG(MSG_EXIST_ERROR);
            *ReturnValue=SENSOR_INIT_VALIDATION_FAIL;
            if(Stm32BitIsSet(Ack[0],DS1821_COLLING_PIN)){
               TypeErrorTemp[T_COLLING]=TYPE_T_SHORT_CIRCUIT_1; //Замыкание 1
            }else{
               TypeErrorTemp[T_COLLING]=TYPE_T_SHORT_CIRCUIT_0; //Замыкание 0
            }
         }
      }else{
            TypeErrorTemp[T_COLLING]=STATUS_T_NORM; //Сбрассываем предыдуший флаг аварии
        }
      //----------
      if((Ack[0]&DS1821_UL_PIN)==(Ack[1]&DS1821_UL_PIN)){
         if(TypeErrorTemp[T_OUT]!=TYPE_T_BLOCK){   //Если авария не заблокирована
            Send_MSG(MSG_EXIST_ERROR);
            *ReturnValue=SENSOR_INIT_VALIDATION_FAIL;
            if(Stm32BitIsSet(Ack[0],DS1821_UL_PIN)){
               TypeErrorTemp[T_OUT]=TYPE_T_SHORT_CIRCUIT_1; //Замыкание 1
            }else{
               TypeErrorTemp[T_OUT]=TYPE_T_SHORT_CIRCUIT_0; //Замыкание 0
            }
         }
      }else{
            TypeErrorTemp[T_OUT]=STATUS_T_NORM; //Сбрассываем предыдуший флаг аварии
        }
      //----------
   }
    //----------
PT_END(pt);
}



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 07:06:59 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
и чем это проще традиционного подхода? вроде как при традиционном подходе писанины даже поменьше...

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 07:34:52 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Лучше тем что нету не каких delay, а структура программы осталась "как бы линейная".
Писанины много из за того что там у меня 4 датчика подключалось, и я хотел сделать универсально, по этому много лишнего(всякие проверки на КЗ).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 07:44:14 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
pokk писал(а):
Лучше тем что нету не каких delay
чем же это лучше?
никак не пойму: все так страшатся этого делея, что просто удивляюсь... может, я чего-то не понимаю? ну так объясните.
или это догма навроде "goto открывает ворота в АД"?

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 08:30:51 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
чем же это лучше?

Тем что процессор не сидит и не крутит while, а выполняет другие операции, которых куча, по мимо одного термодатчика.
ARV, судя по вашей логике, вы бы и на время конвертации температуры, сидели ждали бы пока термодатчик выдаст результат? :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 09:56:49 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
pokk писал(а):
ARV, судя по вашей логике, вы бы и на время конвертации температуры, сидели ждали бы пока термодатчик выдаст результат?
именно так и делал, когда делал управление инкубаторами. и что? ни один заказчик не был недоволен.

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 11:41:50 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Ну круто, я тоже так иногда делаю когда мигаю светодиодом :)) :)) :))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 13:37:33 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек? Вы думаете, CPU быстрее износится, если будет "напрасно" молотить в пустом цикле? ;)

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 13:41:09 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Пустой цикл в "делэе", намного пустее чем в "вайле" ;).

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 16:35:36 
Вымогатель припоя

Зарегистрирован: Вт ноя 02, 2010 17:46:37
Сообщений: 574
Рейтинг сообщения: 0
Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек? Вы думаете, CPU быстрее износится, если будет "напрасно" молотить в пустом цикле? ;)

Цитата:
Тем что процессор не сидит и не крутит while, а выполняет другие операции, которых куча, по мимо одного термодатчика.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 16:38:50 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2694
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А если нет кучи дел?

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 18:30:11 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
А если нет кучи дел?
а правильнее вопрос сформулировать так: а если программу разрабатывать так, чтобы вся куча делалась, а delay этому не мешала? :)))

людям ради того, чтобы решить проблему СЛОЖНО, хотя и круто, не лень изобретать самодельные велосипеды в виде подобий ОС... хотя необходимость в этом, с моей точки зрения, возникает достаточно редко. я ж не против :dont_know:

_________________
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 19:09:46 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
а если программу разрабатывать так, чтобы вся куча делалась, а delay этому не мешала?

Хорошая куча - маленькая куча, особенно в перспективе её поддержки в длинючей перспективе и во всех деталях [которые забываются]. А delay - тот самый хромой бегун в эстафете, будь вся остальная команда хоть трижды быстроходные эфиопы - равняться будут по нему, и иногда это обидно. Но если никто и никуда не бежит - почему бы и нет?
людям ради того, чтобы решить проблему СЛОЖНО, хотя и круто, не лень изобретать самодельные велосипеды в виде подобий ОС...

Всякая концепция компактна - но черти [которые в деталях] ждут автора по мере погружения в болото реальности. Вряд-ли желание сложнокрутости можно считать определяющим изначально - скорее наоборот - ибо человек по природе ленив и сделав что-то один раз хочет просто копи-вставлять это решение, не особо приходя в сознание далее. Просто по мере реализации жизнь обставляет концепцию лесом костылей. А мы видим конечный результат и думаем про человека не очень позитивно. Стремление к инкапсуляции не самый страшный из грехов. ;-)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 20:03:50 
Друг Кота
Аватар пользователя

Карма: 1
Рейтинг сообщений: 157
Зарегистрирован: Пн окт 11, 2010 19:00:08
Сообщений: 3328
Рейтинг сообщения: 0
ARV писал(а):
Так вот и я о том же: почему мигать можно, а другие задачи решать нельзя при помощи задержек?
Потому что если несколько задач выполняются друг за другом и паузы для них должны быть разные, то это лишнее усложнение кода, которое не улучшает чтение программы и ее дальнейшую доработку.
Статья по теме https://habrahabr.ru/post/249273/
Спойлер
Цитата:
Очень часто (да что там часто, практически всегда) микроконтроллеры применяют в условиях, когда необходимо отслеживать сразу несколько параметров. Или наоборот, управлять одновременно несколькими устройствами.

Вот задача для примера: у нас есть 4 выхода, на которых необходимо выводить импульсы разной длительности с разными паузами. Все, что у нас есть – это системный таймер, который считает в миллисекундах.

Усложняем задачу в духе “сам себя замучаю на ардуино”. Таймеры заняты другим, PWM не подходит, ибо не на всех ножках он работает, да и не загонишь его на нужные режимы обычно. Немного подумав, садимся и пишем примерно такой код
Код:
// инициализация
int time1on=500; // Время, пока выход 1 должен быть включен
int time1off=250; // Время, пока выход 1 должен быть выключен
unsigned int now=millis();
....
// где-то в цикле
if(millis()<now+time1on)
{
  port1=ON;
}
else
{
port1=OFF;
if(millis()>now+time1on+time1off)
  {
  now=millis();
  }
}
И так или примерно так для всех 4 портов. Получается приличная портянка на несколько экранов, но эта портянка работает и работает довольно быстро, что для микроконтроллера важно.

Потом внезапно программист замечает, что при каждом цикле дергается порт, даже если его состояние не меняется. Правит всю портянку. Потом число портов с такими же потребностями увеличивается в два раза. Программист плюет и переписывает все в одну функцию типа PortBlink(int port num).

Почти наступило счастье, но внезапно потребовалось что бы на каком-то порту вместе с управлением “на выход” что-то предварительно считывалось и уже на основе этого считанного управлялся порт. Программист снова матерится и делает еще одну функцию, специально под порт.

Счастье? А вот фигу. Заказчик что-то этакое прицепил и это считанное может легко тормознуть процесс на секунды … Начинается стенания, программисты правят в очередной раз код, окончательно превращая его в нечитаемый треш, менеджеры выкатывают дикие прайсы заказчику за добавление функционала, заказчик матерится и решает больше никогда не связываться со встроенными решениями.

(типа реклама и восхваление) А все почему? Потому что изначально было принято неправильное решение о платформе. Если есть возможность, мы предлагаем навороченную платформу даже для примитивных задач. По опыту стоимость разработки и поддержки потом оказываются гораздо ниже. Вот и сейчас для управления 8мю выходами я возьму STM32F3, который может работать на 72МГц. (шепотом) На самом деле просто у меня под рукой демоплата с ним (смаил). Была еще с L1, но мы ее нечаянно использовали в одном из проектов.
Открываем STM32Cube, выбираем плату, включаем галочку около FreeRTOS и собираем проект как обычно. Нам ничего этакого не надо, поэтому оставляем все по умолчанию.

Что такое FreeRTOS? Это операционная система почти реального времени для микроконтроллеров. То есть все, что вы слышали про операционные системы типа многозадачности, семафоров и прочих мутексов. Почему FreeRTOS? Просто ее поддерживает STM32Cube ;-). Есть куча других подобных систем – та же ChibiOS. По своей сути они все одинаковые, только различаются командами и их форматом. Тут я не собираюсь переписывать гору книг и инструкций по работе с операционными системами, просто пробегусь широкими мазками по наиболее интересным вещам, которые очень сильно помогают программистам в их нелегкой работе.


Z_h_e писал(а):
А если нет кучи дел?
Обычно это в простых программах, типа мегания светодиодом. В более или менее сложной, дела обычно есть. А если их нет, то МК можно отправить спать. :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Ср апр 11, 2018 23:28:03 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Мурик писал(а):
Статья по теме https://habrahabr.ru/post/249273/

Статья ниАчом... Человек, обхаяв одну портянку кода, сделал другую, ничем не меньше, и при всём при этом, потратил на каждый мигающий светодиод по 610 байт оперативки.
Отличный пример, однако, ничего не скажешь ... :)))

Добавлено after 2 minutes 39 seconds:
Ах, да, ещё. Пришлось ещё вместо tiny взять STM32... Супер... :)))


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

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


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

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


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

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


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