Читаем Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С полностью

  while ((ATDSTAT & 0x8000) == 0) {

   /* проверить окончание преобразования по*/

   /*состоянию флага SCF */

   ;

  }

  /* сохранить результаты ATD-преобразования*/

  /* в глобальном массиве char */

  sens[0] = ADR7H; /*крайний левый датчик */

  sens[1] = ADR6H; /*средний левый датчик */

  sens[2] = ADR5H; /*центральный датчик */

  sens[3] = ADR4H; /*средний правый датчик */

  sens[4] = ADR3H; /*крайний правый датчик */

  sens[5] = ADR2H; /*Датчик Холла */

  code_section = 2; /*update code_section variable */

  break;

 case 2:

  /*анализ информации датчиков для решения о повороте. Примечание: пороги для*/

  /*датчика Холла(hes_threshold) и для ИК-датчиков (opto_threshold)являются*/

  /* глобальными переменными и определены экспериментально*/

  if (sens[5] < hes_threshold) { /*сигнал с датчика Холла, объезд*/

   pwm_motors(back_up); /* робот дает задний ход*/

   /*действия, следующие после того */

   /* как робот отъехал назад */

   if (sens[0] > opto_threshold) pwm_motors(right_turn);

   else pwm_motors(left_turn);

   for (i=0; i<0xFFFF; i++) { /*задержка перед вращением двигателя */

    for(j=0; j<15; j++) {

     ;

    }

   }

  }

  /*если обнаружен тупик - задний ход*/

  else if ((sens[2]>opto_threshold) && (sens[0]>opto_threshold) && (sens[4]>opto_threshold)) {

   pwm_motors(back_up);

  }

  /*если стенки спереди и слева, */

  /*поворот робота направо */

  else if((sens[0]>opto_threshold) && (sens[2]>opto_threshold)) {

   pwm_motors(right_turn);

  }

  /*если стенки спереди и справа, */

  /*поворот робота налево */

  else if((sens[2]>opto_threshold) && (sens[4]>opto_threshold)) {

   pwm_motors(left_turn);

  }

  /*если стенка перед средним правым */

  /* датчиком, то полуповорот направо */

  else if (sens[1] > opto_threshold) {

   pwm_motors(half_right);

  }

  /*если стенка перед средним левым */

  /* датчиком, то полуповорот налево */

  else if (sens[3]>opto_threshold) {

   pwm_motors(half_left);

  }

  /*если сигналов от датчиков нет */

  /*продолжить движение вперед */

  else {

   pwm_motors(forward);

  }

  code_section = 0; /* изменить переменную code_section */

  break;

 }/*конец switch*/

 return code_section;

}

Когда задача, связанная с функцией process_turn, переходит из состояния готовности в активное состояние, ОСРВ вызывает функцию с параметром 0. Функция process_turn затем выполняется до первой отметки прерывания в коде. Достигнув этой отметки, функция возвращает управление ОСРВ, которая модифицирует TCB, связанный с процессом и продолжает выполнение второй части кода, когда задача в очередной раз переходит в активное состояние. Затем задача снова возвращается в состояние готовности и ждет, когда ОСРВ выделит ей процессорное время. Повторим снова, что причина, по которой мы делим код на логические части, состоит в том, чтобы позволить задаче работать до завершения определенной части и затем позволить другой задаче выполнить часть связанного с ней кода, и т.д. Это дает возможность выполнять несколько появившихся задач практически одновременно, хотя в любой момент времени процессор выполняет только одну задачу.

Перейти на страницу:

Похожие книги

C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных