Kinetis-K40FreeRTOS_V7.1.0移植学习记录(二)
[复制链接]
2012-3-12 关于source insight的一些设置 1.增加汇编语言的关键字彩色显示 Option->Document Options-> "C Source FIle"对应的File filter中加入 *.s 2.文件中高亮设置,关键字高亮设置便于后面查找 按SHIFT+F8 现在来整理一些FreeRTOS的基本知识, 1.目录结构 FreeRTOS | +-Demo | | | +-Common 各种体系共用的文件 | +-Dir x 体系x的范例程序文件 | +-Dir y 体系y的范例程序文件 | +-Source | +-Portable 特定处理器代码 +-include 头文件 2.命名规则 a.变量 char类型的变量以 c 为前缀 short类型的变量以 s 为前缀 long类型的变量以 l 为前缀 float类型的变量以 f 为前缀 double类型的变量以 d 为前缀 枚举变量以 e 为前缀 其他类型(如结构体)以 x 为前缀 指针有一个额外的前缀 p , 例如short类型的指针前缀为 ps 无符号类型的变量有一个额外的前缀 u , 例如无符号short类型的变量前缀为 us b.函数 文件内部函数以prv为前缀 API函数以其返回值类型为前缀,按照前面对变量的定义 函数的名字以其所在的文件名开头。如vTaskDelete函数在Task.c文件中定义 c.数据类型 数据类型并不直接在RTOS内核内部引用。相反,每个平台都有其自身的定义方式。例如,char类型定义为portCHAR,short类型定义为portSHORT等。范例程序源代码使用的就是这种符号,但这并不是必须的,你可以在你的程序中使用任何你喜欢的符号。 此外,有两种额外的类型要为每种平台定义。分别是: portTickType 可配置为16位的无符号类型或32位的无符号类型。参考API文档中的 定制部分获取详细信息。 portBASE_TYPE 为特定体系定义的最有效率的数据类型。 如果portBASE_TYPE定义为char则必须要特别小心的保证用来作为函数返回值的signed char可以为负数,用于指示错误。 3.基本框架 在主函数中,内核启动前至少要穿件一个任务 然后执行vTaskStartScheduler( void ) ,开始任务调度,vTaskStartScheduler( )执行后空闲任务自动被创建 在main.c中增加一个显示任务每隔1S显示一次 和uc/OS类似,简单步骤如下: 1.定义该任务的优先级; 2.main函数中增加任务 xTaskCreate( prvSLCDDisplayTask, #函数名 ( signed char * ) "SLCD", #r任务名,便于调试 configMINIMAL_STACK_SIZE,#栈大小,words为单位 NULL, mainSLCD_DISPLAY_TASK_PRIORITY,#优先级 NULL ); 函数原型为 portBASE_TYPE xTaskCreate( pdTASK_CODE prvTaskCode, const portCHAR * const pcName, unsigned portSHORT usStackDepth, void *prvParameters, unsigned portBASE_TYPE uxPriority, xTaskHandle *prvCreatedTask ); 参数说明: prvTaskCode | 指向任务的入口函数. 任务必须执行并且永不返回 (即:无限循环). | pcName | 描述任务的名字。主要便于调试。最大长度由 configMAX_TASK_NAME_LEN.定义,包括'\0'结束符 | usStackDepth | 指定任务堆栈的大小 ,堆栈能保护变量的数目- 不是字节数. 例如,如果堆栈为16位宽度,usStackDepth定义为 100, 200 字节,这些将分配给堆栈。堆栈嵌套深度(堆栈宽度)不能超多最大值——包含了size_t类型的变量 | prvParameters | 指针用于作为一个参数传向创建的任务 | uxPriority | 任务运行时的优先级 | prvCreatedTask | 用于传递一个处理——引用创建的任务,比如删除,改变优先级等等,可以用vTaskDelete( xHandle ) 删除任务,比如 xTaskCreate( vTaskCode, "NAME", STACK_SIZE, NULL, tskIDLE_PRIORITY, &xHandle ); // 使用处理来删除任务. vTaskDelete( xHandle ); vTaskDelete(NULL),为删除当前任务 |
返回值: pdPASS 是如果任务成功创建并且添加到就绪列中,另外错误代码在projdefs. H文件定义
|