博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
将程序从Flash搬运到RAM中运行总结(转载)
阅读量:4452 次
发布时间:2019-06-07

本文共 1861 字,大约阅读时间需要 6 分钟。

 
  1. 在CMD文件中配置相应的段,如
ramfuncs            : LOAD = FLASHJ,  PAGE = 0
                    RUN = RAMH0,  PAGE = 0
                    LOAD_START(_RamfuncsLoadStart),
                    LOAD_END(_RamfuncsLoadEnd),
                    RUN_START(_RamfuncsRunStart)
secureRamFuncs    :   LOAD = FLASHP,   PAGE = 0          /* Used by InitFlash() in SysCtrl.c */
                         RUN =  RAMH0 ,   PAGE = 0
                         LOAD_START(_secureRamFuncs_loadstart),
                         LOAD_END(_secureRamFuncs_loadend),
                         RUN_START(_secureRamFuncs_runstart)
  1. 定义全局变量,方便主程序中调用MemCopy函数;
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
extern Uint16 secureRamFuncs_runstart;
extern Uint16 secureRamFuncs_loadstart;
extern Uint16 secureRamFuncs_loadend;
在用户程序中,使用pragma将函数映射到上一步中定义的段中;
#pragma CODE_SECTION(eva_timer1_isr, "
ramfuncs");
#pragma CODE_SECTION(eva_timer2_isr, "
ramfuncs");
#pragma CODE_SECTION(evb_timer3_isr, "
ramfuncs");
把要初始化的
flash控制寄存器函数定义到段secureRamFuncs
#pragma CODE_SECTION(InitFlash, "secureRamFuncs");                   //该部分在DSP2833x_SysCtrl.c文件中,TI官方的定义为#pragma CODE_SECTION(InitFlash, "ramfuncs")。因此如果运行InitFlash而不调用MemCopy时,应该将该句注释掉;调用MemCopy时,该句注释掉表示InitFlash在Flash中运行,不注释掉表示程序在RAM中运行。
void InitFlash(void);
// 声明中断函数
interrupt void eva_timer1_isr(void);
interrupt void eva_timer2_isr(void);
interrupt void evb_timer3_isr(void);
  1. 在主程序中调用MemCopy(memcpy)函数和InitFlash函数(前者用于拷贝代码,后者用于优化flash运行),注意这两个函数在InitSysCtrl后调用比较合理
InitSysCtrl();
memcpy(&secureRamFuncs_runstart,&secureRamFuncs_loadstart, &secureRamFuncs_loadend - &secureRamFuncs_loadstart);            //先拷贝InitFlash函数
InitFlash();                                         //调用InitFlash函数,优化flash运行
memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,&RamfuncsLoadEnd- RamfuncsLoadStart);
注意:memcpy(&RamfuncsRunStart,&RamfuncsLoadStart,&RamfuncsLoadEnd- RamfuncsLoadStart)位于RTS library中;使用MemCopy函数时,函数的原型为void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);该函数位于DSP2833x_MemCopy.c中。使用两个函数都可以,但是需要注意的是变量要对应。
参考资料

转载于:https://www.cnblogs.com/kwang-cai/articles/5620411.html

你可能感兴趣的文章
接口,lambda表达式与内部类(二)
查看>>
Phabricator是什么,代码审查工具
查看>>
Java虚拟机类加载机制
查看>>
UITextView,UIWebView 直接显示html代码
查看>>
DirectX:函数可以连接任意两个filter 分类: Direct...
查看>>
Android APP开发入门教程-Button 分类: JAVA ...
查看>>
WustOJ 1575 Gingers and Mints(快速幂 + dfs )
查看>>
js中,for循环里面放ajax,ajax访问不到变量以及每次循环获取不到数据问题总结...
查看>>
算法:求从1到n这n个整数的十进制表示中1出现的次数-- python 实现
查看>>
CSU 1160 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示
查看>>
LintCode 58: Compare Strings
查看>>
[Unity插件]Lua行为树(五):装饰节点Repeater
查看>>
顺序表、链表、栈和队列
查看>>
Linux第二天(Linux常用命令2)
查看>>
MySql知识体系
查看>>
JIRA中的标记语言的语法参考
查看>>
hdu 6318 Swaps and Inversions(归并排序)
查看>>
用css在IE7、8上实现圆角
查看>>
三维绿幕标定与跟踪
查看>>
android ProgressBar自定义半圆形进度条
查看>>