DSP/BIOS入门

2019-07-14 14:08发布

1
DSP/BIOS
简介DSP/BIOSCCS中集成的一个简易的嵌入式实时操作系统,能够大大方便用户编写多任务应用程序。DSP/BIOS拥有很多实时嵌入式操作系统的功能,如任务的调度,任务间的同步和通信,内存管理,实时时钟管理,中断服务管理等。有了它,用户可以编写复杂的多线程程序,并且会占用更少的CPU和内存资源。
DSP/BIOS是一个可用于实时调度、同步,主机和目标机通信,以及实时分析系统上的一个可裁减实时内核,它提供了抢占式的多任务调度,对硬件的及时反应,实时分析和配置工具等。同时提供标准的API接口,易于使用。它是TIeXpressDSP实时软件技术的的一个关键部分。


1.1
DSP/BIOS
的组件构成
?
DSP/BIOS API:编写的程序可以调用API接口函数;
?
DSP/BIOS配置:创建的配置文件定义了程序使用的静态BIOS对象;
?
DSP/BIOS分析工具:集成在CCS上的一些BIOS分析工具可以对运行与目标设备上的程序进行监测,包括CPU负载、时间、日志、线程执行状态等。


DSP/BIOS分为很多模块,提供的所有API函数都按照模块分类,以模块名加下划线开头来命名,如 40所示为DSP/BIOS的全部模块。

40

1.2
DSP/BIOS
的启动顺序DSP/BIOS的应用程序启动时,一般遵循下面的步骤:
1)
初始化DSPDSP/BIOS程序从C/C++环境入口c_int00开始运行。对于C6000平台,在c_int00开始处,系统栈指针(B15)和全局页指针(B14)被分别设置在堆栈断的末尾和.bss断的开始。控制寄存器AMRIERCSR等被初始化;
2)
初始化.bss段:当堆栈被设置完成后,初始化任务被调用,利用.cinit的记录对.bss断的变量进行初始化;
3)
调用BIOS_init初始化用到的各个模块:BIOS_init调用MOD_init对配置用到的各个模块进行初始化,包括HWI_initHST_initIDL_init等;
4)
处理.pinit表:.pinit表包含一些指向初始化函数的指针,对C++程序,全局对象类的创建也在此时完成;
5)
调用用户程序的main函数:用户main函数可以是C/C++函数或者汇编语言函数,对于汇编函数,使用_main的函数名。由于此时的硬件、软件中断还没有被使能,所以在用户主函数的初始化中需要注意,可以使能单独的中断屏蔽位,但是不能调用类似HWI_enable的接口来使能全局中断;
6)
调用BIOS_start启动DSP/BIOSBIOS_start在用户main函数退出后被调用,它负责使能使用的各个模块并调用MOD_startup启动每个模块。包括CLK_startupPIP_startupSWI_startupHWI_startup等。当TSK管理模块在配置中被使用时,TSK_startup被执行,并且BIOS_start将不会结束返回;
7)
执行idle循环:有两种方式进入idle循环。当TSK管理模块使能时,任务调度器运行的TSK_idle任务调用IDL_loop在其它任务空闲时进入idle循环;当TSK模块未被使用时,BIOS_start调用将返回,并执行IDL_loop进入永久的idle循环,此时硬件和软件中断可以抢占idle循环得到执行。由于idle循环中管理和主机的通信,因此主机和目标机之间的数据交互可以进行了。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
18条回答
gaochy1126
2019-07-14 21:45
SWI(软中断)的优先级在HWI之后,但是比TSK高,可以通过右键菜单中的“Insert SWI”创建一个SWI对象,可以指定SWI内部优先级,从0(最低)到14(最高)。如图 52:

52


1.3.7
TSK
设置在TSK Manager(任务管理器)中可以根据需要创建各种任务,任务间是根据优先级抢占策略来进行调度的,TSK提供有多种优先级别,包括-1(Suspend)、0(Idle)、1(最低)到15(最高)。如图 53:

53
在TSK Manager上右键选择“Insert TSK”并填写任务名称后就可以创建一个任务,在相应任务上右键选择“Properties”可对任务属性进行设置,如图 54:

54
Stack Size(最大堆栈大小)和Priority(优先级)需要根据任务的具体情况进行设置。在
页面,填写任务实体函数名(C函数前面加一个下划线),如图 55:



55


1.3.8
Synchronization
设置DSP/BIOS中任务间的通信和同步可由SEMMBXQUELCK四个模块完成:
?
SEM(信号量):用于任务同步和互斥,有计数功能,根据需要使用;
?
MBX(邮箱):也用于任务同步,可以传递少量数据,根据需要使用;
?
QUE(队列):可实现任务同步和资源的共享,根据需要使用;
?
LCK(资源锁):实现对共享资源的互斥,根据需要使用。
四种同步模块对象都可以通过各自的右键菜单中“Insert …”来创建,并可对其属性作相应的设置。如图 56所示:

56


1.3.9
Input/Output
设置

这里可以设置一些输入/输出相关的高级设置,具体可通过CCS的帮助项来了解。一般不需要进行设置。只有RTDX(实时数据交换),需要根据目标环境的情况对数据交换模式进行一下选择,用来在调试中主机和目标机进行数据交换。可以是仿真器环境的JTAG模式,或者是模拟器环境的Simulator模式。如图 57所示:

一周热门 更多>