Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Типовой код






 

Детальное описание имитатора ОСРВ выходит за рамки данной книги. В этом разделе мы просто приведем код, позволяющий отображать и изменять состояние каждой из задач.

Функция update_task_status требует в качестве параметров идентификационного номера задачи и кода желательного изменения состояния задачи. Специфическая задача используется, чтобы конфигурировать PORTA[3: 0] правильным четырехразрядным двоичным кодом, который подается на микросхему 74HC154 декодера 4–16. Когда на демультиплексор подается код через выходной порта PORTA[7], активируется триггер-защелка, соответствующий выбранной задаче. Это позволяет передать модифицированное состояние задачи, представленное на выходах порта T контроллера 68HC12 на светодиоды и, таким образом, показать состояние задачи на дисплее.

Алгоритм программы на UML для реализации этой функции представлен на рис. 8.24.

 

Рис. 8.24. Алгоритм UML для функции update_task_status

 

//******************************************************************

//имя файла: realtime.с

//авторы: Steve Barrett and Daniel Pack

//разработан: 1 июля, 2004

//последняя редакция: 1 июля, 2004

//******************************************************************

//включенные файлы ****************************************

#include < 912b32.h>

 

//функции-прототипы****************************************

void initialize_ports(void); //инициализация портов

void initialize_LCD(void); //инициализация ЖКД

void putchars(unsigned char); //функция поддержки ЖКД - ввести символ

void putcommands(unsigned char); // функция поддержки ЖКД - ввести команду

void delay_5ms(void); //задержка на 5 мс

void delay_100us(void); //задержка на 100 мкс

void update_task_status(unsigned char task, char task_status);

//изменить состояние задачи

 

//глобальные переменные************************************************

 

//главная программа****************************************************

void main(void) {

asm(".area vectors(abs)\n" //inline assembly statement

".org 0xFFF8\n" //initialize 68HC12 B32 reset vector

".word 0x8000, 0x8000, 0x8000, 0x8000\n"

".text");

initialize_ports(); //инициализировать порты

initialize_LCD(); // инициализировать ЖКД

update_task_status(0x00, 'R'); //изменить состояние задачи

}

 

//******************************************************************

//initialize_ports: provides initial configuration for I/O ports

//******************************************************************

void initialize_ports(void) {

DDRA = 0xFF; //установить PORTA как выходной - управляющие линии

// демультиплексора

DDRT = 0xFF; // установить PORTT как выходной - состояние задачи

DDRB = 0xFF; // установить PORTB как выходной - порт данных для ЖКД

CTDRDLC = 0xFF; // установить PORT DLC как выходной - сигналы

//управления для ЖКД

DDRP = 0x0F; // установить PORTP[3: 0] как выходной, PORT[7: 4] как

//входной - для клавиатуры

PORTA = 0xFF; //установить для PORTA все линии декодера высокоомными (Hi-Z)

}

/****************************************************************/

 

/****************************************************************/

/*update_task_status: изменить состояние конкретной задачи */

/*в соответствии с допустимым переходом (рис. 8.14) */

/****************************************************************/

void update_task_status(unsigned char task, char task_status) {

//установить состояние задачи на выходе порта T

switch(task_status) {

case 'D': //бездействие (D)

PORTT = 0x01;

break;

case 'R': //готовность (R)

PORTT = 0x02;

break;

case 'A': //активность (A)

PORTT = 0x04;

break;

case'W': //ожидание (W)

PORTT = 0x08;

break;

case 'S': // приостановка(S)

PORTT = 0x10;

break;

case 'X': //восстановление (X)

PORTT = 0x20;

break;

}

PORTA = task & 0x7F; /*выбор задачи, активизируйте декодер */

PORTA = 0xFF /*Высокоомный выход (Hi-Z) декодера */

}

/****************************************************************/

/****************************************************************/

 

 

Заключение по главе 8

 

В этой главе мы познакомили вас с концепциями операционных систем реального времени. Мы не хотели выбирать конкретные ОСРВ и затем рассматривать их работу. Вместо этого, мы сосредоточились на концепциях, связанных с самими ОСРВ и на ключевых вопросах их применения. Мы рассмотрели терминологию ОСРВ, структуры данных, алгоритмы планирования и затруднения, встречающиеся при разработке этих систем.

 

8.12. Что еще почитать?

 

1. Barrett S. F, D. J. Pack, С Straley, L. Sircin, and G. Janack. «Real-Time Operating Systems: A Visual Simulator.» Paper presented at the annual meeting of the American Society for Engineering Educations, June 2004.

2. Ganssle, J. «Writing a Real-Time Operating System-Part I: A Multitasking Event Scheduler for the HD64180.» Circuit Cellar Ink (January/February 1989): 41–51.

3. Ganssle, J. «Writing a Real-Time Operating System-Part II: Memory Management and Applications for the HD64180.» Circuit Cellar Ink (March/April 1989): 30–33.

4. Ganssle, J. «An OS in a CAN.» Embedded Systems Programming (January 1994): 1–6. ImageCraft Creations, Inc. «ICC12, ImageCraft С Compiler and Development Environment for Motorola HC12.» 2001.

5. Korsch, J. F., and L. J. Garrett. Data Structures, Algorithms, and Program Style Using С. Boston: PWS-Kent Publishing Company, 1988.

6. Labrosse, J. J. Micro C/OS-II The Real-Time Kernel, 2nd ed. Lawrence, KS: CMP Books, 2002.

7. Lafore, R. The Waite Group's Microsoft С Programming for the PC, 2nd ed. Carmel, IN, Howard W. Sams and Company, 1990.

8. Laplante, P. Real-Time Systems Design and Analysis: An Engineer's Handbook. New York: IEEE Computer Society Press, 1993.

9. Miller, G. H. Microcomputer Engineering, 2nd ed. Englewood Cliffs, NJ: Pearson Education, 1998.

10. Moore, R. How to Use a Real-time Multitasking Kernels in Embedded Systems, Costa Mesa, CA: Micro Digital Associates, 2001.

11. Motorola Inc. «68HC12 M68EVB912B32 Evaluation Board User's Manual.» Motorola Document 68EVB912B32 UM/D, 1997.

12. Motorola Inc. «HC12 M68HC12B Family Advance Information.» Motorola Document M68HC12B/D, 2000.

13. Pack, D. J., and S. F. Barrett. 68HC12 Microcontroller: Theory and Applications. Upper Saddle River, NJ: Prentice Hall, 2002.

 

Вопросы и задания

 

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.