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

【经验分享】STM32H7 ThreadX GUIX窗口任意位置绘制2D图形

[复制链接]
STMCU小助手 发布时间:2022-1-1 21:00
13.1 初学者重要提示% g4 c% B1 h) E1 H9 }* d# L, ~
  本章节教程的3.4小节是重点,对每个函数的使用都进行了说明。+ F& M' T( D( _' M+ l( |' q
13.2 GUIX Studio设置窗口回调
0 k1 H% x  L& l' n) g) wGUIX Studio的设置方法与第11章一样,我们这里仅把控件的位置和大小做了调整,腾出来的位置方便2D图形绘制。
' _+ c! z5 f; T
$ O5 r( F; V- U( s新调整的界面效果如下:
& y6 V* q) B) Y( r/ U2 W7 y7 n  Z5 ^5 w! y3 s. f, u
69a2ac618f7a07ef093c97d5ebde6653.png

/ i. D7 [0 k6 `8 ]) S1 E* {; f3 S1 E, U6 F$ n4 a& H
文本控件和按钮控件以外的区域,我们都可以做2D绘制。为了让800*480分辨率显示屏和480*272分辨率显示屏都可以正常显示,我们后面的2D绘制也会在480*272的范围内绘制。8 Z$ n+ J9 B3 |( @. s9 O

6 m5 M( Q2 V8 Z+ @. N下面我们为窗口控件设置一个Draw Function,此功能是窗口的绘图回调函数。在这个回调函数里面,大家可以绘制任意的2D图形。
; y! g* N9 ]/ L. |+ H3 _8 r: Y5 ?6 \# C4 Z+ Y  L
8047d2e2fc93e46a92a3bbb496e2ec0e.png

+ t5 ~; o7 V6 z& g* g& P. k, N( e9 R. Z* C4 o. T, v
这里为Draw Function设置的回调函数名为_cbWindow0,然后就可以使用GUIX Studio生成新的代码。生成的代码移植到硬件平台的方法看第12章即可。4 B& V* y) l0 O- y3 H: \
9 x. X3 M- O$ T% t# E
13.3 GUIX的2D绘制实现
  z6 |& v6 G' ^8 |  g" u! Y在GUIX Studio上设置好绘图函数名后,剩下就是在程序里面实现2D绘制,这里把实现方法为大家做个说明。
) ]1 B% M" v; n2 R; }# i' I  _7 x' K5 G: V4 _1 s
13.3.1        了解2D绘制函数5 p2 B' h3 u0 g
GUIX的2D效果绘制主要是通过canvas相关的几个函数实现:
4 I# S4 M' {1 K$ \& r/ V" e- _9 L" k- h- T; ?. Z$ r  E
efed2fc42c325890b72b18ddc457f87a.png

5 s. T. J2 m. Q# j, \+ k9 M# J8 h7 P0 J* n; G: v# R' t4 n
这里提供的这些函数,大家根据官网手册的参数说明和每个例子后的调用实例使用即可,但要注意调用的一些套路,下面举例时再为大家细说。
% m2 D8 y% c& o3 v! I9 B( s1 h0 e, d/ d1 M
13.3.2        了解画笔brush函数

6 k+ G" t& `3 a8 w! \1 m画笔函数在context相关的几个API里面:; \( l4 F7 e  H* m
( V( A6 S' _7 s: I
cdfd460b2ef117fd3461cb2d3883acce.png
" d$ g, m) ^$ U2 b# A; S# s, w

6 W! z9 |, ]; r: xBrush画笔主要定义了如下参数:& J! ]- P) u  W4 t7 y

& a. Y+ v2 l1 |, M5 C' F. B
  1. typedef struct GX_BRUSH_STRUCT
    ! `: `' Z- S; J, c' \, |
  2. {9 w+ e; Y$ `( o* Z3 \
  3.     GX_PIXELMAP *gx_brush_pixelmap;            /* 用于位图       */
    3 e  H( D6 ?; G! O2 t& e* O- u
  4.     GX_FONT     *gx_brush_font;                /* 用于文本字体   */
    . z) C6 Y! v+ A! J9 E4 {* `8 q
  5.     ULONG        gx_brush_line_pattern;        /* 用于虚线绘制   */& x0 }! m6 W) b: d; y( p
  6.     ULONG        gx_brush_pattern_mask;        /* 用于虚线绘制   */
    & {6 G; W! {! m* Q+ ]: J/ z+ s! T6 ]: P
  7.     GX_COLOR     gx_brush_fill_color;          /* 填充颜色值     */+ i# K7 r3 P& Q* v7 m, C
  8.     GX_COLOR     gx_brush_line_color;          /* 画线颜色值     */
    1 E: z0 Z8 c  e- I$ c
  9.     UINT         gx_brush_style;               /* 画笔样式       */
    / R; I+ h4 f4 X; g+ l0 o4 M
  10.     GX_VALUE     gx_brush_width;               /* 画笔线宽       */7 ]* B6 o/ w. r, z5 t7 d4 f
  11.     UCHAR        gx_brush_alpha;               /* 用于Alpha混合 */
    # Y! w) y1 q: k: H
  12. } GX_BRUSH;
复制代码

% C2 S2 ~# P8 \% k4 ?6 o其中画笔样式成员gx_brush_style涉及到多个参数:" o( W3 q6 i7 K2 x  X
+ C, v8 L8 y% {8 k( n8 o
  1. GX_BRUSH_OUTLINE
    $ R2 n1 R: }( A  p* r' T
  2. GX_BRUSH_SOLID_FILL% I' P7 z  @; x) w8 ?
  3. GX_BRUSH_PIXELMAP_FILL$ }5 K4 @3 R: W# q; }
  4. GX_BRUSH_ALIAS
    7 l  j8 p$ t  z5 k# N" i1 h
  5. GX_BRUSH_SOLID_FILL
    " h. O( i% u, ?' g& r8 C
  6. GX_BRUSH_UNDERLINE# o5 `0 J! Q( O' Z$ t) H
  7. GX_BRUSH_ROUND
    ) m, R6 S# y/ ]; H4 N3 }
  8. $ \' ~  Y. b( r7 D9 ]
  9. GX_CANVAS_SIMPLE
    + {! D/ m% F) V4 P: N
  10. GX_CANVAS_MANAGED
    $ O& E( b; _- Q0 g8 X, t
  11. GX_CANVAS_VISIBLE0 x2 r9 o) u3 n( M( F6 i0 w
  12. GX_CANVAS_MODIFIED$ m% g& V% J- U7 v! T8 N
  13. GX_CANVAS_COMPOSITE
复制代码

+ s5 \- P# t% N3 c, f这里将当前用到的三个样式做个说明:
6 ?7 g4 n  P3 Z* G# {% L3 M- y& l6 _  [2 _
$ p6 }- D8 F9 Z  GX_BRUSH_ALIAS7 J5 J; O! o) f3 O) A) |
用于实现画线,椭圆,圆圈,多边形等抗锯齿效果。, [3 b3 X" S  t

9 y. \8 g6 g0 Q9 I  GX_BRUSH_SOLID_FILL/ I, f5 j: o7 q# E- f0 `* [
用于实现椭圆,圆圈,矩形,多边形等图形的填充效果,如果不使能此选项,绘制的是图形轮廓。0 I8 N2 P& }$ [0 d+ E5 |# i

* A$ i. Q. S" _) }  GX_BRUSH_ROUND" Z# u0 h; h- K# f; g: X, \

/ e4 ~0 i0 h3 a% V4 e) g0 W用于设置画线功能时,将直线两端的截面设置成圆形,默认是方形的。2 _1 H; v3 }; g, @- C
+ l/ D+ O9 s6 G  g9 {
13.3.3        窗口里面做2D绘制的基本框架
* n) F' T  a7 t& x& B: I; C2 \4 O窗口的Draw Function绘图回调函数实现框架如下,大家在这个框架里面添加自己的2D功能即可:
. z; U9 o% x+ U) ^9 ~% b
' v' q% Y" ]" v+ s
  1. VOID _cbWindow0(GX_WINDOW *widget); Z7 a. X' u, o2 {" r: q
  2. {
    4 j; l' ^" T# E  o, E' m! b' P2 B
  3.     GX_RECTANGLE drawto;
    0 U0 H: V  G9 w
  4.     GX_CANVAS *mycanvas;     
    & _) S( [1 ]4 n" J/ \# J( K3 N  M$ }
  5. - e) F, Y' P/ J5 T3 e( y3 u
  6.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */
    # C6 F  r" D  v1 B; B& I7 L- J
  7.     gx_window_draw(widget);% l) ?+ O8 z  L4 F; U" b& s

  8. ( k8 L. j; t6 Z$ ^, G; J9 R7 @/ R
  9.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */& E# U: f0 U# B  j& W2 ~
  10.     gx_utility_rectangle_define(&drawto,: |8 n7 i: I6 s1 p7 L) @" X( q, ~
  11.                                 x0, / t* ]6 W$ a2 r% \1 ?, T, s
  12.                                 y0,
    * d0 r( J( d. N% o  F
  13.                                 x1, / a$ P1 u4 c4 c3 t8 Z0 \8 }# Z8 V: w" t
  14.                                 y1);0 ~, o$ R/ \! v( x1 N

  15. & r' \0 M1 B4 y: R
  16.     /* 返回窗口对应的canvas画布 */4 f* `5 @0 }" j1 n% n! H4 t3 Z
  17.     gx_widget_canvas_get(widget, &mycanvas);, ]/ S5 p/ V' h! X3 I7 [+ X: y1 D- B0 V
  18. ( X. b3 h* ~4 P0 `$ }; A
  19.     /* 在指定的画布上启动绘图。*/
    . J8 K2 W3 V4 |: w; i" w; X  I
  20.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);
    7 t- x2 M0 b* I: s8 [1 ?& M3 Y

  21. ) s- }# o9 u* e0 V
  22.     此处添加代码,调用2D函数绘制2 b' o0 a. N: v3 s
  23. & k$ @2 `9 W4 p" w
  24.     /* 绘制完毕,用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */( }9 N( A7 T5 l5 D8 q
  25.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);7 ?! t" P0 S$ o- s% L5 @# O+ `
  26. }
复制代码
3 [; k7 Q. Z3 F, H" h" Z
这个框架基本是固定的,大家直接调用即可,下面举一个实例来详细说明每个函数的作用。. k# d0 c; {; T9 X+ j
  d  z$ X2 D8 @1 ]3 v" \- S! ?
13.3.4        窗口里面2D绘制实例(重要)1 m+ }% d! Z$ ~7 L6 H/ g8 B
实例代码如下,本章教程配套例子也是用的这个代码:
/ W7 J! q! _7 s6 z6 C% N
$ I0 b9 b% L& V, k9 q2 {
  1. /*
    : Q* H7 }1 g( \. ?
  2. *********************************************************************************************************& \  \2 X% Z( f  g4 Z. x  X
  3. *    函 数 名: _cbWindow0
    5 D" I. k: m7 o; ~7 T  ~2 Y
  4. *    功能说明: 窗口回调函数2 L  ^* B' y  d) u
  5. *    形    参: widget 窗口句柄
    ( P" |8 p2 P% _5 g. I" G+ V
  6. *    返 回 值: 无6 X! k0 T2 ^5 z2 P+ Q1 d. d
  7. *********************************************************************************************************
      l$ Z5 s, S. G# O* {
  8. */
    . h# A  i% X; b3 m, s; d8 B
  9. VOID _cbWindow0(GX_WINDOW *widget)
    7 @: S4 `6 W5 B+ I
  10. {
    / R; [7 g: m$ h% ~
  11.     GX_RECTANGLE drawto;3 r( p# `& p; g
  12.     GX_RECTANGLE tempdraw;     5 N) S& [5 ~; Y9 `* \
  13.     GX_CANVAS *mycanvas;
    ) _6 X- S+ H8 R7 U$ Z; f6 i
  14.     GX_POINT my_polygon[3] = { { 150, 210 }, { 250, 210 }, { 200, 260 } };! r2 Q1 o& X. U1 T; M6 @
  15.   t- K0 n; @. T* E$ O9 u

  16. - j" P* h) f% ]" |  T  x) P
  17.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */# e1 y6 k+ V  [1 @, S" ?: @
  18.     gx_window_draw(widget);
    " |9 ?% p( ?, Y9 [8 `6 a6 P) M
  19. & L- K# o2 N" m
  20.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */
    3 i3 {3 {2 ^" C, p! c
  21.     gx_utility_rectangle_define(&drawto,3 M  W# K: Q5 L! r7 Q
  22.                                 10, - N8 `, s4 t( l0 L% v- L
  23.                                 100,
    3 r) I: r# A4 a
  24.                                 400, % k! n2 \) u% t4 j2 G
  25.                                 265);
    9 ]8 A1 x9 s2 s, u) p; j+ ]

  26. 5 t/ B* R7 A3 k; V
  27.     /* 返回窗口对应的canvas画布 */
    / L6 E6 a! N1 K1 T' U
  28.     gx_widget_canvas_get(widget, &mycanvas);
    0 j& j1 R( D$ e7 v! L! r5 x

  29. ! D3 B5 X; t$ d
  30.     /* 在指定的画布上启动绘图 */4 j6 S* S+ s, t7 b4 E0 b
  31.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);
    * k, K! l0 @' b! n! s/ E0 s
  32. 3 e1 g6 I& g. P. v% f
  33.     /* 设置笔刷画线的颜色值 */
    5 `5 O% A1 M+ y8 j' m4 ~5 f* w. o
  34.     gx_context_raw_line_color_set(0xffff0000);
    & ]: M! S8 f( ]+ ?, T! v& D( U

  35. ! S6 ~. S9 ~$ c4 l9 H, |
  36.     /* 设置笔刷填充的颜色值 */   
    / ^) f+ s" G1 @
  37.     gx_context_raw_fill_color_set(0xff00ff00);$ A! ~6 d, b' B& g4 E
  38. 3 s: D; A" j; B- E# G
  39.     /* 通过GX_BRUSH_SOLID_FILL使能圆圈,矩形,多边形等绘制为填充效果 */5 p. ~" p& V7 `0 [
  40.     gx_context_brush_style_set(GX_BRUSH_SOLID_FILL);6 F% n2 W5 h3 i0 D6 t

  41. ! |8 \" s, h+ G/ k0 S, C9 B. ~
  42.     /* 设置笔刷线宽 */& |2 R7 v4 q. x! S3 ], Z
  43.     gx_context_brush_width_set(1);
    4 A/ \3 \; j7 @- L; [5 r5 W, {

  44. - ^& |& D5 Y1 S/ o
  45.     /* 绘制直线 */7 r8 y. [9 G9 u* i9 [1 _( |
  46.     gx_canvas_line_draw(10, 100, 50, 150);
    : n5 b  h, g* b

  47. 7 G0 u9 C/ X/ y( g9 C5 y
  48.     /* 绘制圆圈 */
    + r- d# r8 {- [
  49.     gx_canvas_circle_draw(120, 150, 50);2 L9 m+ e# j' V7 I, E5 X

  50. . b* k2 O6 w  M. K
  51.     /* 绘制椭圆 */
    , E1 ?& E/ _" a- }; |
  52.     gx_canvas_ellipse_draw(300, 150, 100, 50);0 F- i; E+ {& z# v% \3 k

  53.   {& q5 u9 _* O( x4 C/ Y) e* X7 I
  54.     /* 绘制多边形 */! `) a- H6 j+ h4 b( d7 p4 q- R; L6 ?
  55.     gx_canvas_polygon_draw(my_polygon, 3);
    . r2 K( u) ~9 b# |$ A$ B
  56. - T5 Z6 U- Y# ]( f
  57.     /* 绘制矩形 */
    4 q  t% a& L& x; K. Z3 ~
  58.     tempdraw.gx_rectangle_left = 30;
    ( ^% H# }7 m' z. x
  59.     tempdraw.gx_rectangle_top = 210;
    4 i( V4 i+ E+ O2 i3 y$ O& t. H  G
  60.     tempdraw.gx_rectangle_right = 100;
    ; K! o( U; I) p
  61.     tempdraw.gx_rectangle_bottom = 260;8 m/ N8 d9 M( D! H0 W6 C
  62.     gx_canvas_rectangle_draw(&tempdraw);" x* L0 h! L$ J, a. R
  63. 2 N+ ?- d: o7 _
  64.     /* 用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */
    % v# r: x9 X- S2 ]
  65.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);
    8 I% ^3 t3 g% t, Y2 X
  66. }
复制代码
3 K; s- `& X9 v; J, o$ Q8 f5 \- l1 N7 i
  gx_window_draw! G' k( w* }) L2 ~8 j0 k; ~+ o

% q8 ~. P! w' _3 I: T5 @9 C作为窗口的Draw Function绘图回调函数,此函数用于窗口默认效果的绘制。5 g  M; T, w  b7 I& m" ^
% F% P  R* t( O, v+ h% B4 Q5 A- D
  gx_utility_rectangle_define' D; R: k. p7 @3 q6 u& _& w
2 h) Y1 \4 t7 H. y$ N  M
定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的,此函数的后四个参数是左上角位置和右下角位置。+ c$ E! H8 ?0 Z: S4 I7 ^$ v- R

/ A: U7 {& V" L9 t; g3 F  gx_widget_canvas_get$ ?: f( z+ ~8 _) g# q* P9 F  ^

' z, |- C2 N5 a: i返回窗口对应的canvas画布。: A2 n! u( `/ @7 ^
7 Y9 [" ^! S2 i& Q( f& }9 Q
  gx_canvas_drawing_initiate8 @, o) z. `4 m+ y, u

( G, B& @( |, f在指定的画布上启动绘图。此功能在GUIX内部被延迟绘图算法调用,在需要画布时自动执行更新。 但是允许应用程序绕过延期绘图算法并立即执行。首先调用gx_canvas_drawing_inititate在画布上绘画。然后调用所需的绘图函数,最后调用gx_canvas_drawing_complete即可。
& x! h0 F& {4 n$ M) v8 R- K1 @! f
, q; O2 Y( _: {' `1 Q, c8 m9 F& U6 x  gx_context_raw_line_color_set: B7 p" r  b- @4 i$ ^
9 t8 g" V) @1 z+ K
设置笔刷画线的颜色值,比如直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都是采用的这个值。注意这个颜色值是32bit的ARGB格式,每个bit代表的含义如下:
" \! f, E  p0 l/ @
/ g1 M: h0 C, z1 Z! u  Q
75b0550a29f8f3e8fed5735d50e07c82.png
+ y$ }0 w- s; l: i

& s: A' U8 l. K) @  gx_context_raw_fill_color_set
, F2 K, G" j# [  R' g) ~
& K3 `5 Y) I. u# g7 f- \设置笔刷填充的颜色值,比如圆圈填充,椭圆填充,矩形填充,多边形填充等都是采用的这个值。# Z! v$ L8 \9 W( d4 L1 M
* k2 o( z: J! @" H2 M& I
  gx_context_brush_style_set, N1 i4 V* y. ~
7 {# a  M) l) @" w& R9 X
用于设置笔刷的样式,我们这里设置了GX_BRUSH_SOLID_FILL,表示圆圈,矩形,多边形等绘制为填充效果。如果不设置此样式,表示仅显示一个轮廓。这里特别注意一点,各种样式参数可以通过或操作全部执行,比如GX_BRUSH_SOLID_FILL | GX_BRUSH_ALIAS。
9 E% W) [8 W+ i7 s' o- f2 o' M; ?1 v1 g
  gx_context_brush_width_set
; M) P; S. m8 o3 a  g' Y+ v) _' r0 \6 G' d( }; ^' }6 o
用于设置笔刷线宽,此线宽对直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都起作用。注意,对于这些2D绘制,必须要设置线宽才可以正常显示。
9 {$ F% f" C  o* n; k3 w' H) b; m
  gx_canvas_line_draw4 R2 X# v, f! p- D& ?6 d
3 _, |8 Q( g& ~
直线绘制,注意坐标位置是相对于代码中的窗口,而不是相对于gx_utility_rectangle_define定义的矩形区域。+ H' N1 i* I4 I+ y" q6 i1 Z9 V

- H, ?% c) E- ]  gx_canvas_circle_draw( l% f) h8 c' j2 a

- ^/ Y, `& I- L8 U( V' F8 }* h圆圈绘制,坐标含义同上。
, E! a6 Z1 e* _) s3 A
( }/ |8 j6 |. a5 i. [9 s) P  gx_canvas_ellipse_draw& I6 M& }$ G& z+ P0 ^% Q2 j
椭圆绘制,坐标含义同上。
( R) o7 n+ {! E9 L; ]
; A7 n% e, F0 U/ Y& q  gx_canvas_polygon_draw" L7 B0 K2 o5 K3 M1 L# W
多边形绘制,坐标含义同上。多边形的绘制是把用户设置的几个坐标点依次连接到一起。
( n* M# ]9 ?; o
- H9 N8 }$ s3 F% D; z  gx_canvas_rectangle_draw
8 Z7 v- Z0 ^/ m, K1 ]' z- m矩形框绘制,坐标点含义同上。5 v; W$ e' H% w6 \/ @$ C

, z, w5 A2 f, k# P# T2 }  gx_canvas_drawing_complete4 w! n6 A9 q5 Z: q7 l
用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用。0 S. U9 W7 v( R
& ?3 {( Y8 U: `/ b' \, c7 M+ K
针对这个实例,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。
  U0 @3 [2 h, Y3 E7 X. `
' A1 g$ }& V+ S$ J1 q13.4 实验例程设计框架

* ]$ \8 W! e. M本章例程的重点是GUIX任务的实现,任务中专门为窗口设置了一个Draw Function绘图回调函数。. H  S+ l1 J7 d! j+ ^) f
5 W/ ~& m% u* c' @( i$ K
b1fb44317c3b844ecc492ccdbcd083c5.png
+ V+ m8 Y$ W, H  \  Z
0 x2 b: Z9 t( k# T. P& T
13.5 实验例程4 O/ K, m. Q1 m8 P6 u+ F& G
(注,如果是电阻屏,需要做触摸校准,校准方法看本教程附件章节A)
5 x8 p! u0 V2 A2 R3 k
1 X! W1 V9 d# o3 u, m4 }' Q, G5 G配套例子:
- I9 a' \- C* |, S! W/ @) A' m& y: ^- I$ h1 _6 M
本章节配套了如下两个例子供大家移植参考:
9 C! G" x  {1 [
* B7 A. i: ?. `3 v  V7-2011_GUIX 2D Draw/ ]- u- |' w; ]  f2 K$ }
9 [/ E8 ^; z, [$ b6 B" p
GUIX Studio生成的代码在硬件平台实际运行的工程,含有GCC,IAR,MDK AC5和AC6四个版本工程。$ d/ A3 b* u8 m9 X
7 ]9 F4 l: V$ A& ?# R6 {
  V7-2012_GUIX Studio 2D Draw
; y0 O* R! W" W
0 y* Q; R3 D; x. jGUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。3 R/ {4 O" s/ r; n' s- K

1 _4 v/ @$ @' l. N实验目的:9 ^  ~' [/ Z8 j( }8 _% V, v4 i
0 B, ]/ r6 e# D" A) \; D( O$ r
本章主要学习GUIX的2D函数绘制。8 h8 m8 M$ L0 j$ q; z5 n4 d1 y4 F

" U( P7 p6 p+ |* G- O5 t3 m+ q实验内容:& T2 x. a: ?* U( G' l, G
' t- c9 H3 u& l4 M. e; r
共创建了如下几个任务,通过按下按键K1可以通过串口打印任务堆栈使用情况- O" O+ i) c- U; @
App Task Start任务  :启动任务,这里用作BSP驱动包处理。
! k+ k# h) [* B8 d) U7 J% [
# r4 S8 ?1 r: dApp Task MspPro任务 :消息处理,这里用作浮点数串口打印。
$ a$ |& v: h/ @0 i% Y0 M! J* r( C
$ H5 j' e3 f$ u2 T+ A+ ZApp Task UserIF任务 :按键消息处理。3 a! S' B% {( e  A: ]

$ i/ G% [8 z8 a% k3 n7 SApp Task GUI任务    :GUI应用任务。
# U. E. k0 T; K$ X* z, j* @- F$ O9 J
App Task STAT任务   :统计任务。
$ h# a* l2 {0 e; o$ V
1 ^1 [1 _- V; rApp Task IDLE任务   :空闲任务。
$ l  ^5 M3 _5 V: Q' P0 w0 b; J
% R3 H- M, y' Y3 cGUIX System Thread  :GUI系统任务。
  g5 m. ^) O$ i
* @5 W& f6 w+ ?7 XSystem Timer Thread任务:系统定时器任务。8 w! _: H; F2 {+ j: @' i
" A+ a2 C1 h* b
实验效果:
9 \$ _' K2 J* }, f$ s8 T, R% N1 r
df5ab427f528c63c7ed28992f6755a5e.png

" D0 R4 V6 ]9 l0 a
9 J$ F; l% f, A7 c" PGUIX Studio的界面设计如下:+ ~/ n7 ]' O8 [: S  X% [  ?* z3 J
7 Q, B( [  G2 O5 I/ I( O* W
7a76db10496f50ba66caf424e57be98a.png
! U2 y- I1 r% b1 t" s

1 c/ ^7 R5 H) N; Q* A串口打印任务执行情况:
2 w& u+ X( t0 \6 e* |! y' Y( L
7 u6 ?: k6 f( I! g$ \IAR,MDK AC5和AC6工程可以串口打印任务执行情况:按开发板的按键K1可以打印,波特率 115200,数据位 8,奇偶校验位无,停止位 1:
9 `, d- x! F8 L' O) u1 M0 ^+ h- o6 S0 L& G0 u
23aff8d7e272233974ae0a0724000f87.png
! E5 D: x# z/ g$ B

+ _" Q# R. O/ [0 ]/ q0 O: t/ PEmbedded Studio(GCC)平台的串口打印是通过其调试组件SEGGER RTT做的串口打印,速度也非常快,打印效果如下:
& j. H' x' ?! F3 e/ _1 ~
3 t9 D2 Z( P4 N7 y" u$ ], F
a1fefc15d92464c45718defa1497c837.png
6 `# x" R8 |  n; C+ v* z- z

5 H# J8 I: y4 ?9 b3 [8 T展示里面有乱码是因为Embedded Studio不支持中文。$ Q+ [+ a3 D6 R; |# x( A8 a* Q

* W+ j/ b) n. u13.6 总结
2 H: P% j: y0 N0 `6 F& f" L1 ]本章节主要为大家讲解了GUIX窗口任意位置绘制2D图形,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。- j& U& K; ]5 t4 M5 m  }' M
  P7 W/ T" E  G6 N; r/ X

: j) {# ]$ G& v* v3 L* R
  o# r/ w4 s& h% [5 I( T
' }& L( u8 G# U( |  G0 W& J
3 N# t* r. K" p! v, O
9 y! w% N2 X9 j" @) R2 Y
收藏 评论0 发布时间:2022-1-1 21:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版