ARMVSAVR 发表于 2014-7-21 10:52:32

用ATMEGA128无意间发现一个问题!

本帖最后由 ARMVSAVR 于 2014-7-21 11:52 编辑

                用ATMEGA128无意间发现一个问题!
                用PF7口作为输入,低有效,当按键按下,直到按键松开,此次按键才有效!我在主函数里面定义全局变量a,当然还定义了其他的变量!
      问题:当我定义了这个变量,这个语句:(PINF&0x80)==0x80)再也不能执行!当我把这个变量a定义取消!这个语句:(PINF&0x80)==0x80)可以执行!
   不知道大家有没有遇到过!我用128的PF口前几年也遇到过类似问题!

原来是定义的数组超出了内部内存的空间:哪位大侠告诉我ICCAVR如何将常量数组放置到FLASH!

我的结构加了const,但是数据还是分配在内存里面!
const unsigned char dian[] =            // ASCII
{
        0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,// -:-
        0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,
};

PS:问题解决!
源自AMOBBS网友:定义程const然后在iccavr里设置勾选“Treat‘const’as‘——flash’”

dlmaowf 发表于 2014-7-21 11:02:50

是不是数组太大了?超出RAM范围了?

ARMVSAVR 发表于 2014-7-21 11:38:03

dlmaowf 发表于 2014-7-21 11:02
是不是数组太大了?超出RAM范围了?

果然是的!
我用的12864的点阵LCD,取模的数据很多!消耗完啦4K的内存!
请教一下如何在数组数据直接放到FLASH,我用的是
const ucharshuzi[] =            // ASCII
{
        0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,// -0-
        0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,

        0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,// -1-
        0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

        0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,// -2-
        0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,
}
发现这个不行!应该没有把数组放置到FLASH!
编译器是ICCAVR7.22,版本!
怀念KEIL编译器,code一下就OK!

dlmaowf 发表于 2014-7-21 11:40:44

我也只会51和Keil,AVR的不会玩

ARMVSAVR 发表于 2014-7-21 11:44:17

dlmaowf 发表于 2014-7-21 11:40
我也只会51和Keil,AVR的不会玩

坐等大拿!{:smile:}

ARMVSAVR 发表于 2014-7-21 11:55:26

受教啦!以前没有遇到能耗完内部RAM的代码!

fjf02386104 发表于 2014-7-21 12:11:22

数据类型定义成flash 就可以了,CVAVR是这样可以的,ICC不清楚了

HeP028 发表于 2014-7-21 14:46:13

__flash好像是这样,前面不是1缸就是2杠
页: [1]
查看完整版本: 用ATMEGA128无意间发现一个问题!