欢迎来到天天文库
浏览记录
ID:38143784
大小:140.12 KB
页数:5页
时间:2019-05-27
《DSPBIOS_例程分析_不同优先级软中断任务切换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、精品开发资料交流请注册邮箱DSP_4_DSPBIOS_例程分析_不同优先级软中断任务切换这是在网上找的一个DSP/BIOS不同优先级软中断任务切换的例程。CPU:DM642.用CCS3.3软件仿真。Configuration中插入两个软中断SWI0和SWI1,优先级分别为1和2,处理函数分别为swiFxn0和swiFxn1。代码:#include#include#include#include#include"switestcfg.h"VoidswiFxn0(Void);精品开发资
2、料交流请注册邮箱精品开发资料交流请注册邮箱VoidswiFxn1(Void);Voidmain(Intargc,Char*argv[]){LOG_printf(&trace,"switeststarted!");LOG_printf(&trace,"MainpostsSWI0");SWI_post(&SWI0);LOG_printf(&trace,"Maindone!");}VoidswiFxn0(Void){LOG_printf(&trace,"swiFxn0postsSWI1");SWI_post(&SWI1);LO
3、G_printf(&trace,"SWI0done!");}VoidswiFxn1(Void){LOG_printf(&trace,"SWI1done!");}这程序里主要有三个函数:主函数main,swiFxn0,swiFxn1。为了分析好这个程序我们先来看一下DSP/BIOS启动序列:1)初始化DSP:DSP/BIOS程序从入口点c_int00开始运行,复位中断向量指向c_int00地址;2)用.cinit段中的记录来初始化.bss段;3)调用BIOS_init初始化DSP/BIOS模块:BIOS_init执行基本的模块初始
4、化,然后调用MOD_init宏分别初始化每个用到的模块;精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱4)处理.pinit表:.pinit表包含了初始化函数的指针;5)调用应用程序主程序main函数:在所有DSP/BIOS模块初始化之后,调用main函数。此时硬件中断和软件中断都是禁止的,应用程序可以在这里添加自己的初始化代码;6)调用BIOS_start启动DSP/BIOS:BIOS_start负责使能DSP/BIOS模块并为每一个用到的模块调用MOD_startup宏使其开始工作;7)执行空闲循环:调用IDL_loop引导程序
5、进入DSP/BIOS空闲循环,此时硬件和软件中断可以抢占空闲循环的执行。空闲循环控制着和主机的通信,所以此时主机和目标之间的数据传输就可以开始了。按照DSP/BIOS启动序列,前四个还没搞清到底是神马,第五个就知道了,主函数先执行,在trace窗口显示switeststarted!MainpostsSWI0SWI_post(&SWI0);这条语句是启动软件中断SWI0。即使软件中断SWI0已经被允许启动了,但是主函数还没有执行完毕,所以SWI0暂时不启动。在trace窗口接着显示Maindone!主函数结束。这时候SWI0就可以启动了,
6、调用函数swiFxn0在trace窗口显示swiFxn0postsSWI1然后语句SWI_post(&SWI1);启动SWI1。SWI1的优先级高于SWI0,所以SWI0还没有结束就暂停,去处理SWI1,调用swiFxn1在trace窗口显示SWI1done!SWI1结束后,回过头来接着处理SWI0,返回函数swiFxn0在trace窗口显示SWI0done!精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱
此文档下载收益归作者所有