一个CPU实际上只能干一个事情,因为CPU有了中断,就有了前后台程序,前台是个死循环,后台是各中断,不停地做中断处理,但是这样能处理的事情还是不多,比如说前台扫描数码管,后来等到用户按键了,再采集一次ADC,让前台扫描数码管.
有了操作系统,就有线程概念,或者叫进程,因为只有一个CPU,不能同时干多个事情,但是CPU可以分时复用,来达到多任务的目的,比如任务1在ADC采样,任务B可以同时发串口,他们在没有资源交叉情况下,可以做到近似的同时运行.操作系统是为了简化各种麻烦操作的,效率牺牲也很低.
引入线程后,就有执行优先级的概念.就看看Windows,也有进程的问题.
这些应该都输入Task下的优先级.在BIOS中优先级是这么划分的.
其中IDLE就是空闲,系统空闲时候还要做一些后台进程啊,比如不断访问微软的某个服务器,看看网络还通不通,然后又各种任务,还有软件中断,比任务重要,比如说某个程序突然要CPU,比如编译某个ELF,就发生一个SWI,但是这时候系统又来了更紧急的,电池快没电了,HWI事务,切换一下,让系统进入一个低功耗模式.然后返回来,继续编译,编译好了,再做其他事情.这就是操作系统.
在使用CCS下的配置,HWI是很容易的,而且推荐使用针对平台的配置方法来配置,这样能获得更多的功能.另外虽然说,系统支持的线程优先级数量也就32(Task)+32(SWI)和数个HWI,但是任务数量没找到严格的限制.比如在SYS/BIOS下,这里可以加HWI,但是我们不用.
这里可以选择针对设备用的HWI的进程.
其实之前用过中断,这里就很简单了,只要这个DSP的一些概念的人应该都知道怎么做的.
其中的屏蔽掩码是我们需要重点关注的内容.掩码是SELF的意思是,除了自己以外,所有中断都可以抢断,其中有一个参数是NONE,NONE的意思就是包括自己,也能抢断自己,这样很危险啊,自己不断重入,可能导致系统挂掉.其中上面有一个注释,关不Arg的,这个就是说的是传入的参数,只是我们平时不用到,所以就不写了,如果你一个ISR程序是兼容多种的ISR的结构的话,那么这个还是需要的.记得写后要写服务函数,可以用Startware的库,非常简单的.
另外关于钩子服务函数,其实也是类似的,就不啰嗦太多了,反正有WIKI嘛,我也只是个WIKI的搬运工.