DSPBIOS_例程分析_不同优先级软中断任务切换.pdfVIP

DSPBIOS_例程分析_不同优先级软中断任务切换.pdf

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DSPBIOS_例程分析_不同优先级软中断任务切换.pdf

精品开发资料交流请注册邮箱 DSP_4_DSPBIOS_例程分析_不同优先级软中断任务切换 这是在网上找的一个DSP/BIOS不同优先级软中断任务切换的例程。 CPU:DM642.用CCS3.3软件仿真。 Configuration中插入两个软中断SWI0 和SWI1,优先级分别为1和2,处理函数分别为 swiFxn0和swiFxn1。 代码: #include std.h #include log.h #include swi.h #include sys.h #include switestcfg.h Void swiFxn0(Void); 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱 Void swiFxn1(Void); Void main(Int argc, Char *argv[]) { LOG_printf(trace,switest started!\n); LOG_printf(trace,Main posts SWI0\n); SWI_post(SWI0); LOG_printf(trace,Main done!\n); } Void swiFxn0(Void) { LOG_printf(trace,swiFxn0 posts SWI1\n); SWI_post(SWI1); LOG_printf(trace,SWI0 done!\n); } Void swiFxn1(Void) { LOG_printf(trace,SWI1 done!\n); } 这程序里主要有三个函数:主函数main, swiFxn0 ,swiFxn1。 为了分析好这个程序我们先来看一下DSP/BIOS启动序列: 1)初始化DSP:DSP/BIOS程序从入口点c_int00开始运行,复位中断向量指向c_int00地 址; 2)用.cinit段中的记录来初始化.bss段; 3)调用BIOS_init初始化DSP/BIOS模块:BIOS_init执行基本的模块初始化,然后调用 MOD_init宏分别初始化每个用到的模块; 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱 4)处理.pinit表:.pinit表包含了初始化函数的指针; 5)调用应用程序主程序main函数:在所有DSP/BIOS模块初始化之后,调用main函数。此 时硬件中断和软件中断都是禁止的,应用程序可以在这里添加自己的初始化代码; 6)调用BIOS_start启动DSP/BIOS:BIOS_start负责使能DSP/BIOS模块并为每一个用到的 模块调用MOD_startup宏使其开始工作; 7)执行空闲循环:调用IDL_loop引导程序进入DSP/BIOS空闲循环,此时硬件和软件中断 可以抢占空闲循环的执行。空闲循环控制着和主机的通信,所以此时主机和目标之间的数据 传输就可以开始了。 按照DSP/BIOS启动序列,前四个还没搞清到底是神马,第五个就知道了,主函数先执行, 在trace窗口显示 switest started! Main posts SWI0 SWI_post(SWI0); 这条语句是启动软件中断SWI0。即使软件中断SWI0已经被允许启动了, 但是主函数还没有执行完毕,所以SWI0暂时不启动。 在trace窗口接着显示 Main done! 主函数结束。 这时候SWI0就可以启动了,调用函数swiFxn0 在trace窗口显示 swiFxn0 posts SWI1 然后语句SWI_post(SWI1);启动SWI1。 SWI1的优先级高于SWI0,所以SWI0还没有结束就暂停,去处理SWI1, 调用swiFxn1 在trace窗口显示 SWI1 done! SWI1结束后,回过头来接着处理SWI0,返回函数swiFxn0 在trace窗口显示 SWI0 done! 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱 精品开发资料交流请注册邮箱

文档评论(0)

wuyouwulu + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档