本帖最后由 bjlny 于 2012-12-9 22:39 编辑
各位好:
我现在在做低功耗相关,如果要让系统处于低功耗状态,除了要关闭液晶等外设,还要将ARM处于低功耗,DDR处于自刷新,但是在DDR自刷新之前,程序必须运行在DDR之外,因为按照厂家的说法,这时DDR就已经不能运行程序了(我的理解是DDR自刷新情况下可以执行,但是只要执行程序那么就不会进入自刷新,也就不能休眠DDR,所以要换地方让CPU取指)。目前计划是在DDR自刷新之前将程序运行在内部32K的SRAM上,这样在DDR自刷新之后还可以继续执行将ARM休眠之类的操作。
这样问题就来了:如何让一个程序在指定地址运行?
目前常规的有几种办法:1.函数指针跳转2.编写汇编指令
1.函数指针跳转时,我如何编写一个函数,指定他的运行地址是在我要的片内SRAM上,即0地址开始的32K空间内?
2.如果是采用C嵌套汇编,那么如何指定运行地址?在linux环境下是否采用lds文件指定运行地址?那么如果可以用Lds文件指定,那么在执行这段函数之前是否还要进行搬运?如何搬运?
请各位讨论下,如果能贴出来代码,那么更好,这是个很实际的问题,也很考验对程序执行的理解。
|