嵌入式linux开发 (十七) 内存管理(1) 51内存管理

  • 指令集架构和存储器架构
指令集架构
	51芯片是指集成51内核(51架构,免费的)的芯片
	51内核 ==  51指令集 == 51架构
	独立编址
存储器架构
	冯诺依曼结构(在内存里,程序指令储存和数据储存不分开的存储器结构)
内存分类及硬件对内存的管理
  • 片上内存
内部RAM的低128位(00-7F) // 其中分 1. 寄存器,地址从0000H到001FH,共32字节 . 2. 可按位访问区域,地址从0020H到002FH,共16字节 3. 只能按字节访问区域,地址从0030H到007FH,共80字节
	对应C语言,关键字为data或者idata(二选一)
	比如我定义一个变量,data unsigned char Var = 0;那么,这个 Var变量就是放在内部的低128位Ram中
内部RAM的高128位(80-FF)
	对应C语言,关键字为idata
	比如我定义一个变量,idata unsigned char Var = 0;那么,这个 Var变量就是放在内部的高128位Ram中
特殊功能寄存器(SFR)(80-FF)
	对应C语言,关键字为Sfr
	比如我定义一个变量,Sfr unsigned char Var = 0x90;那么,这个 Var变量就是放在内部的特殊功能寄存器中,这是你对Var操作,相当于操作一个特殊的寄存器,但是小心,不能随便定义Sfr变量,很危险

  • 外扩内存
外部RAM 64K(0000-00FF)
	对应C语言,关键字为pdata或者xdata(二选一)
		第一页(256字节)可以用pdata或xdata修饰(用pdata修饰比较好)
外部RAM 64K(0000-FFFF)
	对应C语言,关键字为xdata
		第一页之外的只能用xdata修饰
  • 非重复地址及访问方式

  • 重复地址及访问方式
片内和片外的地址是重复的(重复地址为00-FF)
例如0x80 地址存在于
	内部RAM的高128位
		用指令,如果是直接寻址,那么访问的就是SFR
	特殊功能寄存器
		如果是R0或者R1间接寻址,就是内部高128位RAM
	外部RAM
		如果是DPTR或者是R0,R1间接寻址,且配合的是MovX指令


软件对内存的管理
内部RAM的低128位(00-7F)
	1. 寄存器,地址从0000H到001FH,共32字节 . 
	2. 可按位访问区域,地址从0020H到002FH,16字节 
	3. 只能按字节访问区域,地址从0030H到007FH,共80字节
软件管理的内存是两部分:第二部分和第三部分,共96字节。由于其他两部分是固定部分,我们不对其进行管理。

管理方式:
	1. 栈
		用于调用C函数
	2. 堆
		用于管理数据

用关键字对变量地址的控制是属于硬件还是软件对内存的管理?
	是硬件对内存的管理
	硬件总要给用户提供一个方法用于寻址一个具体的内存地址.而这个寻址地址的方法被编译器封装为关键字.
	所以说从本质上来说还是硬件给的管理接口.
// 对于栈来说,最核心的部分是
// 1.选定一个地址作为栈底
// 2.将栈底地址赋给SP
------------------------------------对 STARTUPA.51 进行分析
?STACK          SEGMENT   IDATA 		//定义一个数据段,段名:?STACK,位置在 片内ram (00-FF)
RSEG    ?STACK //选择段 ?STACK (有名字的段都是 可重定位的段)
//The RSEG statement selects a relocatable segment that was previously declared using the SEGMENT statement.
DS      1    //在 ?STACK 段 中 申请一个字节
MOV     SP,#?STACK-1 // 设置SP寄存器


栈底指针?STACK 由C51自动生成,栈顶应该是IDATA顶端——0xFF
系统堆栈深度 为 0xFF-(?STACK)[51栈的安全(精确)设置](http://www.eepw.com.cn/article/201611/322595.htm)
STARTUPA.51 中没有对堆的管理,所以说,作为用户可以定制 堆的初始化 及 malloc 及 free
堆的初始化
	一般在 片内ram(00-FF) 或者 片外ram(00-FFFF)
malloc
	常规malloc,可在internet搜索怎么实现堆
free
	常规free
其他 FLASH
程序存储器(包括片内Flash或Rom,也包括片外Flash或Rom)
	C语言用Code定义
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值