找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 936|回复: 4
打印 上一主题 下一主题
收起左侧

IAR for AVR下变量和常量可以像Keil C51一样使用吗?

[复制链接]
跳转到指定楼层
楼主
我想达到的效果时,常量定义下flash里面,然后可以像变量一样读取。
和下图一样:


然而我移植到AVR里面,却不行。
下图是AVR的测试:


后面发现改变Uart_COM1_WR_NByte_F(uint16_t Len,uint8_t const __flash * Array)这个函数的指针类型,也可以操作常量。
如下图:


这就导致需要写2个函数,一个是变量指针的函数,一个常量指针的函数,keil C51 可以2个函数通用。而IAR for AVR下不行。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:78835 发表于 2022-8-13 10:49 | 只看该作者
查找资料,有人说AVR是哈佛结构,他的FLASH空间和SRAM空间是重叠的,所以2个函数不能通用,要区分开来,之前以为是我写法不对,研究了好久,网上的资料大部分是教你如何定义常量到flash,没有说如何读取常量。反正我没办法了,只能写2个函数区别,比如打印函数,写2个,一个可以打印变量的数据,一个打印常量的数据,有没有大神可以解决这个问题的,让它变的通用。类似keil_C51 , PIC一样通用
回复

使用道具 举报

板凳
ID:401564 发表于 2022-8-13 13:32 | 只看该作者
问题在于"123",不在于什么结构
IAR和Keil对于"123"这个字符串的定义不一样
IAR没有用过,不知道,在Keil中,"123"是被分成"1""2""3"三个ASCII码的
而且,Keil也可以识别"回家"这种中文的字符串,在别的环境,有的是不行
但如果是C语言,那就是一样的,没有什么指令结构这一说的
回复

使用道具 举报

地板
ID:1034262 发表于 2022-8-13 14:44 | 只看该作者
常量读取与变量读取一般不同,51也是不同的。
回复

使用道具 举报

5#
ID:883242 发表于 2022-8-13 21:09 | 只看该作者
我记得AVR是统一编址的啊,应该是AVR可以,51不行。

怎么到你这里就颠倒过来了呢?
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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