搜索
bottom↓
回复: 9

在WinAVR中,如何将数组变量指定在某个内存地址上?

[复制链接]

出0入0汤圆

发表于 2009-8-18 15:16:39 | 显示全部楼层 |阅读模式
我需要将一个很大的数组指定在RAM最后部分。当系统初始化时,初始栈位于此。当系统初始完成后,初始栈就不再使用了。
系统初始栈没有显式分配内存,也就是说这块内存是无主内存。如果我用一块数组占领它也是可能的。当然数组不能有初值。

我知道如何将flash变量或者子程序完全地定位于某一个flash地址,但我不知道如何将ram型变量定位于RAM中?

请问如何解决这个问题?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2009-8-18 15:24:27 | 显示全部楼层
如何将数组变量指定在某个内存地址上?
------------------------------------

用IAR,这个问题就不是问题。
GCC应该也行,没试过。

出0入0汤圆

发表于 2009-8-18 16:26:36 | 显示全部楼层
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
象操作端口一样,直接操作该RAM地址 存取数据。

出0入0汤圆

 楼主| 发表于 2009-8-18 16:43:34 | 显示全部楼层
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
象操作端口一样,直接操作该RAM地址 存取数据。

这位兄弟没有明白我的意思。要操作内存很简单,直接给出一个unsigned int变量,强制类型转化成指针就可以用*来存取了。这个没有问题的。

我要解决的问题是这样子的:
系统里我有个自己管理的堆空间Heap(不是编译器提供的heap),这个heap我希望它的内存地址分配到RAM的最高地址部份。一般来说,main()函数的初始化栈是在RAM的最高地址处。初始化时,系统占用堆的高地址部分(这部分地址我在初始化时是用不到的)。当系统完成初始化后,初始化栈就不再使用,于是Heap成为完整的heap。为什么我要定位到最后部分呢,还有一个原因是,有些全局变量(特别当该全局变量有初值时)老是被分配到RAM高地址部分,与初始栈距离很近很危险。这样做呢,我的好处是:我不用考虑初始栈的大小,也不担心全局变量被初始栈覆盖。

出0入0汤圆

 楼主| 发表于 2009-8-18 16:46:20 | 显示全部楼层
我内存实在不够用,有操作系统FreeRTOS

出0入0汤圆

 楼主| 发表于 2009-8-18 16:48:20 | 显示全部楼层
static struct xRTOS_HEAP
{
        unsigned portLONG ulDummy;
        unsigned portCHAR ucHeap[ configTOTAL_HEAP_SIZE ];
} xHeap __attribute__((section("BUF")));

编译时,老是报overlap,不知道怎么回事?

出0入0汤圆

 楼主| 发表于 2009-8-18 16:49:37 | 显示全部楼层
要是能xHeap定位到芯片RAM的最高地址部分,我的问题就解决了

各位好人给我出出主意

出0入0汤圆

发表于 2009-8-18 17:10:55 | 显示全部楼层
计算你的Heap的大小,修改gcc的链接脚本,将节BUF定位到高端内存。

出0入0汤圆

 楼主| 发表于 2009-8-19 12:56:55 | 显示全部楼层
我需要实质性的方法/技巧

出0入0汤圆

发表于 2013-5-9 16:46:05 | 显示全部楼层
请问如何在应用区中将256字节放在RAM中,在BOOT区中使用该256字节?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 01:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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