硬汉嵌入式论坛

 找回密码
 立即注册
查看: 769|回复: 7
收起左侧

[emWin] stemWin库是如何通过头文件中的宏来配置的?

[复制链接]

7

主题

7

回帖

28

积分

新手上路

积分
28
发表于 2022-12-17 13:01:25 | 显示全部楼层 |阅读模式
印象中,宏都是在编译的时候来选择性的完成编译。 那么对于库来说,那些宏不是已经都参与了编译了么。 如何实现对链接的控制呢?谢谢。

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-12-17 13:08:38 | 显示全部楼层
指定宏定义生成的库,再设置宏定义就不起作用了
回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2022-12-17 13:29:09 | 显示全部楼层
图片.png
这个是GUIConfig.h 中的配置,意思说可以通过这些宏来配置一些包, 这个是怎么实现的呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-12-17 13:31:55 | 显示全部楼层
iliketolearn 发表于 2022-12-17 13:29
这个是GUIConfig.h 中的配置,意思说可以通过这些宏来配置一些包, 这个是怎么实现的呢?

这些宏定义仅对h头文件和部分没有编译到库里面的设置起作用,对库本身已经不起作用了
回复

使用道具 举报

7

主题

7

回帖

28

积分

新手上路

积分
28
 楼主| 发表于 2022-12-17 13:33:05 | 显示全部楼层
感觉是在示例程序里通过这些宏,来控制在应用里调用哪些函数,从而控制对响应函数的链接。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2022-12-17 13:45:19 | 显示全部楼层
iliketolearn 发表于 2022-12-17 13:33
感觉是在示例程序里通过这些宏,来控制在应用里调用哪些函数,从而控制对响应函数的链接。

很多都改不了的,比如最常用的那个ARGB格式ABGR格式库,导致ST发的库版本要专门出ARGB和ABGR格式

详情看下这个5.06源码,你检索下就清晰。

emWin5.06无码模板例子
https://www.armbbs.cn/forum.php? ... 8971&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

19

主题

371

回帖

428

积分

高级会员

积分
428
发表于 2022-12-18 22:32:05 | 显示全部楼层
宏大致分为3类:
1. 用户配置宏,这个是用户可以改的,一般都会有说明
2. 库内置的宏,这个是库内部使用的,用户不能修改
3. 外部宏(不需要在头文件之类的地方配置),这个是在调用C编译器的时候,从命令行传入的,比如DEBUG,USE_HAL_DRIVER等,在IDE的Preprocessor里面定义
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2022-12-19 12:33:51 | 显示全部楼层
本帖最后由 glory 于 2022-12-19 12:41 编辑

emwin库都会配套一个GUIConfig.h,切记不要改动。改动不但无效,而且会导致不确定的错误!
比如:这里面的某些宏会影响其它头文件中结构体的布局,这是导致你的程序和库中的abi不一致!举例,若修改GUI_SUPPORT_MEMDEV宏,导致IMAGE_OBJ结构的尺寸变化,使得预编译好的库跟你的代码不一致。
更严重的是结构体成员的偏移发生变化,而你毫无知觉。
[C] 纯文本查看 复制代码
typedef struct {
  WIDGET              Widget;
  IMAGE_PROPS         Props;
  const void        * pData;                                                          // Data pointer of the object to be drawn (Bitmap, BMP, GIF, JPEG, PNG)
  void             (* pfDrawImageAt) (IMAGE_Handle hObj, int xPos, int yPos);         // Object specific (Bitmap, BMP, GIF, JPEG, PNG) code
  void             (* pfPaint)       (IMAGE_Handle hObj);                             // Drawing method specific (Default, Tiled, Magnified) code
  void             (* pfGetImageSize)(IMAGE_Handle hObj, int * pxSize, int * pySize); // Returns the image size of the attached item
  void             (* pfOnTimer)     (IMAGE_Handle hObj);                             // Timer function for animated images (currently only animated GIFs are supported)
  U32                 FileSize;
  //
  // Data items used by IAMGE_GIF.c
  //
  int                 NumImages;    // Number of (sub)images
  int                 CurrentImage; // Image index used for animated images
  GUI_TIMER_HANDLE    hTimer;       // Timer used for animated images
  //
  // Data items used by IAMGE_DTA.c
  //
  GUI_BITMAP          Bitmap;       // Bitmap structure
  GUI_LOGPALETTE      Palette;      // Palette structure
  //
  // Data items used by Image_...Ex() - functions
  //
  void              * pVoid;        // Void pointer passed to GetData() function
  GUI_GET_DATA_FUNC * pfGetData;    // Pointer to GetData() function
  //
  // Alignment (Important: When tiling is active, alignment does not have any effect)
  //
  I16                 xOff, yOff;   // Additional offsets
  U8                  Align;        // Alignment
  //
  // Data items used if memory devices are available and IMAGE_CF_MEMDEV has been set
  //
  #if GUI_SUPPORT_MEMDEV
    GUI_MEMDEV_Handle hMem;
    unsigned          Scale;
    unsigned          Angle;
    U8                Alpha;
    U8                IsDirty;
    //
    // Pointer to scaling function
    //
    void (* pFunc)(GUI_MEMDEV_Handle hSrc, GUI_MEMDEV_Handle hDst, int dx, int dy, int a, int Mag);
  #endif
} IMAGE_OBJ;


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 17:01 , Processed in 0.311659 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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