你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

TouchGFX 中 Callback 模板实现原理

[复制链接]
STMCU小助手 发布时间:2022-8-8 23:51
前言
* M) ?2 U) X. ]1 `TouchGFX 为 MCU 带来了炫彩丰富的 GUI 界面,使得基于 STM32 芯片的人机界面开发非常方便而友好,比如可以在 TouchGFX Designer 中创建一个按键,在 interaction 中给按键添加响应;或者创建多个界面,在界面间进行切换;这些功能由 designer 帮我们自动生成代码实现了,那与之对应的功能响应代码具体是如何实现的呢?4 G& T9 D5 @- x; s2 H( N
TouchGFX 是用 C++编写的,借助 C++的模板特性,TouchGFX 定义了一组Callback 模板,基于此模板来实现上述响应的功能。
; ^7 k# n! H7 ?+ i7 |3 U
! f! w! Q) y6 ?* }: `3 {
6 D6 T1 F1 i' G( d
Callback 模板) p; W; M4 |; F% c5 \, S0 x/ ]+ G
在 TouchGFX 中,Callback 模板的描述放在 Callback.hpp 文件中,在此定义了两组模板:GenericCallback 与 Callback 模板。
0 y$ s' z3 A! C3 D
/ k8 L9 c# _% v: a- L  H' L

/ X- n8 V6 [; RGenericCallback 模板组
: t' p/ U& S' }4 ]" _( bGenericCallback 为 Callback 模板的模板基类。在 GenericCallback 模板中,定义了两个接口函数:isValid 与 execute;其中 isValid 是来检测 Callback 是否被初始化过,而 execute 函数用于调用实际要执行的函数。GenericCallback 模板组总共定义了 4 个模板,模板之间的差别在于 execute 函数的参数个数不同,4个模板分别对应 execute 函数带有 0 个参数,1 个参数,2 个参数与 3 个参数。本文中仅列出 execute 带一个参数的情况。! G; s0 g( s! R! |7 W' n' \
下面是 execute 函数带 1 个参数的 GenericCallback 模板:8 d8 L6 n: o) H* P4 L6 A% T
  1. template <class T1>
    6 g+ K* M: J7 O9 u; R0 [/ x3 i8 w
  2. class GenericCallback
    1 J+ K. J$ F; j6 @
  3. {
    - N3 o: C* `0 U9 x; k$ Q1 R
  4. public:( A0 |* A+ a) I+ [' M) F6 o
  5. virtual ~GenericCallback()
    ' Q/ o6 ?7 u( I  {: R( V8 v4 x
  6. {
    5 ?; \) h# F3 B- R: |, H0 U, z
  7. }" C1 \: K& \9 M6 Y
  8. virtual void execute(T1 val1) = 0;
    - A5 g4 a; Z: b  H1 x
  9. virtual bool isValid() const = 0;9 |2 n) s% {4 n) e/ A
  10. };
复制代码
# F! N" l* P# U3 B

( k. p& T; ^) {) o2 C

4 a# [6 B# x6 R( S. m8 cCallback 模板组- n& v6 C9 Z9 ]5 k2 o
Callback 模板由 GenericCallback 派生而来。Callback 模板组也有 4 个模板,分别对应于包含不同参数个数 execute 函数的 GenericCallback 模板,继承关系如下图:
5 b, j/ {! {# e; M
9 u% l1 [/ }- C7 m8 v0 J! e  Y9 E/ a$ ^! {* p( q3 H" J8 B( q& ^* ~* Z
& U% \$ i! v# Y6 K
O2{WK87KR}`X7{CB6]TKB9O.png $ u3 M5 n: l' z1 f) i

9 F( S" A7 K6 L' F& O$ @完整版请查看:附件2 r# P3 P1 c) X$ W* g5 c$ q
6 T  P9 X  l, ~% T5 v3 {' ~

( S( Y2 Y, K# m+ U) K$ c
+ |- T9 L2 C& V, J3 t7 {template <class T1>1 i0 {4 [1 k3 D. w% w
class GenericCallback" ]( F. _  \# A
{
# {  \: L* V# Z. l; u' o$ Xpublic:* W0 V, W8 b/ [0 N+ M# c( A+ c
virtual ~GenericCallback()
* T8 M- ~. r/ }. b5 s& A) v$ a {7 F3 [) ?9 ]6 p
} virtual void execute(T1 val1) = 0;9 O# y/ L3 A& f4 n2 `" k2 ^
virtual bool isValid() const = 0;* k5 o/ k4 B( L$ b: k% J
};" `$ T& |. ^9 b$ B9 U' l
, m  f* _( R: i' L, t4 V9 s

CallbackTemplate_in_TouchGFX_v0.2.pdf

下载

250.53 KB, 下载次数: 0

赞 收藏 评论0 发布时间:2022-8-8 23:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版