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

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

[复制链接]
STMCU小助手 发布时间:2022-1-1 21:00
13.1 初学者重要提示2 a7 ]' r+ k$ _1 x3 \
  本章节教程的3.4小节是重点,对每个函数的使用都进行了说明。
' ?8 Q0 s8 D2 |' c4 _13.2 GUIX Studio设置窗口回调: g* E4 ?# y% E' y" b
GUIX Studio的设置方法与第11章一样,我们这里仅把控件的位置和大小做了调整,腾出来的位置方便2D图形绘制。
2 H- @3 M& @2 i0 N9 G  \
' F. b! e! O6 P- u! i新调整的界面效果如下:
% ]# B1 A' C+ {9 t0 l# Y
5 b# M2 Q/ [# _& i. ?: l
69a2ac618f7a07ef093c97d5ebde6653.png
* N  Y! f; r* @
6 I7 `& F( _8 Z
文本控件和按钮控件以外的区域,我们都可以做2D绘制。为了让800*480分辨率显示屏和480*272分辨率显示屏都可以正常显示,我们后面的2D绘制也会在480*272的范围内绘制。
/ C9 h% i6 y- V# I" p  U
$ N- |# N! Z" r; E4 P/ w/ B5 \3 y下面我们为窗口控件设置一个Draw Function,此功能是窗口的绘图回调函数。在这个回调函数里面,大家可以绘制任意的2D图形。' p2 C! @5 C$ k6 h4 j6 z; i

* [& t' Z& Y$ A- C0 O5 L5 w2 i( ]6 ]
8047d2e2fc93e46a92a3bbb496e2ec0e.png
9 e) _- B. H) Y4 [2 P

- l% g& D; q* @% v$ V这里为Draw Function设置的回调函数名为_cbWindow0,然后就可以使用GUIX Studio生成新的代码。生成的代码移植到硬件平台的方法看第12章即可。# @4 Q2 V0 w: |
$ |6 \# p. D1 Z. c+ m
13.3 GUIX的2D绘制实现9 k8 t! H$ d8 i5 f  Y4 O
在GUIX Studio上设置好绘图函数名后,剩下就是在程序里面实现2D绘制,这里把实现方法为大家做个说明。
- q& V8 }. U$ e3 u. X/ C* A  r- r7 D1 a
13.3.1        了解2D绘制函数
# A' o& q( N6 [  dGUIX的2D效果绘制主要是通过canvas相关的几个函数实现:
' Y* V  _0 I* b% x& ~: H; |4 b# ?- |8 b4 G1 F5 A
efed2fc42c325890b72b18ddc457f87a.png

$ \; L0 B0 X  M( Y, [$ y6 k+ V$ G/ G
这里提供的这些函数,大家根据官网手册的参数说明和每个例子后的调用实例使用即可,但要注意调用的一些套路,下面举例时再为大家细说。4 x: @0 N2 R  u9 j1 F

3 V, n7 ~( B" F; F2 d# j) a13.3.2        了解画笔brush函数
, Q: O. J, s" F+ U( O
画笔函数在context相关的几个API里面:
% Y5 i7 Q! v: ^. Y7 K8 n$ q7 L9 t' x
cdfd460b2ef117fd3461cb2d3883acce.png

& P" G" b% R% J7 Z/ ^( d
! n% y' D( \" v% A# j' NBrush画笔主要定义了如下参数:
7 y; m% a3 x" \5 S& s
, N/ b1 ]2 Z% ]7 F" C- e' ]
  1. typedef struct GX_BRUSH_STRUCT8 D" L* l# C/ z5 C
  2. {: @" x7 \' q4 F
  3.     GX_PIXELMAP *gx_brush_pixelmap;            /* 用于位图       */
    / ~' X7 }* ^$ n9 {, B) u
  4.     GX_FONT     *gx_brush_font;                /* 用于文本字体   */
    , ]+ v4 ~. l. s; q6 S
  5.     ULONG        gx_brush_line_pattern;        /* 用于虚线绘制   */
    6 H8 r. M9 |0 s
  6.     ULONG        gx_brush_pattern_mask;        /* 用于虚线绘制   */
    + e4 L' C6 k$ v7 W
  7.     GX_COLOR     gx_brush_fill_color;          /* 填充颜色值     */
    + I3 y. D# h% H. L
  8.     GX_COLOR     gx_brush_line_color;          /* 画线颜色值     */% x+ @+ e* W) s% U
  9.     UINT         gx_brush_style;               /* 画笔样式       */. Q# |1 @& k. G: G, k1 A$ X
  10.     GX_VALUE     gx_brush_width;               /* 画笔线宽       */
    $ A1 U6 L+ \/ c5 t( G
  11.     UCHAR        gx_brush_alpha;               /* 用于Alpha混合 */0 B, p1 w& S, I
  12. } GX_BRUSH;
复制代码

( S) e. x4 t+ o. y. f" X其中画笔样式成员gx_brush_style涉及到多个参数:( E4 _- ]% n, B' O* G5 E* Z8 F$ x
7 K$ l' x1 i$ B& g* r# E; L9 j! ~% e
  1. GX_BRUSH_OUTLINE
    0 I' D6 e0 p3 ~- F: F$ Q
  2. GX_BRUSH_SOLID_FILL
    # w$ `: l! `  W1 \- R
  3. GX_BRUSH_PIXELMAP_FILL
    ; ?9 h: \# j: ^8 m
  4. GX_BRUSH_ALIAS
    5 t& |: u1 F* y. y2 q: k
  5. GX_BRUSH_SOLID_FILL  c0 G* O* G7 N6 t* E. s
  6. GX_BRUSH_UNDERLINE
    ! W+ T  I/ G' V' j; W
  7. GX_BRUSH_ROUND
    , j& b1 B! F4 I5 j7 k0 V+ Z

  8. 5 C0 a4 U) e, R; l" ?9 W
  9. GX_CANVAS_SIMPLE
    / w1 L3 t# `7 f1 y
  10. GX_CANVAS_MANAGED
    5 @- y) o/ Y6 ?" a1 i
  11. GX_CANVAS_VISIBLE
    5 v3 l& S5 _- V7 \& h
  12. GX_CANVAS_MODIFIED
    ; X- ?9 O7 {  v" r( N
  13. GX_CANVAS_COMPOSITE
复制代码

& C2 I" q$ R& w) g8 _) [# s1 P这里将当前用到的三个样式做个说明:
" k3 r+ p: ^8 h+ J8 \; Z7 @) G$ f  A/ H
4 O* y+ E' [9 |# u  GX_BRUSH_ALIAS# u+ e" `' Y$ |8 R* |4 `  y
用于实现画线,椭圆,圆圈,多边形等抗锯齿效果。
4 |7 _6 x3 b9 p4 `9 H4 n  Y5 ?/ X) w
% ?: ~9 X6 ]* j5 P. t% V, e  GX_BRUSH_SOLID_FILL
/ U" E2 r" }1 {6 K- O$ g用于实现椭圆,圆圈,矩形,多边形等图形的填充效果,如果不使能此选项,绘制的是图形轮廓。
7 b) {1 V5 O8 E- ^5 R4 C" x/ c5 ]
3 s9 r7 f' C& K! j3 C5 }  GX_BRUSH_ROUND
: Z8 H- O0 r6 d$ t% M* _( n3 t
2 T, g) s0 x& [0 P4 G- v: |用于设置画线功能时,将直线两端的截面设置成圆形,默认是方形的。% f9 w" c- I3 j
9 U/ k# Y8 c3 q/ b6 j
13.3.3        窗口里面做2D绘制的基本框架6 F: {. c1 [- A" I& c$ e
窗口的Draw Function绘图回调函数实现框架如下,大家在这个框架里面添加自己的2D功能即可:9 b* D/ x" u8 n

+ a* R/ w& Y" w( N
  1. VOID _cbWindow0(GX_WINDOW *widget)* \' S( f; d; O
  2. {
    ! R; W2 F) n! p. T( @
  3.     GX_RECTANGLE drawto;
    + T# p7 N5 n6 t( J- g
  4.     GX_CANVAS *mycanvas;     + L- w+ s( ~/ m' s5 T
  5. , W5 \3 d# d5 k3 |
  6.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */& @6 _5 Q5 w  ~5 ]2 W
  7.     gx_window_draw(widget);
      {& `) Z1 `: j* @

  8. 2 P( h$ \2 T' S# ?
  9.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */$ W+ O3 n) _: c( k% i" h
  10.     gx_utility_rectangle_define(&drawto,0 U7 g" B, C. r2 F0 n5 J$ q
  11.                                 x0, " P- ]" [, M- w+ L4 Y7 y) a& X
  12.                                 y0,5 F8 E! p. }5 o  c  f$ f! _; x( L: F
  13.                                 x1,
    1 J! w% `$ i/ ?! v* J5 K; `. G& r
  14.                                 y1);4 p% W7 f, t& S( }
  15. " c' S2 ^' b: O9 [9 I
  16.     /* 返回窗口对应的canvas画布 */
    4 h1 W! K& G- n! j% H* |- O
  17.     gx_widget_canvas_get(widget, &mycanvas);7 D3 p6 L; a' z9 Q1 V1 G

  18. 2 V" h/ o  ]2 m7 K3 A
  19.     /* 在指定的画布上启动绘图。*/% @2 r  u4 D4 F$ N
  20.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);/ ?) q+ V! {9 M. n
  21. 0 T1 _4 I& @7 Y) e
  22.     此处添加代码,调用2D函数绘制
    # t& C; x# V; d4 r4 b: M
  23. - f/ I2 ?7 C6 j
  24.     /* 绘制完毕,用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */
    5 V) `) o9 w- {0 W$ m; B) g. w
  25.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);+ E- }3 I% c; ]
  26. }
复制代码
( S5 i% K, N% q' P
这个框架基本是固定的,大家直接调用即可,下面举一个实例来详细说明每个函数的作用。  ?% \) U0 @4 k

  S! L+ S8 S5 t/ U% w$ m13.3.4        窗口里面2D绘制实例(重要)
  @; t- N- @9 n/ p0 S0 G实例代码如下,本章教程配套例子也是用的这个代码:7 U6 M' ^4 h1 M+ B& J
, g0 o4 f. g/ o7 n/ S3 k# z. x! T7 h
  1. /*
      E8 k! [3 n3 e5 b+ j0 E
  2. *********************************************************************************************************
    ' {( b- ?7 N0 h  z
  3. *    函 数 名: _cbWindow0
    # }' Q2 N9 K/ k* a" w3 j
  4. *    功能说明: 窗口回调函数+ x& y/ r! w" ^" h. D3 H
  5. *    形    参: widget 窗口句柄( Q' \' L+ ~2 s, \, S7 A$ f" _
  6. *    返 回 值: 无/ ]- Q" F9 d  l
  7. *********************************************************************************************************
    ; S& }2 t# h0 V
  8. */9 o+ e3 \* B2 L7 Y- F
  9. VOID _cbWindow0(GX_WINDOW *widget)
      X, D% V+ G' ^& I9 N
  10. {: S) y* C8 G5 a6 I. B
  11.     GX_RECTANGLE drawto;1 z; q' ~! h8 C+ n! i" O% `
  12.     GX_RECTANGLE tempdraw;     , u* r* u9 p! b% {+ G( r0 {) o
  13.     GX_CANVAS *mycanvas; - b: G7 |9 h/ A5 o2 q6 V3 E6 O& }
  14.     GX_POINT my_polygon[3] = { { 150, 210 }, { 250, 210 }, { 200, 260 } };
    ! E% t8 t5 U% G7 e; [4 x
  15. . X9 _7 m6 c4 e% u+ t% m
  16. 6 }6 O9 i: L8 y+ h
  17.     /* 默认的窗口绘制回调函数,即默认界面效果绘制 */
    . a8 O& Q) U4 i2 [) p" G6 z: l/ l3 m
  18.     gx_window_draw(widget);+ q: t/ _  S& o6 j& g, O( R
  19. , b" H4 y6 U' N$ L
  20.     /* 定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的 */
    8 Q7 Z+ |7 c7 Y6 Q9 D' [  S( u
  21.     gx_utility_rectangle_define(&drawto,
    8 n. @  K3 o3 ]( \) ]
  22.                                 10, 6 w/ c2 N" e# u7 L" I
  23.                                 100,$ ]- p  `) f' J& s% g( V
  24.                                 400, % e: N& g* W' `
  25.                                 265);
    : |! D: G( D  P% Z! W- M: @
  26. * N& w+ E: k  L
  27.     /* 返回窗口对应的canvas画布 */) v- x1 h, `" R5 `( A3 v
  28.     gx_widget_canvas_get(widget, &mycanvas);
    9 D9 U' b2 Y9 }& f
  29. " J9 |, U5 j" V. X# W. O
  30.     /* 在指定的画布上启动绘图 */- D6 g- w( m: X; T. u* S" a4 O* s
  31.     gx_canvas_drawing_initiate(mycanvas, widget, &drawto);+ k3 G4 X; f" a! R2 N1 Y  C
  32. 7 X' C0 K( E( P- }# |* T; ~
  33.     /* 设置笔刷画线的颜色值 */6 j" ]) S  u) b/ A8 S2 ^& S
  34.     gx_context_raw_line_color_set(0xffff0000);/ N% S: V7 m3 c9 k, U
  35. 4 [0 u+ p8 }0 S4 j  `0 |4 i! G( n& g! f) D
  36.     /* 设置笔刷填充的颜色值 */   4 [! ^+ }7 r, |% F' B$ Y4 x; `
  37.     gx_context_raw_fill_color_set(0xff00ff00);% _' n$ z: e& L3 d+ w" i0 I7 Z

  38. 1 ^0 d1 t- K# o5 @
  39.     /* 通过GX_BRUSH_SOLID_FILL使能圆圈,矩形,多边形等绘制为填充效果 */: \7 u% M4 ^4 l. v/ I6 p' p
  40.     gx_context_brush_style_set(GX_BRUSH_SOLID_FILL);2 n/ y# v3 D1 t' p' L$ I4 s4 Y

  41. + ]5 W! m7 H# P/ a2 p, E" K
  42.     /* 设置笔刷线宽 */6 s: D0 a# H* p, k4 Z1 C
  43.     gx_context_brush_width_set(1);
    " @2 q+ i* @" s* k1 M# c
  44. & b0 a& U# |$ `. @, I9 u
  45.     /* 绘制直线 */4 T+ E# S) a, J: g2 \; q: y
  46.     gx_canvas_line_draw(10, 100, 50, 150);# W1 o( s0 ~7 ^* \' a7 Y5 v
  47. * y3 K2 f0 S% x0 t
  48.     /* 绘制圆圈 */. q3 o* w% b. G) Z
  49.     gx_canvas_circle_draw(120, 150, 50);/ Y2 @0 K: C0 ~  e; P
  50. / h. q) ?1 e3 J$ o, F5 ^1 C$ J
  51.     /* 绘制椭圆 */
    ; b4 h  H7 ^- j- t; `
  52.     gx_canvas_ellipse_draw(300, 150, 100, 50);6 R7 |. h( P6 D$ p: M2 E' t9 U$ @7 e
  53. 6 s7 \1 }, K& V/ Z( Y1 r# A
  54.     /* 绘制多边形 */2 H5 c- {& \1 O- ?2 }
  55.     gx_canvas_polygon_draw(my_polygon, 3);
    & K( ^& B: ]! }; G  E  f7 r' `/ v

  56. ) z1 c2 Z) `. k* |
  57.     /* 绘制矩形 */$ [8 o6 o5 L1 u* Q3 y$ b4 v1 C1 M
  58.     tempdraw.gx_rectangle_left = 30; 4 E1 Q7 \! K6 L  Z: j
  59.     tempdraw.gx_rectangle_top = 210; : R( @' T  G8 e4 e6 I  x! {
  60.     tempdraw.gx_rectangle_right = 100; ! a7 W4 j9 O" O6 S( m) K
  61.     tempdraw.gx_rectangle_bottom = 260;. ?, A8 P/ X0 B% Y% \
  62.     gx_canvas_rectangle_draw(&tempdraw);4 P- A6 c8 H0 k
  63. ' [, [+ d$ h% }8 a" h
  64.     /* 用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用 */
    ! m+ {3 H4 E4 y: t0 p  h* I
  65.     gx_canvas_drawing_complete(mycanvas, GX_TRUE);# N% D6 N: P2 {. J" }
  66. }
复制代码
  m) t! k! S; @: y4 C7 m
  gx_window_draw
: @& l5 g& k8 W6 Q# C& G$ d4 x) p, T) g2 }
作为窗口的Draw Function绘图回调函数,此函数用于窗口默认效果的绘制。+ C- G* i- {4 e

: X9 i+ ?1 h' V3 s' M3 n  gx_utility_rectangle_define
/ H' g  T1 L: |0 w" n5 C
* y% C5 y  a4 J5 ^3 Z6 W! A% f# q定义一个矩形框,后续的2D绘制函数都是在这个矩形范围内绘制的,此函数的后四个参数是左上角位置和右下角位置。* U6 A4 N4 [0 o; \+ ?( @3 w
7 R9 O4 A* O( F% u" Q$ q
  gx_widget_canvas_get+ {' Z! C2 i5 U8 Q4 U' ]% t8 c
4 m2 H! d$ \( v9 H" ?' }3 P9 m( ?
返回窗口对应的canvas画布。6 c6 i0 i2 b2 u* j1 r
4 j& u; o$ ~$ B" x; ?; }; y
  gx_canvas_drawing_initiate  B, Y! i; R  u( n+ p, ]% R
7 q% o% K8 O2 ~( `$ R9 e
在指定的画布上启动绘图。此功能在GUIX内部被延迟绘图算法调用,在需要画布时自动执行更新。 但是允许应用程序绕过延期绘图算法并立即执行。首先调用gx_canvas_drawing_inititate在画布上绘画。然后调用所需的绘图函数,最后调用gx_canvas_drawing_complete即可。
: `4 {" I5 c# _+ V$ j  g/ R
2 I6 ^5 x4 M7 A( G! [  gx_context_raw_line_color_set! q* ?, S+ ?! |

$ R; |1 {2 o% Y6 s% }' B( @2 {' N设置笔刷画线的颜色值,比如直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都是采用的这个值。注意这个颜色值是32bit的ARGB格式,每个bit代表的含义如下:  A! `) X4 _  w8 q5 d2 V% y

: E6 S5 m* h  U1 l. I
75b0550a29f8f3e8fed5735d50e07c82.png
( z* o5 G( b1 g
" C7 w1 f+ V6 @# ?
  gx_context_raw_fill_color_set2 Y3 h* ~: v2 g& ]) l

' q# X' K' j; r4 Y$ }设置笔刷填充的颜色值,比如圆圈填充,椭圆填充,矩形填充,多边形填充等都是采用的这个值。( Z5 M- h% d% O5 ?4 a

0 k. |1 \* j) D7 B. G( @( B/ r& r  gx_context_brush_style_set: ]) M' x- c8 E4 h- @# f6 q2 @
% p+ c) A. @, X" k* r' f# G3 z
用于设置笔刷的样式,我们这里设置了GX_BRUSH_SOLID_FILL,表示圆圈,矩形,多边形等绘制为填充效果。如果不设置此样式,表示仅显示一个轮廓。这里特别注意一点,各种样式参数可以通过或操作全部执行,比如GX_BRUSH_SOLID_FILL | GX_BRUSH_ALIAS。
8 P: b. }! H/ \0 P- @5 X% c& }
* g- s/ w1 q: @) S7 i  gx_context_brush_width_set( ^! ~; E& H4 c7 B
* S% m# q/ ?- V! l; E  G1 O! @
用于设置笔刷线宽,此线宽对直线,圆圈的轮廓,椭圆的轮廓,矩形的轮廓,多边形的轮廓等都起作用。注意,对于这些2D绘制,必须要设置线宽才可以正常显示。! o$ h9 H4 @8 g. d# T

, k6 d, P! t0 u0 t. x9 Q9 f  z5 \  gx_canvas_line_draw, L; P; g% N7 I! X
* e. ^1 d3 Y! B0 s- M9 j& Y
直线绘制,注意坐标位置是相对于代码中的窗口,而不是相对于gx_utility_rectangle_define定义的矩形区域。; h4 D1 l- r( i) T4 [8 P' h
! ?8 x' y# X4 y" r5 ~2 S
  gx_canvas_circle_draw
! a. h! l4 Q; m, f- C6 G. {7 {, k4 V; H9 h# n- i8 E  S
圆圈绘制,坐标含义同上。
( t" s% l: p! c7 `4 F3 B3 u7 |7 M- o5 _
  gx_canvas_ellipse_draw+ v/ P1 s3 ~. n" s7 \7 M  A
椭圆绘制,坐标含义同上。
6 j' a  K, B( T. ?& S) Y  O- O2 D3 r+ g2 o# ?* a- _$ F& O
  gx_canvas_polygon_draw
" t# u  {$ t6 q7 @4 Q0 W多边形绘制,坐标含义同上。多边形的绘制是把用户设置的几个坐标点依次连接到一起。
" @& }+ X5 Q3 G. h; v8 M& P, x2 g, `' T+ J  z* p
  gx_canvas_rectangle_draw( i+ @1 m1 p3 k6 _" ?# @
矩形框绘制,坐标点含义同上。; _$ c; A! q; d" |; D$ \

" S* [+ g  _/ [8 k) K  gx_canvas_drawing_complete
9 h2 k0 Q/ J" u* b7 w用于强制立即绘制,注意,务必和gx_canvas_drawing_initiate成对调用。
( q+ @; |- t# J: W5 s, m5 r/ J0 H) N( P9 h0 Q
针对这个实例,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。$ [5 b, U) t) X! o& `% e

0 \2 r3 M& j! P+ q! I( S13.4 实验例程设计框架

7 l9 t/ k5 F3 y+ x# n+ t7 U* C6 U3 k$ D本章例程的重点是GUIX任务的实现,任务中专门为窗口设置了一个Draw Function绘图回调函数。
+ o9 q1 D. H5 m; E% \: n9 ^  A  K9 X. H- I% s
b1fb44317c3b844ecc492ccdbcd083c5.png

, S! U1 O. H# j7 _2 T% y0 z
3 @8 C6 J  B2 D; H6 b13.5 实验例程
' B9 w% D  ~" \+ R5 ^! ]3 `, q/ h2 s(注,如果是电阻屏,需要做触摸校准,校准方法看本教程附件章节A)
# N/ L8 A1 T9 I* Z; M6 K
4 Z# ^6 @( J, F* _( o2 T& R配套例子:& g$ T) R! \2 e  T) J8 u: f$ r
# `: E$ X0 m0 F& k
本章节配套了如下两个例子供大家移植参考:
6 t# L# Q- F3 }3 t( O; b/ P4 C- V6 K/ ^7 b8 n$ e* |, D( g6 C
  V7-2011_GUIX 2D Draw" o/ ]8 L3 X' e7 S. G/ m/ W2 n& Y$ R
+ W  E% v- ^: L" z9 Z: _/ w
GUIX Studio生成的代码在硬件平台实际运行的工程,含有GCC,IAR,MDK AC5和AC6四个版本工程。) o* @1 V/ o4 f5 Z/ d6 R* M$ B  V
9 [- |; P  F/ l/ ~
  V7-2012_GUIX Studio 2D Draw% E0 T1 }# q8 S8 f6 B. a4 M

* y. C9 X; h: F$ [# j/ n# k2 u# c! xGUIX Studio工程模板,设计界面后,生成的文件可直接添加到MDK,IAR和GCC软件平台使用。
8 h( l5 k2 q' @/ H- h, {2 j4 D& c2 K
$ k% k: w( a; ~! ]: H( s4 j% m实验目的:
7 ^9 n  k& ?0 g6 e# p2 h* y* F' E$ r/ `3 B
本章主要学习GUIX的2D函数绘制。/ P; T2 {$ C& q1 K7 w6 y+ N  |; v

: z" p) N" d- |实验内容:) Y1 u* ]- J7 r: p) d5 |  l- x

# z% F) p$ J, A, b共创建了如下几个任务,通过按下按键K1可以通过串口打印任务堆栈使用情况' c  Y: f8 g3 Q& d5 H0 ?: t3 ^8 D
App Task Start任务  :启动任务,这里用作BSP驱动包处理。+ S$ S$ H, G/ j

& w* H! |: ]. O- b$ `+ Z( m3 H; O9 e* [App Task MspPro任务 :消息处理,这里用作浮点数串口打印。- c, _" q  _+ Z( S# R
9 J6 ]7 {8 l( ~3 w$ H; U, f6 A
App Task UserIF任务 :按键消息处理。0 H! Q' I. {+ W' R% X$ K

2 ^* q  o9 [8 K% UApp Task GUI任务    :GUI应用任务。4 X5 R' ~( m, G

) u& X- u  v' YApp Task STAT任务   :统计任务。
) _, l. I1 t% g) V6 B) w
8 Z3 i4 z7 T+ ^! D% m- yApp Task IDLE任务   :空闲任务。" B1 O1 J1 r& S) S  [+ G9 R& o
% i* I. P4 o; ]8 W% n5 v/ z, ^
GUIX System Thread  :GUI系统任务。6 ^0 d: Z; g4 i$ w

# Q/ k& w+ @8 P2 xSystem Timer Thread任务:系统定时器任务。
/ P5 h5 ~3 p2 j6 K1 J; c+ I. _4 I& F, G  O1 \% ^
实验效果:+ Y3 a" j6 C  @" W/ S8 `
# c% F7 ]- K) L7 ~
df5ab427f528c63c7ed28992f6755a5e.png
4 {  A& ^( ]/ b! m3 Y/ L
5 C1 N. g- E4 n' g% Q  R+ {" S9 Y
GUIX Studio的界面设计如下:( o2 b! z  Q( m$ _
2 H% k$ M% S+ i! M
7a76db10496f50ba66caf424e57be98a.png

/ l- O) h7 @3 \' t! A7 o5 A0 v! c8 {0 J+ J. n5 \
串口打印任务执行情况:
6 w7 N; Z7 o5 T' }: i8 U' @
# k) Z+ N; ?5 S7 f0 S* z5 |6 L, vIAR,MDK AC5和AC6工程可以串口打印任务执行情况:按开发板的按键K1可以打印,波特率 115200,数据位 8,奇偶校验位无,停止位 1:2 E" }) D# S# I8 ~* k
# M/ t9 D7 T- @! Z( R- z' }7 N) A
23aff8d7e272233974ae0a0724000f87.png

" S2 A4 d0 B1 G6 ?+ S; Y
5 X9 J# Y# i. C; v& \0 b  WEmbedded Studio(GCC)平台的串口打印是通过其调试组件SEGGER RTT做的串口打印,速度也非常快,打印效果如下:! [; d9 M1 o& w+ C. J: C# C% l' Z+ ?

- a  A4 i3 c. n! K
a1fefc15d92464c45718defa1497c837.png

  d1 P9 r6 {6 y- k
4 y7 L# Z, _$ m4 a- u- e3 o展示里面有乱码是因为Embedded Studio不支持中文。9 G/ F% A- R4 _( X

' A) @0 s( a, p+ Q# ?; l7 k4 d13.6 总结+ D. J: e) E0 w, K! v3 g
本章节主要为大家讲解了GUIX窗口任意位置绘制2D图形,推荐大家设置不同的参数看效果,熟练掌握这些函数的用法,这样用起GUIX也得心应手。
* ~4 z/ S; e& b# ]' T$ D9 y6 A* w1 P& ~! {

$ W8 s3 y. c/ G0 x- M5 ?# \! \7 \6 F# Y) ?" p; z, m! _

( h1 o: ^+ L6 X$ X: _, N9 V' E% q: o5 b, O* G+ `8 G" Q  ?
+ _' Y2 O. {5 U
收藏 评论0 发布时间:2022-1-1 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

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