全球旧事资料 分类
DSP芯片TMS320DM642任务线程的使用
任务也是DSPBIOS内核中的一种线程。所有任务的中断优先级都低于硬件中断和软件中断。任务线程可以通过TSK_yield函数来切换运行。1复制并打开工程文件该工程的文件在titurorialevmDM642目录下,将所有文件复制到目标文件夹下,建立工程。2修改DSPBIOS配置工程在TSK中添加三个TSK对象。如下表所示:对象名字任务函数任务参数参数0task0_task0task1_task1task2_task2这三个TSK对象的优先级水平都设为1。设置LOG对象对线程进行和转换进行跟踪记录。保存修改后的配置文件。3查看源代码源代码有如下几个部分:1头文件与变量声明:这部分程序包括了程序中使用到的API函数的原型,还包括tsktestcfgh头文件,该头文件包含在配置文件中创建的DSPBISO对象的外部声明,还定义了NLOOPS常量,该常量为任务函数中的循环时间常量。2Mai
函数:mai
函数返回后即进入DSPBIOS的idle循环。当DSPBIOS内核将等待各种时间的发生。3Task函数:任务函数包含一个for循环,每次循环都发送一个消息到tarace窗口,然后通过调用TSK_yield函数实现任务切换。在循环了NLOOP定义的次数后,该函数结束。在DSPBIOS配置文件中,我们定义了三个TSK任务对象task0,task1和task2,它们调用的函数都是task,只是在调用时传递的参数不一样,分别为0,1和2。4运行在task0运行时,它调用了TSK任务模块的一个API函数TSK_yield,这样当前任务task0将暂停,而其他就绪任务便可以依次执行。同样,当task1调用任务切换函数后,task2便开始运行。当task2产生任务切换时,task0继续运行。所以,在TSK_yield的作用下,三个任务将交替执行,同时结束。例子运行时LOG对象的输出信息如下:0Loop0Task0Worki
g1Loop0Task1Worki
g2Loop0Task2Worki
g3Loop1Task0Worki
g4Loop1Task1Worki
g5Loop1Task2Worki
g6Loop2Task0Worki
g7Loop2Task1Worki
g8Loop2Task2Worki
g
f9Loop3Task0Worki
g10Loop3Task1Worki
g11Loop3Task2Worki
g12Loop4Task0Worki
g13Loop4Task1Worki
g14Loop4Task2Worki
g15Task0DONE16Task1DONE17Task2DONE5对程序做一下修改。当task0任务运行到第二次循环中时,增加一个改变任务线程优先级的函数调用,通过函数TSK_setpri将task2的优先级提高到2。代码如下:VoidtaskArgid_argI
tidArgToI
tid_argI
tifori0iNLOOPSiifi2id0TSK_setpritask22LOG_pri
tftrace”LoopdTaskdWorki
g”iidTSK_yieldLOG_pri
tftrace”TaskdDo
e”id当for循环执行到第三个循环开始时,即i2时,task2的优r
好听全球资料 返回顶部