基于RTOS的程序基本框架

本文介绍基于RTOS的程序基本框架。

一个良好的程序框架便于划分各个功能模块,不同功能模块处于不同的层次,各层次相互调用共同完成软件功能。本文基于FreeRTOS给出一个的程序基本框架。

1.目录划分

目录划分主要基于软件体系结构进行的,对于带RTOS的软件体系结构主要包含硬件层,设备驱动层(BSP层),操作系统层,应用层。对应目录分别为:

1)Drivers目录

对应设备驱动层,主要放置设备驱动源代码,如LED,按键,EEPROM等。

2)FreeRTOS目录

对应操作系统层,主要放置操作系统源代码,包含与底层硬件之间的接口(移植相关)和上层应用之间的接口(如CMSIS-RTOS2通用API接口)。

3)App目录

对应应用层,主要放置应用程序源码。

4)User目录

主要放置程序入口(如main函数)及操作系统配置相关文件(如FreeROTSConfig.h文件)。

5)Utils目录

主要放置一些工具源码。如CRC计算,插值计算等。

2.程序入口

程序入口主要是main函数的编写,其主要包括驱动初始化,操作系统初始化,应用程序初始化,然后就是启动操作系统。伪代码如下(这里使用了CMSIS-RTOS2通用API接口):

int main(void)
{
    /* Init hardware */
    Hardware_Init();

    /* Init scheduler */
    osKernelInitialize(); 

    /* Init app */
    App_Init();

    /* Start scheduler */
    osKernelStart();

    /* We should never get here as control is now taken by the scheduler */
    /* Infinite loop */
    while (1)
    {

    }

    return 0;
}

其中,

1)应用程序初始化,主要为创建任务,信号量,事件组,互斥量,消息队列等。可以放置一个文件,并将信号量等的创建,请求,释放用单独的函数进行封装后调用,避免导出全局变量。伪代码如下:

void App_Init(void)
{
    /* USER CODE BEGIN RTOS_MUTEX */
    /* add mutexes, ... */
    /* USER CODE END RTOS_MUTEX */

    /* USER CODE BEGIN RTOS_SEMAPHORES */
    /* add semaphores, ... */
    /* USER CODE END RTOS_SEMAPHORES */

    /* USER CODE BEGIN RTOS_TIMERS */
    /* start timers, add new ones, ... */
    /* USER CODE END RTOS_TIMERS */

    /* USER CODE BEGIN RTOS_QUEUES */
    /* add queues, ... */
    /* USER CODE END RTOS_QUEUES */

    /* Create the thread(s) */

    /* USER CODE BEGIN RTOS_THREADS */
    /* add threads, ... */
    /* USER CODE END RTOS_THREADS */

    /* USER CODE BEGIN RTOS_EVENTS */
    /* add events, ... */
    /* USER CODE END RTOS_EVENTS */

}

2)操作系统启动后永不返回(除非启动出错)。

总结,本文介绍了基于RTOS的程序基本框架。

你可能感兴趣的:(RTOS,RTOS,程序基本框架)