首页
IT
登录
6mi
u
盘
搜
搜 索
IT
ucosiii资源管理特性
ucosiii资源管理特性
xiaoxiao
2021-12-02
20
资源管理
1、保护共享资源的方式
(1)关中断
能很快地结束访问共享资源,不推荐使用,因为会导致中断延迟
CPU_SR_ALLOC(); //这个宏为一个本地的变量分配了存储空间用于保存关闭中断前的CPU状态寄存器SR
CPU_CRITICAL_ENTER();
CPU_CRITICAL_EXIT();
只有这种方法才可以让任务和ISR共享资源
(2)锁调度器方式
访问共享资源比较久时
如果任务不需要和ISR共享资源,就可以通过锁调度来访问共享资源,使用
这种方法,多个任务就可以无竞争的访问共享资源,如果在处理临界段时发生
中断,ISP就会被执行,在ISR的末尾,系统会返回原任务。
OSSchedLock()和OSSchedUnlock可以被嵌套多大250级
(3)信号量方式
当该共享资源经常被多个任务使用时,但是信号量可能会造成优先级倒置,
然而,信号量方式的执行时间少于mutex方式
信号量经常使用三个函数:OSSemCreate,OSSemPend,OSSemPost;除了
OSSemPost之外,其它函数都不可以用于ISR程序里面
例如,一个串口被多个任务共享,发送命令到目标器件并接收响应,函数CommSendCmd
被调用,它有三个参数:命令字符串、指向响应字符串的指针、超时时间。
APP_ERR commSendCmd(CPU_CHAR *cmd, CPU_CHAR *response, OS_TICK timeout)
{
Acquire serial port's semaphore;
Send "cmd" to device;
Wait for response with "timeout";
Release serial port's semaphore;
if(timeout)
{
return error_code;
}else{
return no error;
}
}
用信号量访问共享资源不会导致中断延迟,当任务执行信号量锁保护的共享资源时,ISR或高优先级任务可以抢占该任务。
访问简短的共享资源,建议直接使用开关中断的方式。信号量还会导致优先级反转。
(4)mutex方式
推荐使用这种方法访问共享资源,尤其当任务要访问的共享资源有截止时间,
有内置优先级,可以防止优先级倒置,mutex方式慢于信号量方式
2、资源保护的示例
(1)使用printf,添加关开中断
(2)发送命令函数
(3)涉及命令发送的初始化类函数
转载请注明原文地址: https://ju.6miu.com/read-679665.html
专利
最新回复
(
0
)