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

怎么自己做导购网站广州网站建设学习

怎么自己做导购网站,广州网站建设学习,建设旅游网站的目的和意义,吉林网站制作文章目录 前言基础知识ld文件中的段定义ld文件中的符号定义 ld定义copy地址范围启动文件中的定义Copy的使用总结 前言 之前一直不理解在ld文件中加__xxx_ram_start,__xxx_rom_start,__xxx_rom_end这些的作用#xff0c;也不清楚原理。前几天遇到一个内存copy的问题#xff0… 文章目录 前言基础知识ld文件中的段定义ld文件中的符号定义 ld定义copy地址范围启动文件中的定义Copy的使用总结 前言 之前一直不理解在ld文件中加__xxx_ram_start,__xxx_rom_start,__xxx_rom_end这些的作用也不清楚原理。前几天遇到一个内存copy的问题对这些有了更进一步的理解记录一下过程。 基础知识 ld文件中的段定义 具体可以参考The Gnu Linker-3.8.3Output Section Attributes章节下面的定义不是完整的解释仅供参考 section [address][type] : [ALIGN(section_align)] [(flags)] [AT(address)] 其中 section是要定位的输入或输出段的名称如 .text、.data 或用户自定义的段名。 [address]可选参数用于直接指定该段在内存或文件中的起始地址。如果不指定通常由链接器根据其他规则如链接脚本中的其他命令或默认布局确定。 [type]可选参数用来指定段的类型如 PROGBITS、NOLOAD 等。若不指定链接器会根据段的内容自动推断其类型。 ALIGN字节对齐使用。 [(flags)]可选参数包含一组以逗号分隔的标志用于指定段的属性如 ALLOC分配空间、READONLY只读、WRITE可写等。 AT(address)关键部分用于指定该段在加载或运行时应被放置到的绝对地址。这里的 address 是一个具体的内存地址值。 ld文件中的符号定义 ld文件中以“__”开头定义的符号一般会关联到指定的地址。例如 __SysCore_INIT_RAM_START .;在链接脚本上下文中.表示当前位置即当前正在处理的段的起始地址。通过该符号即可记录对应段的起始地址及结束地址。该符号后面可以被源文件使用。c文件中使用时需要加externs文件中可以直接使用 ld定义copy地址范围 了解之前符号的定义我们可以获取需要copy的ram起始地址ram结束地址rom起始地址rom结束地址。最终实际传递到.c或.s的只需要3个地址即可ram起始地址rom起始地址rom结束地址 /* -------------------------------------------------------------------------- */ /* Sections of INIT */ /* -------------------------------------------------------------------------- */ SECTIONS {.SysCore_init ALIGN(4): AT(__POSTBUILD_CONST_END){__SysCore_INIT_RAM_START .;...__SysCore_INIT_RAM_END .;} int_sram_sys__SysCore_INIT_ROM_START __POSTBUILD_CONST_END; __SysCore_INIT_ROM_END __SysCore_INIT_ROM_START (__SysCore_INIT_RAM_END - __SysCore_INIT_RAM_START); } __POSTBUILD_CONST_END是之前记录的一块flash区的结束地址此处表示在其之后作为ram数据的存放地址。 使用AT指令指定该Ram区的数据放到对应flash中。 此处我们得到了__SysCore_INIT_RAM_START__SysCore_INIT_ROM_START__SysCore_INIT_ROM_END 在后面会使用 启动文件中的定义 .section .init_table, a.long 6.long __RAM_CACHEABLE_START.long __ROM_CACHEABLE_START.long __ROM_CACHEABLE_END.long __RAM_NO_CACHEABLE_START.long __ROM_NO_CACHEABLE_START.long __ROM_NO_CACHEABLE_END.long __RAM_SHAREABLE_START.long __ROM_SHAREABLE_START.long __ROM_SHAREABLE_END.long __RAM_INTERRUPT_START.long __ROM_INTERRUPT_START.long __ROM_INTERRUPT_END.long __shared_INIT_RAM_START.long __shared_INIT_ROM_START.long __shared_INIT_ROM_END.long __SysCore_INIT_RAM_START.long __SysCore_INIT_ROM_START.long __SysCore_INIT_ROM_END.section “.init_table”, “a” 定义一个可分配的段init_table 这个段其实在ld文件中定义了放在pflash中 此处相当于往里面写数据实际可以理解为指针或者数组的应用在后面使用的时候其实也是按数组来用的 .long 6 -定义4个字节值为6实际是表示的需要copy的rom-ram的对数此处有6对 后面的定义3个为1组分别为ram起始地址rom起始地址rom结束地址都是在ld文件中定义的 此处定义好的数据在pflash中如下 从0x41BB14到0x41BB5F.存放了6组数据包括其对应的ram起始地址rom起始地址rom结束地址 ld文件中通过 __INIT_TABLE获取首地址 __INIT_TABLE ADDR(.init_table);Copy的使用 在startup.c中对__INIT_TABLE声明并使用 typedef struct {uint8 * ram_start; /*! Start address of section in RAM */uint8 * rom_start; /*! Start address of section in ROM */uint8 * rom_end; /*! End address of section in ROM */ } Sys_CopyLayoutType; typedef struct {uint8 * ram_start; /*! Start address of section in RAM */uint8 * ram_end; /*! End address of section in RAM */ } Sys_ZeroLayoutType;extern uint32 __INIT_TABLE[]; extern uint32 __ZERO_TABLE[]; #if (defined(__ARMCC_VERSION))extern uint32 __VECTOR_RAM; #elseextern uint32 __VECTOR_RAM[]; #endif /******************************************************************************** Code******************************************************************************/ /*FUNCTION************************************************************************ Function Name : init_data_bss* Description : Make necessary initializations for RAM.* - Copy the vector table from ROM to RAM.* - Copy initialized data from ROM to RAM.* - Copy code that should reside in RAM from ROM* - Clear the zero-initialized data section.** Tool Chains:* __GNUC__ : GNU Compiler Collection* __ghs__ : Green Hills ARM Compiler* __ICCARM__ : IAR ARM Compiler* __DCC__ : Wind River Diab Compiler* __ARMCC_VERSION : ARMC Compiler** Implements : init_data_bss_Activity*END**************************************************************************/ #define PLATFORM_START_SEC_CODE #include Platform_MemMap.hvoid init_data_bss(void);void init_data_bss(void) {const Sys_CopyLayoutType * copy_layout;const Sys_ZeroLayoutType * zero_layout;const uint8 * rom;uint8 * ram;uint32 len 0U;uint32 size 0U;uint32 i 0U;uint32 j 0U;const uint32 * initTable_Ptr (uint32 *)__INIT_TABLE;const uint32 * zeroTable_Ptr (uint32*)__ZERO_TABLE;/* Copy initialized table */len *initTable_Ptr;initTable_Ptr;copy_layout (const Sys_CopyLayoutType *)initTable_Ptr;for(i 0; i len; i){rom copy_layout[i].rom_start;ram copy_layout[i].ram_start;size (uint32)copy_layout[i].rom_end - (uint32)copy_layout[i].rom_start;for(j 0UL; j size; j){ram[j] rom[j];}}/* Clear zero table */len *zeroTable_Ptr;zeroTable_Ptr;zero_layout (const Sys_ZeroLayoutType *)zeroTable_Ptr;for(i 0; i len; i){ram zero_layout[i].ram_start;size (uint32)zero_layout[i].ram_end - (uint32)zero_layout[i].ram_start;for(j 0UL; j size; j){ram[j] 0U;}} } #define PLATFORM_STOP_SEC_CODE #include Platform_MemMap.h通过上面的代码实现了rom到ram的拷贝实际只需要在.s中配置对应的参数即可 那这个函数是什么时候被调用的呢 在启动文件中被调用如下所示 _DATA_INIT: #ifndef RAM_DATA_INIT_ON_ALL_CORES/* If this is the primary core, initialize data and bss */ldr r0, 0x40260004ldr r1,[r0]ldr r0, MAIN_COREcmp r1,r0beq _INIT_DATA_BSSb __SYSTEM_INIT #endif_INIT_DATA_BSS:bl init_data_bss 上述启动代码解释如下 1.条件判断检查是否需要在所有核心上进行 RAM 数据初始化。若仅需在主核心上进行初始化即未定义 RAM_DATA_INIT_ON_ALL_CORES则执行后续操作否则直接执行_INIT_DATA_BSS调用init_data_bss函数。 2.核心识别通过读取特定内存地址处的值判断当前运行的核心是否为主核心。 3.主核心处理若当前核心为主核心跳转至 _INIT_DATA_BSS 标签处执行数据和 BSS 初始化。 4.data与 BSS 初始化在 _INIT_DATA_BSS 标签处调用 init_data_bss 函数完成数据段和 BSS 段的初始化工作。 5.非主核心处理或系统初始化若当前核心非主核心或不需要在所有核心上进行数据初始化直接跳转至 __SYSTEM_INIT 标签处继续进行其他系统初始化任务(调用SystemInit函数)。 总结 虽然没学过汇编语言但遇到问题还是得上~慢慢学习吧学无止境
http://www.zqtcl.cn/news/988936/

相关文章:

  • 太原公司网站建立wordpress插件直播
  • 比较有名的diy制作网站做照片视频的网站
  • 河北石家庄建设网站wordpress nginx apache
  • 上海免费网站建设品牌wordpress主题安装失败下载失败
  • 买公司的网站商城系统开发
  • 网页设计国外设计欣赏网站深夜视频在线免费
  • 做网站怎么租用服务器杭州网站建设hzyze
  • .asp 网站北京最新防疫信息
  • 网站上传用什么软件做视频教程114查询
  • 网站小图标素材网站开发需要提供哪些东西
  • 阿里巴巴国际站买家入口百度建网站多少钱
  • 为网站网站做代理怎么判wordpress 调用当前分类名称
  • 多用户网站管理系统定制网站建设与运营案例
  • 毕业设计做的网站抄袭网站开发执行文档
  • 自己做网站都要什么软件网址你懂我意思正能量不用下载
  • 网站内容的创新wordpress美食主题
  • 程序员做游戏还是做网站好雅安移动网站建设
  • wordpress伪静态大学seo诊断网站免费诊断平台
  • 企业网站模板下载软件商务网站规划与建设心得
  • 做网站的像素是多少钱郑州公司网页
  • 北京游戏网站建设特殊符号网站
  • c 网站开发技术代注册公司要多少钱
  • 设计师参考效果图网站如何写网站建设实验结果分析
  • 网站备案 营业执照做企业网站注意些啥
  • 网站建设公司济南网络教学平台昆明理工大学
  • 原网站开发新功能世赛网站开发
  • 做一款小程序需要多少钱凡科的网站做seo比较难
  • 北京网页设计与网站建设最专业的手机网站建设
  • 做一个网站广州网站备案拍照
  • 做平面图片的网站wordpress批量添加连接