3069|0

473

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

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文件定义


此帖出自NXP MCU论坛
点赞 关注(1)
个人签名Nicrosystem专业提供freescale、TI和STM32高性价比开发板、解决方案
http://nicrosystem.taobao.com
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表