搜索
bottom↓
回复: 5

关于GCC编译器对FLASH的操作【恢复】

[复制链接]

出0入0汤圆

发表于 2008-9-17 11:52:51 | 显示全部楼层 |阅读模式
在看到芯艺的<<AVR单片机GCC程序设计>>里面对

2.4 在程序中访问FLASH 程序存储器

里面介绍了三个函数

pgm_read_byte(prog_void * addr)

pgm_read-word(prg_void *addr)

pgm_read_dword(prg_void* addr)

用于对在FLASH里面数据进行读取操作。

如果我用

PutCharSerial(“你好!!!");//往串口发送数据串

“你好!!!”也是存在FLASH里面,烧写的时候是直接把“你好!!!”写在FLASH里面,执行

PutCharSerial(“你好!!!");//

是直接从FLASH里面读出来,通过串口发送到PC机。

而芯艺的书上,关于在程序中访问FLASH程序存储器。是一定要用上面提供的三个函数,才能从FLASH里面读取数据。

这不是互相矛盾吗?

既然PutCharSerial(“你好!!!");//可以直接从FLASH里面读取数据,提供的三个读FLASH函数还有什么意义吗?

出0入0汤圆

发表于 2008-9-17 16:58:00 | 显示全部楼层
PutCharSerial(“你好!!!");//往串口发送数据串

这个发送的数据只是ASC码,并没有读到flash,最简单的测试是直接发送一个变量,变量定义在FALSH中,你再操作看看撒

出0入0汤圆

发表于 2008-9-17 16:42:44 | 显示全部楼层
PutCharSerial(“你好!!!"); 中的"你好!!!"同时存在于FLASH与RAM中,不是直接从FLASH里面读出来,而是从FLASH加载至RAM中,再发送到串口.





本贴被 my2jia 编辑过,最后修改时间:2008-09-17,16:44:17.

出0入0汤圆

 楼主| 发表于 2008-9-17 16:37:48 | 显示全部楼层
人气真低啊,都没人回复,算了,请版主删了吧。

出0入0汤圆

发表于 2008-9-18 09:14:17 | 显示全部楼层
建议楼主去查下程序是如何编译的链接的。 什么是text段,什么是已初始化段,什么是未初始化段。



AVR的flash和ram并不像ARM等32位处理器那样统一编址,这就导致了读两块空间必须使用不同的指令。所以程序中是需要你自己去制定改放在哪。

出0入0汤圆

 楼主| 发表于 2008-9-18 08:59:02 | 显示全部楼层
我现在是这样考虑的,对不对请大家自己判断。

1、PutCharSerial(“你好!!!");//往串口发送数据串

2、const char flash_str1[] PROGMEM= "大家好!!!"

对这两种方式,在生成HEX文件并烧写进FLASH里面的时候,都是存在FLASH里面的。

第一种方法是在执行程序的时候,编译器会用自己生成一段程序把FLASH里面的

“你好!!!”拷贝到RAM里面,然后再发送到串口。

具体生成的这一段程序在拷贝过程中有没有调用上述三个读FLASH程序,我不能确定。

第二种方法是直接从FLASH里面读取数据发送到串口,中间不需要占用RAM。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-9 03:08

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

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