DSP/BIOS内核的应用程序中,优先级从低到高有四个线程:
后台线程(IDL)线程;
TSK(任务)线程;
SWI线程(软件中断);
HWI线程(硬件中断);
应用程序从默认进入点_c_int00开始运行,首先完成系统的初始化,包括DSP/BIOS配置中指定的各个寄存器的设置以及PLL倍频时钟的设置等,然后调用main()函数,在main()函数结束返回,调用BIOS_start(),开始按优先级检测并执行HWI,SWI,TSK,当前面所有线程都没有执行时(没有HWI和SWI,有的任务已经完成,而有的被挂起),开始进入IDL_F_LOOP循环,执行后台的IDL线程(LOG模块的信息显示就是在IDL线程中完成的,CPU负荷图的数据也是这时读取并送到PC主机,以便完成图形绘制等)。在IDL_F_LOOP中,若有HWI,则立即暂停IDL,切换到硬件中断服务子程序。当硬件ISR完成后,根据具体情况判定有无SWI或唤醒任务,最后才回到IDL继续运行。
注意,DSP/BIOS内核仍然是个多任务的内核,但并不是一个严格意义上的抢先式内核。除了HWI,其他所有线程都必须自己自动放弃对CPU的控制,以便完成切换。当然,当硬件中断发生后,也会产生线程的切换,这时所有线程都将按优先级重新安排运行,所以从这点讲,DSP/BIOS内核也具有抢先的特点。
在DSP/BIOS内核应用中,用户可以将自己的处理代码(如G723的编码、解码,MP3 解压等)放到硬件中断,软件中断,任务或后台线程中的任何一个线程中调用运行。一般推荐在SWI和TSK中调用。用户可以在DSP/BIOS的配置文件中简单说明这些软件中断或任务(即所谓的静态说明),也可以在运行过程中通过DSP/BIOS内核提供的API函数调用动态创建。
API函数调用几乎都可以使用C或C++语言直接调用。通过这些API,用户可以完成硬件中断的管理,软件中断的启动,任务的切换,各线程之间的同步和数据通信等。
我要赚赏金打赏帖 |
|
|---|---|
| 28BYJ-48机械臂实现人脸跟随被打赏¥24元 | |
| 基于RK3506B的片温识读功能的实现被打赏¥25元 | |
| 【瑞萨RA8D1测评】基于FreeRTOS的lvgl移植教程被打赏¥29元 | |
| 电子价签墨水屏开发被打赏¥35元 | |
| 【Ozone】RTT 打印终端使用被打赏¥29元 | |
| BMS保护板绝缘检测功能-不平衡电桥技术绝缘电阻检测设计与实现被打赏¥34元 | |
| 给28BYJ-48三自由度机械臂加一个网页控制台被打赏¥32元 | |
| 用28BYJ-48电机从零搭一台三自由度机械臂被打赏¥33元 | |
| 【英飞凌开发经验】ModusToolbox配置EdgeTalk外设被打赏¥27元 | |
| 基于BQ76952PFBR的BMS保护板热插拔损坏的原因和处理措施被打赏¥32元 | |
我要赚赏金
