hck2llj 发表于 2014-7-10 10:58:12

请教:如何解决CodeWarrior的Link Error:L822?

最近在调试基于飞思卡尔MC9S12XHY256的软件,开发环境是CodeWarrior V5.1。
编译的时候能通过,不过在Link的时候出现了以下错误:

Link Error   : L1822: Symbol _FCMP in file F:\Freescale\TFT_PRO\TFT_PRO_Data\Standard\ObjectCode\V2Vin.c.o is undefined
Link Error   : L1822: Symbol _FMUL in file F:\Freescale\TFT_PRO\TFT_PRO_Data\Standard\ObjectCode\V2Vin.c.o is undefined
Link Error   : L1822: Symbol _FUTRUNC in file F:\Freescale\TFT_PRO\TFT_PRO_Data\Standard\ObjectCode\V2Vin.c.o is undefined
Link Error   : L1822: Symbol _FDIV in file F:\Freescale\TFT_PRO\TFT_PRO_Data\Standard\ObjectCode\V2Vin.c.o is undefined
Link Error   : Link failed

我是在main.c里面调用了V2Vin.c里面的函数,出现问题的两个函数,均包含浮点型变量。
函数1入参为浮点型变量,函数2入参为结构体,里面包含两个浮点型变量。
调用其他未包含浮点型变量的函数则没问题。

我在新建工程时,没有选择支持浮点型变量。如果我去选择的话,则Link能通过,但是其他功能都不正常了。

我在论坛获得了大家很多的帮助,无以为报,这里选择悬赏莫元的方式来感谢为这里帮助我的人。
莫元不多,聊表心意。谢谢大家!

hck2llj 发表于 2014-7-10 10:58:35

自己沙发一下

hck2llj 发表于 2014-7-10 11:06:23

补充一句,我在原工程把浮点型变量宏定义为长整型变量也不能Link

hck2llj 发表于 2014-7-10 11:28:52

{:cry:}没有人看到吗

FSL_TICS_LY 发表于 2014-7-10 11:57:25

如果工程中用到浮点变量的话,那新建工程是要选择浮点库的。
把你的工程发上来看看

hck2llj 发表于 2014-7-10 11:59:46

FSL_TICS_LY 发表于 2014-7-10 11:57
如果工程中用到浮点变量的话,那新建工程是要选择浮点库的。
把你的工程发上来看看 ...

{:sad:} 我也想发,不过按照公司规定不能发。

hck2llj 发表于 2014-7-10 12:00:44

我在这里贴一些代码吧,其中,注释掉的是有问题的
static void s_DispExtVideo( void )
{
    T_V2VINBCD_SCALE tV2VinBcdScale;
    T_V2VINBCD_AREAtV2VinBcdArea;
   
    V2VdcCont(128);
    V2VdcBright(32);
   
    V2VinBcdExtSync(TRUE);// External synchronization control
    //V2VinBcdXPos(8);      // Backdrop plane display start coordinate setting
    V2VinBcdXFlip(FALSE);   // Backdrop plane mirror inversion function
   
    tV2VinBcdScale.Enable = TRUE;
    tV2VinBcdScale.Fx = 864;
    tV2VinBcdScale.Fy = 625;
    tV2VinBcdScale.Mode = 0;
    //V2VinBcdScale( &tV2VinBcdScale );   // Backdrop plane scaling setting

    tV2VinBcdArea.Sx = 1;
    tV2VinBcdArea.Sy = 1;
    tV2VinBcdArea.Height = 799;
    tV2VinBcdArea.Width = 479;
    V2VinBcdArea( &tV2VinBcdArea );   // Backdrop plane display area specification
   
   
    V2VinBcdDisp( TRUE, FALSE, 0 );   // Backdrop plane - Display control
}

hck2llj 发表于 2014-7-10 12:01:50

我再加上那个结构体,F32就是float
typedef struct {
        Bool Enable;                                        /* Scaling function ON/OFF                                */
        U08 Mode;                                                /* Interpolation Method Selection                 */
        F32 Fx;                                                        /* X Scaling Setting                                        */
        F32 Fy;                                                        /* Y Scaling Setting                                        */
} T_V2VINBCD_SCALE

hck2llj 发表于 2014-7-10 12:02:56

FSL_TICS_LY 发表于 2014-7-10 11:57
如果工程中用到浮点变量的话,那新建工程是要选择浮点库的。
把你的工程发上来看看 ...

有同事建议我看看是不是头文件没有包含完全的问题,我仔细找过,都包含了。

FSL_TICS_LY 发表于 2014-7-10 12:06:58

你刚开始的帖子里边说如果选择浮点支持的话,别的功能就出问题,那出的问题是什么问题?

hck2llj 发表于 2014-7-10 12:08:56

FSL_TICS_LY 发表于 2014-7-10 12:06
你刚开始的帖子里边说如果选择浮点支持的话,别的功能就出问题,那出的问题是什么问题? ...

有可能是工程环境设置的问题,具体我还没找到原因。
出现的问题是:用非浮点的工程可以用SPI读写外围芯片,用浮点的工程则不行。

FSL_TICS_LY 发表于 2014-7-10 12:38:03

建议楼主还是把时间用在解决SPI读外围芯片的问题上。
程序里边有浮点变量,支持浮点的库是必须的。
实际上,在新建工程的时候,选不选择浮点的支持主要是选择工程中是否要添加支持浮点的库。这个库存在CW V5.1安装目录的{cw}\lib\HC12c\lib。
库的说明在{CWS12v5.1}\lib\HC12c的readme.txt.

hck2llj 发表于 2014-7-10 14:30:06

FSL_TICS_LY 发表于 2014-7-10 12:38
建议楼主还是把时间用在解决SPI读外围芯片的问题上。
程序里边有浮点变量,支持浮点的库是必须的。
实际上 ...

那请问,已经建立好的工程(我不想重新新建一个),能设置使用浮点库吗?
如果能,应该怎么设置呢?

FSL_TICS_LY 发表于 2014-7-10 10:58:13

可以,楼主可以新建一个带浮点的工程,然后看看这个新建工程中用到的是那个库。然后在你的工程里边,右键点击工程中包含的库,remove掉,再右键点击,add files添加相应的库文件。
还有,比较一下新建工程中“Edit”->“standard settings”中的compiler options和你自己工程中的编译选项,修改与floating有关的选项。

FSL_TICS_LY 发表于 2014-7-10 14:40:38

更换Lib库的图片

hck2llj 发表于 2014-7-10 15:29:50

FSL_TICS_LY 发表于 2014-7-10 14:40
更换Lib库的图片

好的,谢谢啊,我刚才新建带浮点库的工程,已经可以正常编译和通信了,谢谢啊{:lol:}

FSL_TICS_LY 发表于 2014-7-10 15:37:49

不用客气{:biggrin:}

jiang887786 发表于 2014-9-4 09:59:57

进来学习一下
页: [1]
查看完整版本: 请教:如何解决CodeWarrior的Link Error:L822?