做网站的企业wordpress 文章置顶显示

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

做网站的企业,wordpress 文章置顶显示,淘宝客怎么做自己网站推广,网站从设计到制作文章目录 前言 背景介绍 Memory映射 RAM ROM 外设Register Memory分配 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见《… 文章目录 前言 背景介绍 Memory映射 RAM ROM 外设Register Memory分配 应用实例 总结 参考资料 前言 见《【研发日记】嵌入式处理器技能解锁(一)——多任务异步执行调度的三种方法》 见《【研发日记】嵌入式处理器技能解锁(二)——TI C2000 DSP的SCI(串口)通信》 见《【研发日记】嵌入式处理器技能解锁(三)——TI C2000 DSP的C28x内核》 背景介绍 本文要讲的Memory是TI C2000 DSP的片上存储器。其在芯片的整体架构中所处的位置如下 Tips除了上图中的ROM和RAM另外的外设寄存器从广义的角度讲也是Memory的一部分。 Memory映射 存储器映射表描述了存储器中各个组成部分的地址用于读写寻址如下图所示 RAM TI C2000 DSP的RAM由三个部分组成Mx RAM、LSx RAM和GSx RAM。 M0 RAM和M1 RAM总计4KB是两个具有专用功能的RAM模块与CPU紧密耦合只有CPU可以访问软件开发人员一般不用关注。 LS0-7 RAM总计32KB是本地共享RAMLocal shared RAMCPU、CLA和BGCRC可访问可以用作软件的堆栈等通用功能需要软件开发人员关注。 GS0-3 RAM总计32KB是全局共享RAMGlobal shared RAM除了CPU、CLA和BGCRC可访问另外HIC和DMA也都具有对这些存储器的完全读写访问权限比LSx RAM具有更广泛的用途可供软件开发人员更灵活地使用。 Tips另外的几种消息RAM是特定模块的专用RAM在对应功能启用时用于共享数据。 ROM TI C2000 DSP的ROM也是由三个部分组成Boot Rom、Secure Rom和Flash Bankx。 Boot Rom总计64KB里边中存放着芯片厂家制定的一些代码芯片每次复位后都要先执行这里的代码然后才开始执行软件开发人员编译的代码。Boot ROM中代码的功能是芯片层面的初始化不是main函数中的初始化去执行一些类似于clear RAM这样的任务软件开发人员只需要知道这部分的存在即可一般不需要特别关注。 Secure Rom总计48KB是一些具有更高权限的存储区域CPU和外设通过常规的方式无法对其读写需要使用特殊的API和Password才能访问。Secure ROM中是芯片厂家为用户提供的特定功能function如果没有启用这些功能一般也不需要关注。 Flash Bank 0-2总计3*128KB。其中每个组Bank又由16个扇区Selector组成总计16*8KB。每个扇区Selector又由64个页Page组成总计64*128Byte。是通用型存储空间可以存放软件开发人员的Code和Bytes。在程序运行时CPU可以直接在上面寻址并抓取指令和Bytes。 Tips另外还有一种OTP(one-time programmable) ROM它只能写入一次不能擦除。一般用于存放芯片ID或者ECU ID以及一些Configure和其他出厂信息。 外设Register 外设Peripheral寄存器是DSP各个外设子系统例如ADC的存储单元其特点时固定地址存储固定数据。DSP的外设子系统非常多功能各不相同。每个外设也都有很多寄存器主要用于Configure外设的模式和反馈外设的Status/Result。外设ADCAnalog to Digital Converter的部分寄存器示例如下 Tips外设寄存器的用法与各个外设的功能高度相关后面用到哪个外设时再针对性研究。 Memory分配 软件开发人员在使用TI C2000 DSP芯片时Memory主要被分配成如下几个部分 Stack栈包含临时创建的局部变量、函数调用入口的参数、函数返回值、const修饰的局部常量。 Heap堆用于存放程序运行中被软件开发人员动态分布的内存段可增可减一般用malloc等函数实现动态分布内存。用malloc函数分布的内存必须用free进行内存释放否则会造成Memory溢出。 Global/Static这两种变量都具有穿越代码运行周期的能力只是作用范围不同所以需要在Memory中分配固定的地址。 Zi-data表示未初始化赋值Zero initialized的全局变量和Static修饰的变量它是直接在RAM中分配一个固定地址。 CodeInstruction字面指软件开发人员写的代码但是在Memory中已经是编译后的东西它被划分为指令和数据两部分上图中的Code准确讲应该叫指令Instruction。 Ro-data字面指只能读取的数据即程序中定义的常量例如#define 宏定义、用const修饰过变量等。这些常量是一直在ROM中的芯片运行起来后CPU直接从ROM中读取。 Rw-data字面指可读可写的数据它实际上包括了堆、栈和全局变量等。这些数据又分为已被初始化赋值的和未被初始化赋值的。但是在Memory分配图中为了便于描述把Rw-data理解为已被初始化的即可。ROM中的Rw-data从烧录文件中而来在Memory中是固定地址和固定Value的。芯片启动时会被移到RAM中使用芯片运行起来之后Rw-data就是动态变化的了堆栈的地址和Value都会实时变化Global/Static只有Value会变化。 应用实例 这里展示一个示例Demo代码直接用代码中的注释进行说明。 Demo.c File #include xxxx.h uint16 Val1 1; //Val1是Global变量并且已经初始化了在RAM的Rw-data区域有一个固定地址。但是为了芯片下电时不丢失所以在ROM的Rw-data区域中也有一个地址来存放。Val1在ROM中的Value一直都是1但是在RAM中的Value会随着代码的运行而变化。 static uint16 Val2 2; // Val2也是已初始化的Static变量跟Val1的Memory分配是一样的Rw-data区域。这里的static修饰代表它的作用范围有限。 uint16 Val3; //Val3也是Global变量但是未初始化所以分配在RAM中Zi-data区域的一个固定地址。 const uint16 Val4 4; //Val4被const修饰了是一个常量分配在ROM的Ro-data区域。uint16 DemoFcn(uint16 Num) //Num是函数入口的参数分配在Stack区域 {uint16 Var5 5; //Var5是局部变量只在DemoFcn()函数调用时临时使用所以分配在RAM Stack区域的一个随机地址DemoFcn()函数退出时就会把这个Memory释放掉。因为Var5有一个初始值所以在ROM栈区也会分配一个空间。static uint16 Var6 6; // Var6被static修饰代表它的Value要穿越芯片运行周期即下一次读取Var6时它前一次写入的值仍能被读到所以它被非标配在RAM中Rw-data区域的固定地址上。const uint16 Var7 7; // Var7被const修饰所以是常量但是它只在DemoFcn()函数中短暂使用所以是局部常量被分配在RAM中Rw-data的Stack区域。void *p;p malloc(8); //动态分配一个size 8的Memoryp是这片Memory区域的起始地址它是分配在RAM Heap区域的一个随机地址。p 1; //使用这片区域(p1) 2; //使用这片区域free(p); //释放这片区域return (Num*p); //函数的返回值存放在RAM Stack区域 }void main() {uint16 Var8 0; //Var8是局部变量分配在RAM Stack区域的一个随机地址。Var8 DemoFcn (9); //存放在RAM Stack区域的函数返回值赋给Var8。 }Tips除了上述的Data还有内部的赋值、加法等运算会被编译常指令Instruction然后分配在ROM的Code区域。 总结 以上就是本人在研发中使用嵌入式处理器的Memory时一些个人理解和分析的总结主要介绍了TI C2000 DSP Memory的工作原理展示了具体的使用方法并对比分析了它的特点和适用场景。 后续还会分享另外几个最近解锁的嵌入式处理器新技能欢迎评论区留言、点赞、收藏和关注这些鼓励和支持都将成文本人持续分享的动力。 另外上述例程使用的Demo工程可以到笔者的主页查找和下载。 参考资料 TMS320F28003x Real-Time Microcontrollers datasheet.pdf 版权声明原创文章转载和引用请注明出处和链接侵权必究