avr flash地址问题

2019-03-24 20:29发布

本帖最后由 大头BB 于 2014-8-1 15:11 编辑

开发环境:avr studio 6    attiny841    8Kflash      地址0x0000-0x0fff
1.sudio 6 烧写flash时候地址是怎么分配的,是从0x0000开始按顺序编满为止,还是说studio 6随机分配地址空间。
2.在studio 6中如何查看ram和flash空间大小
3.如何在程序中定义一个地址区间,譬如说,定义一个从地址0x0001起始的100个byte的数组a[],只允许这个数组访问,如何实现。
我计划是在程序中把一些参数值写入到flash做掉电保存,eeprom不够用,现在可以写入也可以读取,但是我不知道写入的地址空间是否为flash的应用程序空间,然后把程序代码给擦除了。

自己找到方法来,转载过来
一.您可通过如下步骤来实现,指定程序代码空间在flash中的位置。
1.在Atmel Studio 6.1中打开目标
2.在Solution Explorer窗口选中项目文件名,右键单击Property;
3.选中Toolchain->AVR/GNU Linker->Memory Settings;
4.在该对话框FLASH segment窗口中,选中Add Item;
5.在空行中输入:.text=0x500 其中0x500为期望的程序空间起始地址,注意目标地址(0x1000)被除2的关系;
6.保存设置并对工程进行Build Solution;
7.打开Solution Explorer->Output Files->**.lss文件(**表示项目名)在“LMA列与.text行”,可查看起始地址是否和设定吻合。
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
chunyang
2019-03-25 01:02
程序的地址如无指定,编译程序会从0起始分配。器件的RAM和ROM使用率问题可以从编译后产生的列表文件中看到,集成环境的话应该有指示区或相关查询指令,好好研究一下软件就应该明白。
如果你要在程序存储器内存储数据,如果该数据是常数,那么在程序里直接定义即可,如果是需要IAP存储的数据,那么首先要看你用的MCU是否支持IAP以及实现IAP的方式,然后才能确定能否这么做以及怎么做。就AVR而言,在程序存储器中存储变量是无法直接实现的。

一周热门 更多>