当前位置: 首页 > news >正文

朱柏青建盏个人简介南阳seo招聘

朱柏青建盏个人简介,南阳seo招聘,母婴护理服务网站模板,app网络开发公司DSP2812的FLASH虽然很大#xff0c;但是程序在这个FLASH区域运行的速度与在RAM中运行速度相比要慢很多#xff0c;为此通常的做法是将需要快速运行的程序copy到ram中运行#xff0c;通常将中断子程序以及中断中调用的其他子程序copy到RAM中运行#xff0c;对于一些不需要太…   DSP2812的FLASH虽然很大但是程序在这个FLASH区域运行的速度与在RAM中运行速度相比要慢很多为此通常的做法是将需要快速运行的程序copy到ram中运行通常将中断子程序以及中断中调用的其他子程序copy到RAM中运行对于一些不需要太快速度处理的程序可以不管让其在FLASH中运行。          将FLASH中程序copy到RAM中的运行的RAM需要连续地址区域而最大的连续区域仅8k对于一些大软件来说就不够用了扩充可用RAM区间分两个阶段通常例程中cmd文件中的分配并未将单个8k都用起来所以第一个阶段是将可用最大的8k RAM连起来作为一个连续区间如下   RAML0 : origin 0x008000, length 0x002000 /* on-chip RAM block L0 */   同时将与其相邻的另外段RAML01屏蔽如下 // RAML1 : origin 0x00A000, length 0x000000 /* on-chip RAM block L1 */        通过以上修改可以将RAML0调整到最大的8k这样对应着可copy子程序的ramfuncs就是8k ramfuncs : LOAD FLASHD,       RUN RAML0,       LOAD_START(_RamfuncsLoadStart),      LOAD_END(_RamfuncsLoadEnd),      RUN_START(_RamfuncsRunStart),      PAGE 0          第二阶段是将RAMH0的8k也作为可拷贝程序的区间有一些采用了将.test拆分的方法(http://blog.sina.com.cn/s/blog_c82fc4020102wdms.html)个人觉得太麻烦实际上可以再定义一个ramfuncs2采用和 ramfuncs同样的定义方式将RUN RAML0改为RUN RAMH0岂不是更简单 ramfuncs :  LOAD FLASHD,       RUN RAML0,       LOAD_START(_RamfuncsLoadStart),      LOAD_END(_RamfuncsLoadEnd),      RUN_START(_RamfuncsRunStart),      PAGE 0ramfuncs2 : LOAD FLASHB, /* 与RAMH0同属PAGE1区 */      RUN RAMH0,       LOAD_START(_RamfuncsLoadStart2),      LOAD_END(_RamfuncsLoadEnd2),      RUN_START(_RamfuncsRunStart2),      PAGE 1        改成上面的代码后会首先报错找不到RamfuncsLoadStart2、_RamfuncsLoadEnd2和_RamfuncsRunStart2仍采用复制 的方法首先找到_RamfuncsLoadStart定义的位置(DSP281x_GlobalPrototypes.h)改后如下     extern Uint16 RamfuncsLoadStart;    extern Uint16 RamfuncsLoadEnd;    extern Uint16 RamfuncsRunStart;     //以下为新增加    extern Uint16 RamfuncsLoadStart2;    extern Uint16 RamfuncsLoadEnd2;    extern Uint16 RamfuncsRunStart2;   定义好之后就是在主程序中将程序从FLASH中copy到RAM的部分再复制一次如     InitSysCtrl();                   MemCopy(RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart);//将定义在ramfuncs段中的数据从FLASH拷贝到RAM中     MemCopy(RamfuncsLoadStart2, RamfuncsLoadEnd2, RamfuncsRunStart2);//将定义在ramfuncs2段中的数据从FLASH 拷贝到RAM中(新增加)     InitFlash();        经过以上更改后就可以将子程序放到ramfuncs2中了如下     #pragma CODE_SECTION(delay, ramfuncs);    #pragma CODE_SECTION(delay3, ramfuncs);    #pragma CODE_SECTION(SQRT_FPGA, ramfuncs);     #pragma CODE_SECTION(CTR_PRAM_CAL, ramfuncs2); //ramfuncs2为新增加数据段    #pragma CODE_SECTION(CTR_PRAM_CAL3, ramfuncs2);    #pragma CODE_SECTION(CTR_PRAM_CAL4, ramfuncs2);   经过以上的两个步骤可以充分利用DSP2812中总共18k RAM中的16k剩下的2k可用于存储全局变量或者局部变量完整的 cmd文件如下(可直接复制替换) MEMORY{PAGE 0: /* Program Memory *//* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */ ZONE0 : origin 0x002000, length 0x002000 /* XINTF zone 0 */ZONE1 : origin 0x004000, length 0x002000 /* XINTF zone 1 */RAML0 : origin 0x008000, length 0x002000 /* on-chip RAM block L0 */ //0x001000 ZONE2 : origin 0x080000, length 0x080000 /* XINTF zone 2 */ZONE6 : origin 0x100000, length 0x080000 /* XINTF zone 6 */OTP : origin 0x3D7800, length 0x000800 /* on-chip OTP */FLASHJ : origin 0x3D8000, length 0x002000 /* on-chip FLASH */FLASHI : origin 0x3DA000, length 0x002000 /* on-chip FLASH */FLASHH : origin 0x3DC000, length 0x004000 /* on-chip FLASH */FLASHG : origin 0x3E0000, length 0x004000 /* on-chip FLASH */FLASHF : origin 0x3E4000, length 0x004000 /* on-chip FLASH */FLASHE : origin 0x3E8000, length 0x004000 /* on-chip FLASH */FLASHD : origin 0x3EC000, length 0x004000 /* on-chip FLASH */FLASHC : origin 0x3F0000, length 0x004000 /* on-chip FLASH */FLASHA : origin 0x3F6000, length 0x001F80 /* on-chip FLASH */CSM_RSVD : origin 0x3F7F80, length 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */BEGIN : origin 0x3F7FF6, length 0x000002 /* Part of FLASHA. Used for boot to Flash bootloader mode. */CSM_PWL : origin 0x3F7FF8, length 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ /* ZONE7 : origin 0x3FC000, length 0x003FC0 /* XINTF zone 7 available if MP/MCn1 */ ROM : origin 0x3FF000, length 0x000FC0 /* Boot ROM available if MP/MCn0 */RESET : origin 0x3FFFC0, length 0x000002 /* part of boot ROM (MP/MCn0) or XINTF zone 7 (MP/MCn1) */VECTORS : origin 0x3FFFC2, length 0x00003E /* part of boot ROM (MP/MCn0) or XINTF zone 7 (MP/MCn1) */ PAGE 1 : /* Data Memory *//* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation *//* Registers remain on PAGE1 */ RAMM0 : origin 0x000000, length 0x000400 /* on-chip RAM block M0 */RAMM1 : origin 0x000400, length 0x000400 /* on-chip RAM block M1 */// RAML1 : origin 0x00A000, length 0x000000 /* on-chip RAM block L1 */FLASHB : origin 0x3F4000, length 0x002000 /* on-chip FLASH */RAMH0 : origin 0x3F8000, length 0x002000 /* on-chip RAM block H0 */} /* Allocate sections to memory blocks.Note:codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code execution when booting to flashramfuncs user defined section to store functions that will be copied from Flash into RAM*/ SECTIONS{ /* Allocate program areas: */.cinit : FLASHC PAGE 0//FLASHA.pinit : FLASHC, PAGE 0//FLASHA.text : FLASHC PAGE 0//FLASHAcodestart : BEGIN PAGE 0ramfuncs : LOAD FLASHD, RUN RAML0, LOAD_START(_RamfuncsLoadStart),LOAD_END(_RamfuncsLoadEnd),RUN_START(_RamfuncsRunStart),PAGE 0ramfuncs2 : LOAD FLASHB, RUN RAMH0, LOAD_START(_RamfuncsLoadStart2),LOAD_END(_RamfuncsLoadEnd2),RUN_START(_RamfuncsRunStart2),PAGE 1 csmpasswds : CSM_PWL PAGE 0csm_rsvd : CSM_RSVD PAGE 0 /* Allocate uninitalized data sections: */.stack : RAMM0 PAGE 1.ebss : RAMM1 PAGE 1.esysmem : RAMM1 PAGE 1 /* Initalized sections go in Flash *//* For SDFlash to program these, they must be allocated to page 0 */.econst : FLASHC PAGE 0 //FLASHA.switch : FLASHC PAGE 0 //FLASHA /* Allocate IQ math areas: */IQmath : FLASHA PAGE 0 //FLASHC /* Math Code */IQmathTables : ROM PAGE 0, TYPE NOLOAD /* Math Tables In ROM */ /* .reset is a standard section used by the compiler. It contains the */ /* the address of the start of _c_int00 for C Code. /*/* When using the boot ROM this section and the CPU vector *//* table is not needed. Thus the default type is set here to *//* DSECT */ .reset : RESET, PAGE 0, TYPE DSECTvectors : VECTORS PAGE 0, TYPE DSECT }         经过以上改动后新扩展的RAM区实测可用        一些理解LOAD_START(_RamfuncsLoadStart)表示告诉编译器将这一段编译之后产生的起始地址存入RamfuncsLoadStart变量中其他的变量也类似这样在主程序运行时的MemCopy()才会找到相应的数值也就是说LOAD_START(_RamfuncsLoadStart)这句是赋值功能。 转载于:https://www.cnblogs.com/liwei-chengdu/p/9407358.html
http://www.w-s-a.com/news/976701/

相关文章:

  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛
  • 电商网站建设实训报告360站长平台链接提交
  • 个性化网站建设公司个人网站备案类型
  • 腾讯建站模板上海网站开发有限公司
  • 网站和小程序的区别请问做网站怎么赚钱
  • 网站logo设计免费版在线网站开发建设准备工作
  • wordpress多站点 主题南京做网站好的公司
  • 广州 门户seo到底是做什么的
  • 可以登录国外网站吗如何用家用电脑做网站
  • 吉安建站公司wordpress企业
  • 河北住房和城乡建设厅网站6thinkphp做视频网站
  • 遵义网站制作一般需要多少钱深圳全国网站制作哪个好
  • 公众平台网站价格哪个网站做餐饮推广最好
  • 深圳 公司网站设计重庆的网站设计公司价格
  • 网站开发市场分析餐饮平台app有哪些
  • 制作一个收费网站要多少钱开发网站需要什么技术
  • 网站流量统计平台二手域名做网站不收录
  • 蒙古网站后缀mysql8.0 wordpress
  • 免费建立一个网站互联网推广培训
  • WordPress多站点绑定域名深圳住房建设部官方网站
  • 网站建设公司zgkr上海网页网络技术有限公司
  • wordpress附件扩展格式徐州seo关键词
  • wordpress博客站模板织梦网站 联系方式修改
  • 北京城乡建设厅网站重庆网站建设解决方案
  • 网站建设和维护工作内容网站的空间与域名