OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7977|回复: 6

内存sram中c语句的疑问

[复制链接]

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
发表于 2012-10-23 21:00:37 | 显示全部楼层 |阅读模式
__align(4) u8 mem1base[MEM1_MAX_SIZE];             //内部SRAM内存池
__align(4) u8 mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000)));     //外部SRAM内存池
这些c语句是怎么回事?不明白为什么这么写?
谢谢
往事随风!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-23 22:22:50 | 显示全部楼层
看《STM32开发指南》内存管理实验一章。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-10-24 14:57:09 | 显示全部楼层
 //内存管理初始化  
//memx:所属内存块
void mem_init(u8 memx)  
{  
    mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零  
mymemset(mallco_dev.membase[memx], 0,memsize[memx]); //内存池所有数据清零  
mallco_dev.memrdy[memx]=1; //内存管理初始化OK  
}


memtblsize[memx]是内存状态表的大小,其实就是一个个数, 
mymemset(mallco_dev.memmap[memx], 0,memtblsize[memx]*2);//内存状态表数据清零 

那清零的时候:
内存状态表的数据清零为啥要把内存状态表的memtblsize[memx]乘2
往事随风!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-24 18:34:15 | 显示全部楼层
回复【3楼】zsk:
---------------------------------
因为是16位。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-10-24 18:59:03 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
什么是16位的,请明示啊,原子哥

原子哥  我用mini板一直移植战舰的内存管理 ,当管理内存15k的时候就不行,这是因为前面定义的变量太多还是   ---?为什么
往事随风!
回复 支持 反对

使用道具 举报

22

主题

436

帖子

0

精华

高级会员

Rank: 4

积分
541
金钱
541
注册时间
2012-8-6
在线时间
2 小时
 楼主| 发表于 2012-10-24 19:20:35 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
对于内部的内存,memtblsize[memx]=memtblsize[0]=40*1024/32=1280,1280就是表各项有1280个,为什么还要乘于2,
我认为
const u32 memtblsize[1]={MEM1_ALLOC_TABLE_SIZE};没必要定义为u32的,u16的就行了
往事随风!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-10-24 20:41:21 | 显示全部楼层
回复【5楼】zsk:
---------------------------------
1,memmap,是16位的,mymemset,设置是针对8位的,那么1个16位的数据是不是2个8位组成的啊?!!!
2,mini板总共才20K内存,管理15K,用于管理的mem2mapbase,差不多要1K,占了16K,另外你堆栈需要设置一部分内存,加上你其他地方用掉一些,那基本就是全部的内存都用完了,你看编译器编译结果,看看15K的时候,你用了多少内存?
3,memtblsize的类型是const,这2个字节的flash空间,你想省就省吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-28 16:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表