本文章是根据http://www.freertos.org/Creating-a-new-FreeRTOS-project.html翻译而来
1. 介绍
FreeRTOS设计的简单和容易使用:仅仅包含所有RTOS接口均需要的3个公共源文件和一个特定处理器需要的源文件。并且FreeRTOS的API函数被设计的简单易懂。
FreeRTOS能够被移植到很多不同的处理器架构和不同的编译器当中。每一款官方的接口都来自于(至少在创造的时候)在硬件平台上编辑和执行过得官方演示程序,因此在开发时候几乎不需要对其修改。
提供这些演示例程是为了帮助新的使用者能够在尽可能短的时间和花费最少的精力的情况下开始FreeRTOS开发。
FreeRTOS说支持的每一种处理器架构都能运用到不同的处理器中,这意味着FreeRTOS可以用于上千种不同零件号的微处理器。用支持的编译器的数量乘以这个数字,接着乘以市场中售卖的不断增长初学者工具包和评估板,很明显,尽管我们已经尽力最大的努力,我们也仅仅能够提供一小部分能够完全匹配的可能组合的官方演示程序。
我们总是建议通过以一个提供的预配置好的演示程序来开始和调整一个新建的FreeRTOS项目。这样做可以确保新建项目中包含所有需要的源文件和头文件,接着在不需要很大的努力情况下,我们可以安装好必要的中断服务程序。
一些FreeRTOS用户还想知道如何适应现有的工程手段创造FreeRTOS的项目。具体的实现过程如下。
2. 一个FreeRTOS项目的剖析
vTaskStartScheduler() 函数被调用前,FreeRTOS程序的的启动和执行与一个非实时操作系统一样。vTaskStartScheduler()通常由应用程序当中的mian()函数来调用。在vTaskStartScheduler()函数被调用后,RTOS只控制程序的执行顺序。
在尝试使用RTOS的功能函数前,强烈建议要确保代码在说选择的目标上正确的执行了(正确的启动代码,正确的连接配置等)。
3. 源文件
跟您在您项目中的其他C文件的创建一样,FreeRTOS的文件也是采用标准C文件来提供的。FreeRTOS的源文件都分布在一个zip文件中。RTOS源代码的组织页面描述了zip文件的结构。
最低限度下,在您的工程中必须包含以下几个源文件:
|
如果目录中同时包含了port.c文件和汇编语言文件,那么这个汇编语言文件必须被使用。
如果您需要使用软件定时器功能函数,那么请在项目中包含FreeRTOS/Source/timers.c文件。
如果您需要使用协同程序功能函数,那么请在项目中包含FreeRTOS/Source/croutine.c文件。
4. 头文件
最低限度下,在编译器的头文件包含路径中必须包含以下几个路径(必须告诉编译器去这些路径中寻找需要的头文件):
|
依赖于这些接口,可能汇编程序的包含路径需要与他们在同一个目录下。
5. 配置文件
每个项目都需要一个FreeRTOSConfig.h配置头文件,FreeRTOSConfig.h文件裁剪RTOS内核来适应被建立的应用程序。因此它是一个特定的应用程序,并非是RTOS,其应该被放在一个应用程序目录下而不是在RTOS内核源文件目录中。
如果您的目录中包含了heap_1, heap_2, heap_4 或者heap_5,那么FreeRTOSConfig.h文件中的configTOTAL_HEAP_SIZE宏定义会标定出堆的大小。如果configTOTAL_HEAP_SIZE设的太高,那你的应用程序将无法连接。
FreeRTOSConfig.h中的configMINIMAL_STACK_SIZE宏定义将设置被用于所有空闲任务的堆栈的大小。如果configMINIMAL_STACK_SIZE设置的太小,空闲任务将产生堆栈溢出。建议您根据提供给对于微处理器架构的官方FreeRTOS演示程序来设置configMINIMAL_STACK_SIZE大小。FreeRTOS 的演示程序存储在FreeRTOS/Demo目录的子目录下面。注意一些演示项目时旧的,因此不要包含所有的可配置选项。
6. 中断向量
每一个RTOS接口均用一个定时器来产生一个周期性的滴答中断。许多接口采用附加中断来管理上下文切换。一个RTOS接口需要的中断是通过RTOS接口源文件来提供服务的。
RTOS接口提供的中断服务程序的安装方法是根据接口和编译器来确定的。如果需要的话,可以拷贝该端口说使用的官方提供的演示程序。也可参考官方演示程序所提供的文档页面。