Для использования OSA в своем приложении нужно:
Создать проект, используя IDE оболочку. В него, помимо файлов самой программы, включить файл osa.c (он содержит определения всех системных переменных и системных функций).
В папке с файлами программы создать файл системной конфигурации
osacfg.h, где задать параметры использования системы (в самом простом случае этот файл может быть пустым). Подробнее об этом файле см.
Конфигурация OSAcfg.h. Этот файл можно создать с помощью утилиты
OSAcfg_Tool.
Во все файлы, где есть вызовы сервисов OSA, включить файл osa.h.
В параметрах проекта указать пути "Include Search Path":
В самом начале программы (в фукнции main()) вызвать фукнцию инициализации системы
OS_Init(), а в самом конце - вызвать сервис
OS_Run().
файл osa.c добавляется правым щелчком мышки в окне проекта (открывается через меню "View/Project")
Include-пути задаются в параметрах проекта: меню "Project/Build options/Project…", вкладка "Directories".
void main (void)
{
OS_Init();
...
OS_Task_Define(Task_Buttons);
OS_Task_Define(Task_LEDs);
OS_Task_Define(Task_LCD);
...
OS_Task_Create(Task_Buttons);
OS_Task_Create(Task_LEDs);
OS_Task_Create(Task_LCD);
}
Требуется указать путь к библиотекам: меню "Project/Build options/Progect…", вкладка "Directories", пункт "Library Search Path". Там ввести путь для MCC18 (например, c:\mcc18\lib).
там же в параметрах проекта выбрать вкладку "MPLAB C18", категория "Optimization" и снять галочку (если стоит) напротив пункта "Procedural absraction"
Не забыть добавить файл скрипта для линкера: правой кнопкой на папке "Linker Script" в окне "Project" и выбрать скрипт для требуемого контроллера из папки "MCC18\lkr". (Для работы в extended-режиме имя файла скрипта должно иметь суффикс 'e')
void main (void)
{
OS_Init();
...
OS_Task_Define(Task_Buttons);
OS_Task_Define(Task_LEDs);
OS_Task_Define(Task_LCD);
...
OS_Task_Create(Task_Buttons);
OS_Task_Create(Task_LEDs);
OS_Task_Create(Task_LCD);
}
Файл osa.c добавляется в проект через меню "Project/Add File To Project…"
Include-пути задаются через меню "Project/Edit Search Paths…". В открывшемся окне есть два списка путей: Source Files и Header Files. нам нужен список Header Files. Над ним есть кнопка с зеленым плюсиком, давим ее и добавляем нужные пути.
Линкер должен быть проинформирован о том, что функции, которые предполагается использовать как задачи, будут вызываться не напрямую, а через указатель:
#pragma funcall main Task_Buttons // Говорим компилятору, что Task_Button будет
// вызываться через указатель
void Task_Buttons (void)
{
...
}
Пункт меню "Project/New Project":
Выбираем Project type: AVR GCC
выбираем путь и имя проекта, давим Next
в следующем окне выбираем контроллер и тип отладочного средства (Debug Platform), давим Finish
в окне проекта (AVR GCC) правой кнопкой мышки нажимаем на папке "Source Files" и выбираем пункт "Add Existing Source File(s)…" и добавляем файл osa.c
include-пути задаются через меню "Project/Configuration options", вкладка "Include Directories"
Создаем проект C (меню "Project/Create New Project…")
файл osa.c добавляется через меню "Project/Add files…"
include-пути задаются в параметрах проекта: меню "Project/Options", категория "C/C++ compiler", вкладка "preprocessor", в поле "Additional include directories"
там же в параметрах проекта во вкладке "Optimization" убрать галочку с пункта "Cross call"
проект создается через меню "File/New Workspace".
В открывшемся окне выбрать "Create workspace and Porject"
далее задаем имя рабочего пространства (workspace) и путь
в следующем окне задаем имя проекта, путь, и выбираем компилятор: Raiconance или Cosmic
выбираем контроллера
нажимаем правую кнопку мышки на папке Source в окне Workspace, выбираем пункт "Add Files To Folder…" и выбираем файл osa.c
include-пути задаются в параметрах проекта: меню "Project/Settings", вкладка "C compiler", категория "Preprocessor", пункт "Additional include directories"