2008年12月15日星期一

TI的DSP的动态加载

动态加载是TI CCS提高运行速度的比较有用的工具, 特别是在具有多个互斥功能实现(不同时运行)的时候, 以及从rom/flash中加载应用,以及启动的时候.
动态加载说到底就是预先进行了重新位, 里面所有的跳转和调用语句都是按照运行位置进行编译的, 而不是按照load位置. 这样, 我们可以将程序放在任何地方,甚至硬盘里面, 到时候需要的时候, 只要加载到固定的位置即可.因此, 可以建立一种类似于传统的OS. 只是有很多限制.
这一点和传统的操作系统有不同的地方就是: 传统的操作系统加载的文件一般都有重定位表, 在加载的时候,需要将这个重定位表中每一项所对应的位置地方的偏移量(一般都是绝对偏移)等按照当前实际位置进行修改;对于具有export 函数功能的文件, 可能需要建立一个表格, 甚至修改系统的函数入口地址映射表, 这样别的文件才能找到当前加载的函数.


动态加载有三种方法: 在CCS2.2之后,一般采用cmd文件中定义union和group的方法来建立各个动态加载项的run位置和load位置,以及各自大小. 这种方式需要我们采用DMA的方式进行手动将需要的程序段加载到运行区域. 而在ccs3.0里面,提出了一种更简洁的建立这个run和load位置的方法, 并且提供相应的传输函数. 这些都很类似.
有一点值得指出: 在函数中使用的时候, 必须定义成指针的形式, 否则将找不到定义的符号.

没有评论: