ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
20 апреля
1057908 Топик полностью
Dingo (04.12.2020 19:07, просмотров: 589) ответил Nikolaev_Aleksey на Мне для понимания в свое время помог сайт pic24.ru + исходники + консультации Александра.
Спасибо. Скачал, посмотрел. Огромный плюс - читаемый исходник! 

Это действительно с моей точки зрения важно. Что насторожило: внушительные блоки кода под запретом прерываний. В порте Cortex-M3 нет использования примитивов синхронизации, и как следствие наблюдаем такое:

   tn_disable_interrupt();
   //-- If event attr is TN_EVENT_ATTR_SINGLE and another task already
   //-- in event wait queue - return ERROR without checking release condition
   if((evf->attr & TN_EVENT_ATTR_SINGLE) && !is_queue_empty(&(evf->wait_queue)))
   {
      rc = TERR_ILUSE;
   }
   else
   {
       //-- Check release condition
      if(wait_mode & TN_EVENT_WCOND_OR) //-- any setted bit is enough for release condition
         fCond = ((evf->pattern & wait_pattern) != 0);
      else                              //-- TN_EVENT_WCOND_AND is default mode
         fCond = ((evf->pattern & wait_pattern) == wait_pattern);
      if(fCond)
      {
         *p_flags_pattern = evf->pattern;
         if(evf->attr & TN_EVENT_ATTR_CLR)
            evf->pattern = 0;
          rc = TERR_NO_ERR;
      }
      else
      {
         tn_curr_run_task->ewait_mode = wait_mode;
         tn_curr_run_task->ewait_pattern = wait_pattern;
         task_curr_to_wait_action(&(evf->wait_queue),
                                  TSK_WAIT_REASON_EVENT,
                                  timeout);
         tn_enable_interrupt();
         tn_switch_context();
         if(tn_curr_run_task->task_wait_rc == TERR_NO_ERR)
            *p_flags_pattern = tn_curr_run_task->ewait_pattern;
         return tn_curr_run_task->task_wait_rc;
      }
   }
   tn_enable_interrupt();


Если поддерживаете контакт с автором, то можно по ссылке почитать. здесь