ucosiii资源管理特性

    xiaoxiao2021-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)