找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13707|回復(fù): 8
收起左側(cè)

keil5 仿真出現(xiàn)ERROR L121:IMPROPER FIXUP如何解決?

[復(fù)制鏈接]
ID:307417 發(fā)表于 2018-4-16 14:09 | 顯示全部樓層 |閱讀模式
如題,用keil5仿真出現(xiàn)了ERROR L121:IMPROPER FIXUP的問題,第一次遇到,那個code也已經(jīng)是large了,不知道怎么解決。
回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2018-4-16 15:44 | 顯示全部樓層
源碼呢?
回復(fù)

使用道具 舉報

ID:307417 發(fā)表于 2018-5-9 19:07 | 顯示全部樓層

不好意思,才看到,真的不好意思。我把報錯部分發(fā)上來。
#include "keyboard.h"
extern bit bdata flag_key;
//按鍵掃描函數(shù) :   
//功能;只掃描一個按鍵,按鍵為號小優(yōu)先  
//返回鍵值:
//         1    2    3    10           //10:清零重量,兼去皮功能       
//         4    5    6    11           //11:清除單價
//         7    8    9    12           //12:顯示數(shù)值偏大調(diào)節(jié)按鍵  
//         14   0    15   13           //14:無功能(用于擴展)15:小數(shù)點   13:顯示數(shù)值偏小調(diào)節(jié)按鍵

unsigned char Getkeyboard(void)
{
    unsigned char number = 0;
    unsigned char i;
        //行輸入低電平
    ROW1=ROW2=ROW3=ROW4=0;
        //如果列輸出不全為高,則說明有鍵按下
        if (((COL1!=1)||(COL2!=1)||(COL3!=1)||(COL4!=1))&&flag_key==1)
        {
           //輸入0111
           flag_key=0;
           ROW1=0;
           ROW2=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 1;           // 7
           else if (COL2==0) return 2;        //         8
           else if (COL3==0) return 3;         //        9
           else if (COL4==0) return 10;         //         10
           //輸入1011
           ROW2=0;
           ROW1=ROW3=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 4;          //4
           else if (COL2==0) return 5; //  5
           else if (COL3==0) return 6;        // 6
           else if (COL4==0) return 11;         //        11
           //輸入1101
           ROW3=0;
           ROW1=ROW2=ROW4=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 7;  //1
           else if (COL2==0) return 8;          // 2
           else if (COL3==0) return 9;          //   3
           else if (COL4==0) return 12;          //   12
           //輸入0111
           ROW4=0;
           ROW1=ROW2=ROW3=1;
           for (i=0;i<20;i++);
           if (COL1==0) return 14;
           else if (COL2==0) return 0;
           else if (COL3==0) return 15;
           else if (COL4==0) return 13;
           //沒有檢測到列低電平
           return 99;
        }
        else if(COL1==1&&COL2==1&&COL3==1&&COL4==1)
        flag_key=1;
        return 99;
}
回復(fù)

使用道具 舉報

ID:326246 發(fā)表于 2018-5-9 20:10 | 顯示全部樓層
I/O口有問題吧,重新拔插一下
回復(fù)

使用道具 舉報

ID:307417 發(fā)表于 2018-5-10 09:52 | 顯示全部樓層
Liferme 發(fā)表于 2018-5-9 20:10
I/O口有問題吧,重新拔插一下

是在keil里不能編譯成功,我同時還試了別的程序,正常的。
回復(fù)

使用道具 舉報

ID:708082 發(fā)表于 2020-4-3 10:26 | 顯示全部樓層
樓主解決了嘛 遇到同樣問題
回復(fù)

使用道具 舉報

ID:604033 發(fā)表于 2020-4-13 11:46 | 顯示全部樓層
bdata 問題 keil5 不認bdata

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:328014 發(fā)表于 2021-1-10 23:44 | 顯示全部樓層
我今天也遇到了同樣的問題,IMPROPER FIXUP,研究了半天終于解決了,原來這個問題是因為Keil4和Keil5不支持bdata的問題導(dǎo)致的,所以退回Keil2,新建工程,加入文件,重新編譯就OK了,你這個上面也有bdata所以也可以用我的辦法來成功解決的.

參考資料:
The variables ibase and bary are bit-addressable. Therefore, the individual bits of these variables may be directly accessed and modified. Use the sbit keyword to declare new variables that access the bits of bdata variables. For example:

sbit mybit0 = ibase ^ 0;      /* bit 0 of ibase */
sbit mybit15 = ibase ^ 15;    /* bit 15 of ibase */

sbit Ary07 = bary[0] ^ 7;     /* bit 7 of bary[0] */
sbit Ary37 = bary[3] ^ 7;     /* bit 7 of bary[3] */
The above example represents declarations, not assignments to the bits of the ibase and bary bdata variables. The expression following the carat symbol ('^') in the example specifies the position of the bit to access with this declaration. This expression must be a constant value.

The range depends on the type of the base variable included in the declaration. The range is:

0-7 for char and unsigned char, 0-15 for int, unsigned int,
short, and unsigned short, and
0-31 for long and unsigned long.

并沒有定義bit類型的bdata。因此定義成char。

OFDM_PHY_ext   char     bdata   bLib_RxPlcEnd;
OFDM_PHY_ext   char     bdata  RX_BUSY;
OFDM_PHY_ext   char     bdata  TX_BUSY;
Comm_ext char bdata bCommRxEnd;
Comm_ext char bdata bCommRxstart;
回復(fù)

使用道具 舉報

ID:915354 發(fā)表于 2021-5-3 19:54 來自觸屏版 | 顯示全部樓層
keil uvision 2最好用
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表