|
![](static/image/common/ico_lz.png)
楼主 |
发表于 2014-8-26 10:41:09
|
显示全部楼层
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文件定义
|
|