完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
2个回答
|
|
中断管理
中断是硬件机制, 用于通知CPU有异步事件发生。 当中断被响应时,CPU保存部分 ( 或全部)寄存器值并跳转到中断服务程序 ( ISR)。ISR响应这个事件, 当ISR处理完成后, 程序会返回中断前的任务或更高优先级的任务。 通过中断,微控制器能够在外部事件发生的时候立即进行处理,而不需要连续轮询该事件是否发生。中断处理的实时性通常比轮询方式好。 关闭中断会增加中断处理延迟,可能导致后续中断请求丢失。在实时操作系统中一般尽量减少关闭中断的时间。 如图所示,中断控制器负责接收所有的中断请求信号 μC/OS-III支持中断嵌套,用OSIntNestingCtr来记录中断嵌套的次数,最大支持250级嵌套。每进入一次中断服务函数OSIntNestingCtr就会加1,当退出时就会减1。 我们编写μC/OS-III的中断服务程序的时候需要使用两个函数OSIntEnter()和OSIntExit(),其代码如下所示 那我们在具体编写中断服务函数又是怎么样的呢? 在μC/OS-III中,从中断发布消息或者信号的处理方式有两种模式:直接发布和延迟发布 再OS_cfg.h中,将OS_CFG_ISR_POST_DEFERRED_EN设置成0,使用直接发布模式;设置为1,则使用延迟发布模式。 而且对于应用程序和中断服务程序来说,使用这两种模式,其代码不需要做任何的改动,仅需要简单的更改这个配置选项重新编译即可。 ①直接发布 使用直接发布的话,μC/OS-III会对临界段代码采取关中断的保护措施,这样会延长中断的响应时间。 ②延迟发布 通过对任务调度器上锁的方式来保护临界段的代码,可以保证中断的响应和处理。其机制如下 ③直接发布与延迟发布的对比 推荐使用延迟发布模式的特性 |
|
|
|
时间管理
μC/OS-III提供了一系列时间管理的服务,归纳如表所示 ①OSTimDly()函数 任务调用该函数以执行一段时间,调用该函数的任务会停止执行,直到指定的延时结束。该函数有三种模式:相对模式、周期模式和绝对模式 相对模式与周期模式也许看不出区别,但实际上两者是不同的。 在“相对模式”下,当系统负荷比较重时有可能延时会少一个节拍,甚至偶尔差多个节拍。 在“周期模式”下,任务任然可能会被推迟执行,但它总会和预期的匹配值同步。 绝对模式可以用来在上电后指定的时间执行具体的动作。例如在产品上电后关闭某盏灯。 ②OSTimeDlyHMSM()函数 也可以使用这个函数更加直观的指定延时长度。具体地说,延时的长度是通过“小时、分、秒、毫秒”来指定的。该函数仅工作在相对模式下。 OS_OPT参数中 设置 OS_OPT_TIME_HMSM_STRICT后会检测函数的参数是否合理。小时的范围是 0到 99,分的范围是 0到59,秒的范围是0到59,毫秒的范围是0-999。 如果设置为 OS_OPT_TIME_HMSM_NON_STRICT,函数会接受参数的范围变大。小时的范围是0到999,分的范围是0到9999,秒的范围是0到65535,毫秒的范围是0到4294967295。 限制小时范围为0到999的原因是:一般是用32位的数记录时基值的。如果时基的频率为1000Hz,那么最多能计数 4294967秒,大约1193小时。因此设置999小时为上限。 ③OSTimeDlyResume() 函数 任务可以调用 OSTimeDlyResume()恢复其它被 OSTimeDly()或OSTimeDlyHMSM()延时的任务。使用如下 ④OSTimeSet()和OSTimeGet() 每个时基中断发生时uC/OS-III会递增时基计数值。通过这个计数值能大概看出系统上电后经过了多长时间。OSTimeGet()能获得时基计数值。 OSTimeSet()允许用户设置时基计数值。虽然uC/OS-III允许这种 操作,但调用这个函数时需慎重。 ⑤OSTimeTick() 当时基中断发生时, 时基ISR必须调用这个函数。 uC/OS-III用这 个函数更新时基计数值。 OSTimeTick()是uC/OS-III的内部函数。 |
|
|
|
只有小组成员才能发言,加入小组>>
22041个成员聚集在这个小组
加入小组12312 浏览 0 评论
5771 浏览 3 评论
17578 浏览 6 评论
2626 浏览 1 评论
3266 浏览 1 评论
2003浏览 2评论
922浏览 1评论
877浏览 1评论
2048浏览 1评论
1272浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-9-22 01:36 , Processed in 0.861280 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号