- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ARM 学习资料 RTX 基本内容 嵌入式技术如何使用 RTX 数据手册 URD-ARM-RTX-LEC-001
闪灯控制 os_sys_init;实现了在rtx kernel初始化后,任务就开始执行 闪灯控制 部分代码说明 main函数: int main (void) { SystemInit(); /* 初始化时钟*/ STM_EVAL_LEDInit(LED1); /* 初始化LED灯*/ STM_EVAL_LEDInit(LED2); STM_EVAL_LEDInit(LED3); STM_EVAL_LEDInit(LED4); STM3210C_LCD_Init(); //初始化LCD LCD_Clear(White); os_sys_init (init); /* 初始化 RTX 并且开始执行 init任务 */ } 闪灯控制 init任务 __task void init (void) { os_mut_init(mut_GLCD);/*初始化一个互斥量mut_GLCD,任务执行期间持有这个互斥量,执行完后释放掉*/ t_phaseA = os_tsk_create (phaseA, 0); /* 创建任务 phaseA */ t_phaseB = os_tsk_create (phaseB, 0); /*创建任务 phaseB */ t_phaseC = os_tsk_create (phaseC, 0); /*创建任务 phaseC */ t_clock = os_tsk_create (clock, 0); /*创建任务 clock */ t_lcd = os_tsk_create (lcd, 0); /*创建任务 lcd */ os_evt_set (0x0001, t_phaseA); /*发送信号事件0x0001 到任务phaseA ,唤醒它*/ os_tsk_delete_self (); /*删除自身,以实现任务的切换*/ } 闪灯控制 说明:当系统启动时,在运行任何任务前RTX kernel必须先启动起来,在C main函数中调用os_sys_init函数,把第一个任务名init作为参数给os_sys_init()函数。这保证了在rtx kernel初始化后,任务就开始执行了而不是还在main函数中执行。然后删除自身,实现任务切换。 闪灯控制 任务phaseA 分析 __task void phaseA (void) { for (;;) { os_evt_wait_and (0x0001, 0xffff); /*用来等待所有事件标记为ox0001的事件发生,oxffff表示一直等待直到时间片用完 */ LED_On (LED1); //点亮LED1 signal_func (t_phaseB); /* 发信号给任务t_phaseB ,给t_clock任务设了一个标记0x0100并执行这个任务,给t_phaseB设了标记0x0001,并执行任务t_phaseB*/ LED_Off(LED1); //熄灭LED1 } } 闪灯控制 简要说明 在t_phaseA中调用了signal_func(t_phaseB),则给t_clock任务设了一个标记0x0100并执行这个任务,给t_phaseB设了标记0x0001,并执行任务t_phaseB。由于在t_phaseA任务中调用了os_evt_wait_and (0x0001, 0xffff);t_phaseB的标记和t_phaseA相同,所以当时间片没到时,有一段时间t_phaseA任务和t_phaseB任务是同步的,即LED1和LED2有一段时间是同时亮的。并且给t_clock设置了事件标记,该任务实现了LED4每隔一定时间亮一下。t_phaseB和t_phaseC任务和t_phaseA类似。而t_lcd这个任务当时间片轮到它时才执行。 RTX编程应用-红绿灯控制 简述: TRAFFIC例子是一个行人交通灯控制的例程,介绍使用RTX核实时操作系统设计多任务应用程序的基本方法。在用户定义的时间内,交通灯亮;在这个时间外,黄灯亮;如果行人按了请求按钮,交通灯立即显示为行人通过状态,
原创力文档


文档评论(0)