一、ucos信号量简介
信号量像是一种上锁机制,代码必须获得对应的钥匙才能继续执行,一旦获得了钥匙,也就意味着该任务具有进入被锁部分代码的权限。一旦执行至被锁代码段,则任务一直等待,直到对应被锁部分代码的钥匙被再次释放才能继续执行。信号量分为两种,一种是二进制信号量,另一种是计数型信号量。这是一种比较官方的说法,我的理解就是第一种二进制信号量就像是单独的厕所,在一个人使用厕所的时候另一个人必须等待,直到第一个人使用完后发出信号说“我使用完毕”,第二个人才能获得厕所的使用权。而计数型信号量就像停车位一定的停车场,比如说可以停100辆车,每当有车进去停车位就减1,当停车位为0的时候再有车想进来就必须等待,每当有车出去停车位就加1,此时等待的车辆就可以进停车场,以此类推,其中停车位就是一个信号量。在ucos系统中创建信号量、删除信号量等操作都是通过函数实现的。如下图所示:

二、问题的出现和解决
在使用信号量之前遇到了发送错乱的现象。具体描述如下:
**单独测试DMA时:**刚开始创建两个发送任务进行测试的时候是直接将数据放至传输数组中传输即可,可是若要这个任务不停的循环发送的话,就要将这两个发送任务放在循环中去,但是这样问题就出现了,我是直接将这两句传输语句放在LED灯闪烁的两端的,放了之后就出现第一次传输正常,后面的传输就出现只传输第二个传输任务,第一个直接跳过了,一直执行第二个任务,最后才知道是在第二次传输之后没有进行延时,相当于发送完成标志位未进行清零操作,导致一直循环发送第二个任务。最后在第一个任务和第二个任务之后都加上延时就可以进行两个传输任务执行了,并且可以点灯任务。
使用UCOS创建任务时:当时使用的时ucosii没有使用信号量和时间片轮转的操作,导致在DMA传输的时候出现两个传输内容混发的情况,当时一直进行试改,两个任务优先级不

本文介绍uCOS系统中信号量的概念及其在DMA数据传输中的作用。作者通过解决实际项目中DMA数据发送错乱的问题,展示了信号量如何避免任务间的冲突,确保数据正确传输。
2810

被折叠的 条评论
为什么被折叠?



