===== OSA : Проект =====

===== Создание проекта =====

Для использования OSA в своем приложении нужно:
  - Создать проект, используя IDE оболочку. В него, помимо файлов самой программы, включить файл osa.c (он содержит определения всех системных переменных и системных функций).
  - В папке с файлами программы создать файл системной конфигурации ##[[osa:ref:appendix:configuration|osacfg.h]]##, где задать параметры использования системы (в самом простом случае этот файл может быть пустым). Подробнее об этом файле см. [[osa:ref:appendix:configuration|Конфигурация OSAcfg.h]]. Этот файл можно создать с помощью утилиты [[osa:ref:download:intro|OSAcfg_Tool]].
  - Во все файлы, где есть вызовы сервисов OSA, включить файл osa.h.
  - В параметрах проекта указать пути "Include Search Path":
    * путь к файлу ##[[osa:ref:appendix:configuration|osacfg.h]]## текущего проекта;
    * путь к файлу osa.h.
  - В самом начале программы (в фукнции main()) вызвать фукнцию инициализации системы ##[[osa:ref:allservices:OS_Init|OS_Init]]()##, а в самом конце - вызвать сервис ##[[osa:ref:allservices:OS_Run|OS_Run]]()##.


===== Примечания для различных IDE и платформ =====


==== MPLAB ====

  * файл osa.c добавляется правым щелчком мышки в окне проекта (открывается через меню "View/Project")
  * Include-пути задаются в параметрах проекта: меню "Project/Build options/Project...", вкладка "Directories".


==== MPLAB и HT-PICC ====

  * Ранние версии плагинов HTPICC длч MPLAB'а не позволяли вводить относительные пути, а только абсолютные (т.е. не "..\..\", а "c:\osa")
  * **для PRO-версии компилятора**: Чтобы компилятор правильно строил дерево вызовов функций, все создаваемые задачи должны быть объявлены в main() сервисом ##[[osa:ref:allservices:OS_Task_Define|OS_Task_Define]]##()

<code cpp>
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);
    
}
</code>


==== MPLAB и Mplab C18 ====

  * Требуется указать путь к библиотекам: меню "Project/Build options/Progect...", вкладка "Directories", пункт "Library Search Path". Там ввести путь для MCC18 (например, c:\mcc18\lib).
  * там же в параметрах проекта выбрать вкладку "MPLAB C18", категория "Optimization" и снять галочку (если стоит) напротив пункта "Procedural absraction"
  * Не забыть добавить файл скрипта для линкера: правой кнопкой на папке "Linker Script" в окне "Project" и выбрать скрипт для требуемого контроллера из папки "MCC18\lkr". (Для работы в extended-режиме имя файла скрипта должно иметь суффикс 'e')


==== MPLAB и Mplab C30 ====

  * в параметрах проекта выбрать вкладку "MPLAB C30", категория "Optimization" и снять галочку (если стоит) напротив пункта "Procedural absraction"


==== CCS ====

  * файл osa.c в проект включать **не нужно!**
  * Чтобы компилятор правильно строил дерево вызовов функций, все создаваемые задачи должны быть объявлены в main() сервисом ##[[osa:ref:allservices:OS_Task_Define|OS_Task_Define]]##()

<code cpp>
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);
    
}
</code>


==== mikroC PRO IDE ====

  * Файл osa.c добавляется в проект через меню "Project/Add File To Project..."
  * Include-пути задаются через меню "Project/Edit Search Paths...". В открывшемся окне есть два списка путей: Source Files и Header Files. нам нужен список Header Files. Над ним есть кнопка с зеленым плюсиком, давим ее и добавляем нужные пути.
  * Линкер должен быть проинформирован о том, что функции, которые предполагается использовать как задачи, будут вызываться не напрямую, а через указатель:

<code cpp>
#pragma funcall main Task_Buttons       // Говорим компилятору, что Task_Button будет
                                        // вызываться через указатель

void Task_Buttons (void)
{
    ...
}
</code>



==== AVR Studio и WinAVR ====

  * Пункт меню "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"

==== IAR ====

  * Создаем проект C (меню "Project/Create New Project...")
  * файл osa.c добавляется через меню "Project/Add files..."
  * include-пути задаются в параметрах проекта: меню "Project/Options", категория "C/C++ compiler", вкладка "preprocessor", в поле "Additional include directories"
  * там же в параметрах проекта во вкладке "Optimization" убрать галочку с пункта "Cross call"

==== IAR STM8 ====

  * В добавок ко всем требованиям, описанным выше в пункте "IAR", к проекту дорбавить файл "osa\port\stm8\osa_stm_iar.s"

==== STVD и STM8 ====

  * проект создается через меню "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"

==== Raisonance и STM8 ====

  * создаем новый проект через меню "Project/New project"
  * файл osa.c добавляется через меню "Project/Add Item..."
  * include-пути задаются в параметрах проекта: меню "Projetc/properties", пункт "Application Optios", подпункт "Directories". К имеющимся в списке добавить два: путь к osa.h и путь к ##[[osa:ref:appendix:configuration|osacfg.h]]##

     


~~UP~~