搜索
bottom↓
回复: 15

请问 用 const 和 __flash定义变量有什么区别(在IAR中)?

[复制链接]

出0入0汤圆

发表于 2006-9-17 02:29:47 | 显示全部楼层 |阅读模式
请问 用 const 和 __flash定义变量有什么区别(在IAR中)?

如:

const unsigned char huan[]={

0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,

0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,

0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,

0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00};





__flash unsigned char huan[]={

0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,

0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,

0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,

0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00};

是否都定义在 flash区啊?

谢谢

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2006-9-17 14:07:22 | 显示全部楼层
咋没人说的?

我定义的__flash 类型数组,在函数中不能当实参传递,而const却可以

不知道为什么?

出0入0汤圆

发表于 2006-9-17 14:33:40 | 显示全部楼层
我也想知道啊 !

出0入0汤圆

发表于 2006-9-17 17:42:03 | 显示全部楼层
const 在SRAM和FLASH中

__flash 仅在FLASH中

出0入0汤圆

 楼主| 发表于 2006-9-17 20:19:42 | 显示全部楼层
如定义:

const unsigned char tanhao[]={0x00,0x00,0x00,0xf8,0x00,0x00,0x00,

                        0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00};

函数:void byte_disp(unsigned char pag, unsigned char row, const unsigned char *bytek)

则 tanhao 可以作为该函数的第三个参数传递



但__flash unsigned char tanhao[]={0x00,0x00,0x00,0xf8,0x00,0x00,0x00,

                        0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00};

函数:void byte_disp(unsigned char pag, unsigned char row, __flash unsigned char *bytek)

则 tanhao 不能作为该函数的第三个参数传递



错误:Error[Pe167]: argument of type "unsigned char __flash *" is incompatible with parameter of type "unsigned char *" E:\avr\iar\main.c 350

Error[Pe147]: declaration is incompatible with "void byte_disppp(unsigned char, unsigned char, unsigned char *)"  E:\avr\iar\main.c 533

出0入0汤圆

 楼主| 发表于 2006-9-17 20:20:33 | 显示全部楼层
请高手们帮我看看,到底要怎么修改呢?

谢谢了

出0入0汤圆

 楼主| 发表于 2006-9-18 01:23:24 | 显示全部楼层
__flash unsigned char huan[]={

0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,

0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,

0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,

0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00};



居然和

unsigned char __flash huan[]={

0x04,0x34,0xC4,0x04,0xC4,0x3C,0x20,0x10,

0x0F,0xE8,0x08,0x08,0x28,0x18,0x00,0x00,

0x10,0x08,0x06,0x01,0x82,0x8C,0x40,0x30,

0x0C,0x03,0x0C,0x10,0x60,0xC0,0x40,0x00};

不一样的,谁能说说二者区别啊?

出0入0汤圆

发表于 2006-9-18 09:32:57 | 显示全部楼层
应该用下边一种定义,我在IAR也遇到过这样的问题

出0入0汤圆

 楼主| 发表于 2006-9-18 17:07:25 | 显示全部楼层
我改成下面的就OK了

关于IAR的C扩展资料太少了

出0入0汤圆

发表于 2006-9-18 17:23:10 | 显示全部楼层
TO gdf78 :

   你的两种定义都没有问题,是引用出了问题,函数应该这样:

void byte_disp(unsigned char pag, unsigned char row, unsigned char __flash *bytek)

   引用时传递的是flash的地址,该地址在引用函数中必须存放在ram中,才能进行运算。

出0入0汤圆

 楼主| 发表于 2006-9-18 19:21:31 | 显示全部楼层
谢谢 joson!

在定义数组时,

__flash unsigned char m[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00}



unsigned char __flash m[]={0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00}

的意思是否一样的?



而定义函数参数时,是否一定要unsigned char __flash ,而不能写成__flash unsigned char?



另:“该地址在引用函数中必须存放在ram中”,是什么意思呢?

我这么调用是正常的:byte_disp(1,5,m);而m是定义在flash中的啊

出0入0汤圆

发表于 2011-9-29 14:24:56 | 显示全部楼层
mark
不错

出0入0汤圆

发表于 2012-7-29 12:30:22 | 显示全部楼层
我也刚碰到类拟问题。我也想知道???

出0入0汤圆

发表于 2012-9-11 16:35:13 | 显示全部楼层
const定义的数组能在IAR用?

出0入0汤圆

发表于 2012-9-27 17:32:57 | 显示全部楼层
amwito007 发表于 2012-9-11 16:35
const定义的数组能在IAR用?

我也遇到这问题,如果是对结构体初始赋值那就更不行了,一直都没弄懂如何对结构体及嵌套结构体初始赋值!

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-6-10 23:51

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

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