查看: 4178|回复: 5

用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

[复制链接]

该用户从未签到

4

主题

17

帖子

0

注册会员

Rank: 2

积分
59
最后登录
2023-9-18
发表于 2010-11-24 19:06:09 | 显示全部楼层 |阅读模式
我用MC9RS08KA8,资料里是254 byte random-access memory (RAM),我数了数,一共才用了40个全局变量,不增加变量,编译正常,但当我再增加1个变量时,编译不过去了,错误如下:
L1128:Cutting value _Range beg data member from 0x100 to 0x0
Link Error: L1907: Fixup overflow in ADCAndEXE,to _SysFla3 type 1, at offset 0x8D
Link Error: L1907: Fixup overflow in ADCAndEXE,to _SysFla3 type 1, at offset 0xFD
Link Error : Link failed
这是为什么呀?
是不是RAM区用完了?因为我程序里面有几个长整型算法,但算法里的都不是全局变量呀。还有ROM里有几张大表,占4KROM吧,但跟RAM没关系吧。
MAP文件里如下:
Summary of section sizes per section type:
READ_ONLY (R):        1A14 (dec:     6676)
READ_WRITE (R/W):       90 (dec:      144)
NO_INIT (N/I):          4B (dec:       75)
这个是不是表明,RAM已经占用了144+75=219个RAM??但MCU里有254个RAM呀?谢谢帮忙呀。
ADCAndEXE是我的一个函数,但我新增的变量不在这个函数里,在主循环里也不行。
回复

使用道具 举报

该用户从未签到

27

主题

418

帖子

0

新手上路

Rank: 1

积分
228
最后登录
1970-1-1
发表于 2010-11-25 09:06:14 | 显示全部楼层

RE:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

你的堆栈占用了一定的空间,试着在修改下堆栈空间的大小
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-11-25 10:19:18 | 显示全部楼层

    RE:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

    还有就是其他函数里面定义的局部变量。
    该会员没有填写今日想说内容.

    该用户从未签到

    4

    主题

    17

    帖子

    0

    注册会员

    Rank: 2

    积分
    59
    最后登录
    2023-9-18
     楼主| 发表于 2010-11-26 18:19:59 | 显示全部楼层

    回复:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

    这个单片机没有中断,所以PRM文件中
    STACKSIZE 0x00 /* no stack for RS08 */
    剩下的是不是就是我的函数里面的长整形算法。下面是其中一个函数的例子(为方便看,我删了部分与运算无用的程序),我用的局部变量并不多呀,难道一个长整形运算占将近200个变量吧。
    void getPotAD(void){
        byte tempData,tempByte,tempMinV;
        word tempWord;
        dword tempDword;
        byte PWMAD;
       
        ADCSC1_ADCH = POT_ADCHANNEL;      //打开通道并开始转换
       
        while(ADCSC1_COCO==0){;}  //等待(加快采样速度,牺牲其它程序时间)9.6uS(转换时间)
        PotCurrAD =  ADCRL;   //电位器当前位置AD值
        //计算出POT当前角度和行程输出PWMAD
            //计算POT当前角度PotCurrAngle和当前行程--start--
        tempData = tempData-EE_POTMinAD;
        tempByte = EE_POTMaxAD-EE_POTMinAD;
        tempDword = (dword)tempData*EE_POTMaxAngle/tempByte;
        PotCurrAngle = (word)tempDword;    //得出POT转过的角度
        CurrTravelx10 = LinTanPotDegreeToTravelx10[PotCurrAngle];   //查Tan表,得到当前行程
        //--over--以上耗时CPU-Cycles: 约14512 cycles
        if(EquPercent_F){   //----------等百设置----------
            //计算行程mm的百分比--start--
            tempDword = (dword)CurrTravelx10*5000;
            tempDword /= EE_MaxTravelx10;
            EquPerTravelRatex500 = (word)tempDword;
            EquPerTravelRatex500 = (EquPerTravelRatex500+5)/10; //四舍五入
            //从Per_EquPertoPer_VinAD表查出线性电压开度%x255
            EPtoLinVinADRatex255 = Per_EquPertoPer_VinAD[EquPerTravelRatex500];
            //计算出POT当前行程时PWM-AD值
            tempData = PWM_MAXAD-tempMinV;
            tempWord = (word)EPtoLinVinADRatex255*tempData;
            tempWord /= 255;
            PWMAD = (byte)tempWord;
            PWMAD += tempMinV;
            //--over--以上耗时CPU-Cycles: 约16799 cycles
        } 
        //PWM脉冲输出
        TPMC0V = PWMAD ;
    }

    该用户从未签到

    4

    主题

    17

    帖子

    0

    注册会员

    Rank: 2

    积分
    59
    最后登录
    2023-9-18
     楼主| 发表于 2010-11-26 18:24:49 | 显示全部楼层

    RE:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

    还有我上面提到的
    MAP文件里如下:
    Summary of section sizes per section type:
    READ_ONLY (R):        1A14 (dec:     6676)
    READ_WRITE (R/W):       90 (dec:      144)
    NO_INIT (N/I):          4B (dec:       75)
    是不是表明,全部变量占用了RAM  144+75=219个RAM??
  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2010-11-30 11:42:38 | 显示全部楼层

    RE:用MC9RS08KA8,我一共才40个变量,怎么不让再加了呢?

    是的。
    该会员没有填写今日想说内容.
    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-3 23:36 , Processed in 0.090881 second(s), 23 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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