Error: L6218E: Undefined symbol GUI_TOUCH_X_ActivateX (referred from gui_touch_driveranalog.o)



   今天把MDK升级到了V4.73,原有的emWin相关应用工程遇到了标题的编译错误,之前升级V4.73没遇到这情况。查看了下v4.73的release notes发现emWin升级到了5.22a,怀疑跟这有关。
百度了下,网上有几个帖子,大概是在编译ucGui中遇到了同样的编译错误,但貌似没有解决方案。我提供下我的方法供参考吧,虽然我不是在ucGui碰到的,但思路是想通的。
        从编译错误信息可以看到是在编译"gui_touch_driveranalog.o"时产生的问题,显然我的工程中没有gui_touch_driveranalog.c这个文件,查看工程的.map文件,发现是在一个触摸屏驱动的C源文件中用到了gui_touch_driveranalog.o中定义的方法,而这个gui_touch_driveranalog.o则是由通过emWin的Lib文件“提供”。
        再回看编译信息字面,编译器没有找到"GUI_TOUCH_X_ActivateX","GUI_TOUCH_X_ActivateY" ,"GUI_TOUCH_X_MeasureX", "GUI_TOUCH_X_MeasureY"这四个东东。这四个函数是emWin定义的触摸屏的驱动接口(函数),在gui.h中可以看到:


/*********************************************************************
*
*       TOUCH: imports
*
* Please note: The following functions are required by the module.
* They need to be part of your application software (or rather, part
* of the hardware-layer of your software).
*/
void GUI_TOUCH_X_ActivateX(void);
void GUI_TOUCH_X_ActivateY(void);
void GUI_TOUCH_X_Disable  (void);
int  GUI_TOUCH_X_MeasureX (void);
int  GUI_TOUCH_X_MeasureY (void);
      

    而这几个接口函数我之前肯定是实现过的,怎么编译器会找不到呢? 顺着思路打开GUI_X.c,发现原因了,这几个函数的定义是放在

#if GUI_SUPPORT_TOUCH  // Used when touch screen support is enabled
后的,显然这里的宏GUI_SUPPORT_TOUCH被定义为0了,然后下面的接口函数就被“忽略”了。

   宏定义是在GuiConf.h中,把GUI_SUPPORT_TOUCH改为1就可以了。如果在多任务中使用了emWin,GUI_OS也要改为1。

 /*********************************************************************

*
*       Multi tasking support
*/
#define GUI_OS                    (0)  // Compile with multitasking support

/*********************************************************************
*
*       Configuration of touch support
*/
#define GUI_SUPPORT_TOUCH         (1)  // Support a touch screen (req. win-manager)
   总结下:我的工程是直接引用了keil安装目录下的GuiConf.h,安装完MDK v4.73,带的GuiConf.h中默认把GUI_SUPPORT_TOUCH设成了0,所以才会遇到标题的编译错误。

    Ps: 编译ucGui遇到这个编译问题搜索来到的朋友,可以参考我的思路,寻找那四个接口函数的定义处(如果没有就要自己根据触摸屏去实现),自然可以解决问题。


AttributeError: 'numpy.random._generator.Generator' object has no attribute 'random_sample' 表示在使用numpy.random模块的Generator对象时发生了错误,错误提示该对象没有random_sample属性。为了解决这个问题,可以尝试以下方法: 1. 确保你的numpy版本是最新的,可以通过升级numpy来解决这个问题。你可以使用以下命令升级numpy: ``` pip install --upgrade numpy ``` 2. 如果升级numpy后仍然出现相同的错误,那么可能是你的代码中使用了不兼容的numpy版本。你可以尝试使用conda来管理你的python环境,并创建一个新的环境来运行你的代码。具体步骤如下: - 安装conda:请根据你的操作系统下载并安装Miniconda或Anaconda。 - 创建一个新的环境:在终端或命令提示符下运行以下命令创建一个新的conda环境: ``` conda create --name myenv python=3.7 ``` - 激活新的环境:运行以下命令激活新创建的环境: - 对于Windows用户: ``` conda activate myenv ``` - 对于Linux和Mac用户: ``` source activate myenv ``` - 安装所需的依赖项:在激活的环境中使用pip安装所需的依赖项,包括numpy和其他需要的库: ``` pip install numpy ``` - 运行你的代码:在激活的环境中运行你的代码,看看问题是否得到解决。 3. 如果以上方法仍然无法解决问题,请检查你的代码是否有其他地方导入了numpy.random模块,可能导致命名冲突。你可以尝试在代码中将该模块的导入语句修改为具体的函数导入,例如: ``` from numpy.random import randint, random_sample ``` 然后使用randint()和random_sample()函数来替代你原来的代码中的相应属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值