首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

μC/OS-II在DSP Flash存储器中的问题 02

μC/OS-II在DSP Flash存储器中的问题 02

 2.2方法3:修改数据段的定位方式和库函数
  这种方式除了要修改.const段的装载地址和运行地址外,还要对CCS自带的初始化函数进行修改。但是这种方法是一劳永逸的。
  对.const段的修改如下:

  即采用了装载地址与运行地址分离的方式,将.const载入ROM段,而运行时在RAM区。为了使程序正常运行,在初始化时,需要将.const段的内容从装载地址拷贝到运行地址内。这段程序可以在编译时由编译器自动生成。这还需要对软件所使用的库文件作简单的修改。该库名称即是rts.lib(表示不同类型的DSP,有2xx、25、50等)。修改该库的方法是将源文件从库中提取出来进行修改,编译后再替代原有的文件。具体操作如下:
  a)将库函数rts2xx.lib、源文件rts.src、两个工具函数dspar.exe和dspa.exe找到,放在同意个目录下,打开ms_dos命令窗。
  b)执行DOS命令:

  这句的功能是从rts.src文件中提取出boot.asm文件。这个rts.src即是rts.lib的源文件。在boot.asm文件中能找到CONST_COPY这个标志量,为了实现所需要的功能,它应被赋值为1。对boot.asm文件的编辑完成之后,就可以将其编译生成目标文件,执行语句:

  其中对于不同的DSP需要使用不同的参数,对于240xA来说,应该使用2xx来代替“”。语句执行完后会生成boot.obj文件。再执行语句:

  这时它就替换了库里的同名文件。在编译时编译器就会自动增加拷贝.const段到数据空间的语句。这种方法不必修改程序,代价是牺牲了一定的数据存储空间,时间开销主要出现在初始化中。这应该是最经济实用的方法。
  3结束语
  对常量处理的3种方法中,第方法1和方法3相对较容易实现。其中方法1对于自己编写的少量代码修改起来比较方便,但是如果碰到库函数中用到.const的情况,就需要像第方法3一样提取库函数中的代码,来修改这个库函数,在挖掘机轨迹控制程序中用到atan函数就是这种情况。这种做法对每个这样的函数都要执行同样的操作,显然不是最佳解决办法。
  方法3虽然必须修改cmd文件和库文件,但是它是一劳永逸的。生成相应的库函数和cmd文件以后,对任何带有const的代码都不再需要做任何修改。所以这种方法也是TI推荐的方法,在TI的数据手册TMS320C2x/C2xx/C5x Optimizing C Compiler User’sGuide(SPRU024E)中有对它的说明。
返回列表