gdf78 发表于 2006-9-17 02:29:47

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

请问 用 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区啊?

谢谢

gdf78 发表于 2006-9-17 14:07:22

咋没人说的?

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

不知道为什么?

okay51 发表于 2006-9-17 14:33:40

我也想知道啊 !

LYStudio 发表于 2006-9-17 17:42:03

const 在SRAM和FLASH中

__flash 仅在FLASH中

gdf78 发表于 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: argument of type "unsigned char __flash *" is incompatible with parameter of type "unsigned char *" E:\avr\iar\main.c 350

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

gdf78 发表于 2006-9-17 20:20:33

请高手们帮我看看,到底要怎么修改呢?

谢谢了

gdf78 发表于 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};

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

pcwinner 发表于 2006-9-18 09:32:57

应该用下边一种定义,我在IAR也遇到过这样的问题

gdf78 发表于 2006-9-18 17:07:25

我改成下面的就OK了

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

joson 发表于 2006-9-18 17:23:10

TO gdf78 :

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

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

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

gdf78 发表于 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中的啊

zjwzcc 发表于 2011-9-29 14:24:56

mark
不错

mmy168 发表于 2012-7-29 12:30:22

我也刚碰到类拟问题。我也想知道???

amwito007 发表于 2012-9-11 16:35:13

const定义的数组能在IAR用?

wps189 发表于 2012-9-27 17:32:57

amwito007 发表于 2012-9-11 16:35 static/image/common/back.gif
const定义的数组能在IAR用?

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

leafzq 发表于 2012-9-28 09:17:11

const 存放到RAM,但不允许更改,是只读的
flash 存放到flash,
页: [1]
查看完整版本: 请问 用 const 和 __flash定义变量有什么区别(在IAR中)?