《dspbios_例程分析_不同优先级软中断任务切换》由会员分享,可在线阅读,更多相关《dspbios_例程分析_不同优先级软中断任务切换(5页珍藏版)》请在金锄头文库上搜索。
1、精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱DSP_4_DSPBIOS_例程分析_不同优先级软中断任务切换这是在网上找的一个 DSP/BIOS 不同优先级软中断任务切换的例程。CPU:DM642.用 CCS3.3 软件仿真。Configuration 中插入两个软中断 SWI0 和 SWI1,优先级分别为 1 和 2,处理函数分别为 swiFxn0 和 swiFxn1。代码:#include #include #include #include #include “switestcfg.h“Void swiFxn0swiFxn0(Void);精品开发资料交流请注册邮箱精品开发资料交流请
2、注册邮箱Void swiFxn1swiFxn1(Void);Void mainmain(Int argc, Char *argv)LOG_printfLOG_printf(LOG_printfLOG_printf(SWI_postSWI_post(LOG_printfLOG_printf(Void swiFxn0swiFxn0(Void)LOG_printfLOG_printf(SWI_postSWI_post(LOG_printfLOG_printf(Void swiFxn1swiFxn1(Void)LOG_printfLOG_printf(这程序里主要有三个函数:主函数 mainmain,
3、 swiFxn0swiFxn0 ,swiFxn1swiFxn1。为了分析好这个程序我们先来看一下 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)调用应用程序主程序 m
4、ain 函数:在所有 DSP/BIOS 模块初始化之后,调用 main 函数。 此 时硬件中断和软件中断都是禁止的,应用程序可以在这里添加自己的初始化代码;6) 调用 BIOS_start 启动 DSP/BIOS: BIOS_start 负责使能 DSP/BIOS 模块并为每一个用到的 模块调用 MOD_startup 宏使其开始工作;7)执行空闲循环:调用 IDL_loop 引导程序进入 DSP/BIOS 空闲循环,此时硬件和软件中断 可以抢占空闲循环的执行。 空闲循环控制着和主机的通信, 所以此时主机和目标之间的数据 传输就可以开始了。按照 DSP/BIOS 启动序列,前四个还没搞清到底是
5、神马,第五个就知道了,主函数先执行,在 trace 窗口显示switest started!Main posts SWI0SWI_postSWI_post( 这条语句是启动软件中断 SWI0。 即使软件中断 SWI0 已经被允许启动了, 但是主函数还没有执行完毕,所以 SWI0 暂时不启动。在 trace 窗口接着显示Main done!主函数结束。这时候 SWI0 就可以启动了,调用函数 swiFxn0swiFxn0在 trace 窗口显示swiFxn0 posts SWI1然后语句 SWI_postSWI_post(启动 SWI1。SWI1 的优先级高于 SWI0,所以 SWI0 还没有结束就暂停,去处理 SWI1,调用 swiFxn1swiFxn1在 trace 窗口显示SWI1 done!SWI1 结束后,回过头来接着处理 SWI0,返回函数 swiFxn0swiFxn0在 trace 窗口显示SWI0 done!精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱精品开发资料交流请注册邮箱