TI中文支持网
TI专业的中文技术问题搜集分享网站

C6678 信号量和任务

Ti专家你好:

我想问一下 在任务中信号量的发布 会不会被其他高优先级的任务抢占?

例如:一个高优先级的任务是srio门铃中断的触发,另外一个低优先的任务是处理srio接收到的数据,高优先级的任务接收到srio数据后,低优先级任务处理srio接收到的数据(低优先的任务一直在处理数据,高优先的任务一直在接收门铃和数据),目前测试来看,是高优先的任务无法抢占低优先级的任务。只能低优先的任务处理完毕才能正常接收到高优先级的门铃!!!

麻烦ti专家能帮忙解答一下!!!如何去实现这两个任务,让他可以处理数据任务的时候还能跳到srio门铃接收这个任务!(对端srio发送数据间隔是3ms,srio处理数据任务大概执行周期是30ms,也就是说在处理数据的时候要接收到10个srio门铃,但是目前来看是无法实现!)

JohnieSi1:

高优先的接收srio数据是通过发布信号量来实现的Semaphore_pend(DoorBellCbKSem, BIOS_WAIT_FOREVER);

,

Shine:

请问不能抢占低优先级中断时,程序一直在Semaphore_pend这里?

,

JohnieSi1:

不抢占低优先中断是确定是一直在Semaphore_pend卡着,中断来了就可以进入!

,

Shine:

中断来了应该会post一个信号量,Semaphore_pend就应该会跳出死循环,进入高优先级task。

,

JohnieSi1:

正常情况下是这样   但是我在低优先级处理函数中 简单加一个for(i=0;i<100000000;i++)循环 他就在循环中无法接收到高优先的门铃中断了 , 只有等到循环结束他才能接收到门铃中断才能响应高优先级接收函数  我觉得是cfg中少加一条指令造成的 麻烦ti专家解答一下!

,

Shine:

低优先级task中一下子要处理这么多数据吗?如果把循环次数减少,能抢占吗?

,

JohnieSi1:

我拿TSCL和TSCH计算出大概是40ms的处理完数据, 因为太快了 所以我屏蔽掉函数拿for循环模拟出一个长时间的处理  把循环次数减少还是一样的  只有等for循环循环完才能正常接收中断!!!

,

Shine:

麻烦发一个简单的测试代码给我们看一下。

,

JohnieSi1:

6825.test.zip

里面是一个平台包和一份简单测试代码 已经测过了 还是同样的现象!!麻烦ti专家看一下帮忙解答一下 谢谢!

,

Shine:

如果把for语句去掉能抢占吗?

,

JohnieSi1:

for语句去掉的话   还是一样的 只能这个Task运行完  门铃中断才能被触发

,

Shine:

请尝试使用System_printf 或者UART_printf 打印。
e2e.ti.com/…/278543

赞(0)
未经允许不得转载:TI中文支持网 » C6678 信号量和任务
分享到: 更多 (0)