MicroPython-python自启动硬件测试

发表在 MicroPython4 天前 [复制链接] 6 60

实验平台:( y" J5 ^7 @$ g  W' f6 }
开发板型号:SM1432F405
; H" W7 C+ V8 \6 }# o! m+ h. a; t单片机型号:STM32F405
. x, ^% T  m" ?4 `( @实验目的:
" t5 z; C3 Y! F( E1.学习RT-Thread操作系统的Micropython组件用法
% b/ i+ }" G/ [; _8 K4 d/ V2.学习python脚本编写程序控制硬件的方法
  r! m& M4 o' o4 k5 `7 P6 |3.学习通过系统线程自动执行python脚本* C/ m, k0 C. {) \
python脚本编写:
8 o' F% {3 W, q: g
  1. import time
    $ A; ~& {, @5 H4 O# f& Q
  2. from machine import Pin' j$ u' @5 B) ?5 B/ X

  3. / {: O7 a0 S7 `2 ]4 ~4 x
  4. LED = Pin(("LED1", 25), Pin.OUT_PP)          #将第52号 Pin 设备设置为输出模式4 `# [8 |) O0 K0 `% a( h0 l
  5. while True:2 G( }" L) v4 t
  6.     LED.value(1)
    0 p1 F1 l: }) B- z# q+ w
  7.     time.sleep_ms(500): U0 e6 F( v% @7 \5 X  ]
  8.     LED.value(0)
    " L! P0 g5 N0 L' t) u
  9.     time.sleep_ms(500)
复制代码
将此脚本保存成main.py文件放到sd卡中,通过串口终端运行程序8 l" C- R2 V5 W* A. B
  1. python main.py
复制代码
此时可以看到开发板上的LED灯闪烁,说明程序正常运行。
7 e/ z5 a( S" R- u, o/ M, R; a# k3 j

2 l9 D. N4 h* K( `1 V5 O2 D线程代码编写:
% w" o$ {" U; ~" A/ k
  1. /*+ `# W- Y, w% L) J
  2. * 程序清单:跑马灯例程
    / n5 o  \) _) Z$ H8 \! q1 J5 g$ l
  3. *( y/ h0 X2 s1 T8 D1 G4 c% z
  4. */' r! l  J, q2 |

  5. 8 e" N' Y( c. o% i3 L) g2 t
  6. #include <rtthread.h>
    7 Y& I' L' x. Y& B
  7. #include <stdint.h>1 c  x4 n3 U( P. v
  8. #include <stdio.h>
    ; ~" s1 g2 \4 w! V- E
  9. #include <stdlib.h>
    5 `: B$ L& B$ }, C
  10. #include <msh.h>
    0 L' I. x: _. P4 N5 I( d

  11. ( X8 l" T  z6 W; ?) H
  12. extern void mpy_main(const char *filename);
    3 b+ v. [" a4 Y/ B% b5 h& t- Y

  13. , r' y- J" d& @5 {1 Z$ @$ e
  14. ALIGN(RT_ALIGN_SIZE)
    ) M' R7 l6 z. r0 P( x, k' `1 }
  15. /* 静态线程的 线程堆栈 */
    ( k6 r* |3 ?( K+ i/ R
  16. static rt_uint8_t mpython_stack[1024*8];
    ! r+ W2 u, e6 B5 K$ \$ O$ O, g) q
  17. /* 线程的 线程控制块 */) _. F2 u: U, E; D( N) w7 J
  18. static struct rt_thread mpython_thread;4 v+ T5 R( ^9 H# M2 L1 \8 x5 W

  19. * N5 S+ L$ w6 q' _" ~; W
  20. /* 启动python脚本线程实现  */9 _1 x, F1 P& |1 c# T
  21. static void mpython_thread_entry(void *parameter)
    " b. I: X+ H2 |
  22. {
    ) }  \( Y) c, N) _' C
  23.     ' J% B) W/ D% ?
  24.     while (1)
    3 W6 v, A& v2 d
  25.     {
    9 E; d8 @7 w$ m/ \* ~  t& O
  26.        ; s$ d" H8 z" |7 L
  27.         mpy_main("main.py");' i- B6 |% e' O) z4 D
  28.       
    ' Y6 t; _1 S8 I# v5 I( E" A9 i: U
  29.         while(1);
    " Y& S# m6 p2 r/ r" ]% z
  30.     }! w7 @5 [6 L+ v3 R* X' T
  31. }
    ! d) P6 ~7 J$ Y( [

  32. 5 O+ l7 Q/ z. H) s
  33. /* 线程初始化以及启动线程*/! J& l1 ?2 g; y& k
  34. int mpython_init(void)
    ) f" V7 c/ |5 O7 C% M  {
  35. {" f. C. L) p1 T* B0 h! N
  36.     rt_err_t result;
    7 j8 j- F6 X( l% F( p

  37. # Q2 X/ T8 j- N0 Z% o4 p0 ~/ D
  38.     /* init led thread */  ^. {7 w2 G5 _, k3 O$ L' g: J' \
  39.     result = rt_thread_init(&mpython_thread,             /* 线程对象 */$ E+ y& e$ ^; x2 R1 c
  40.                             "mpy_thread",                /* 线程名称 */4 M; z- S4 o* C0 z3 W, t
  41.                             mpython_thread_entry,        /* 线程     */" s$ ~: H' f% `3 I( R& t
  42.                             RT_NULL,+ L: a. F7 h( U' Z) t
  43.                             (rt_uint8_t *)&mpython_stack[0], /* 线程堆栈地址 */
    7 r6 _) e7 I  \8 i5 }* b( I+ r
  44.                             sizeof(mpython_stack),           /* 线程堆栈 */6 m) \6 G: ]* E- N7 I
  45.                             2,                          /* 线程优先级 */2 D. c; E, [6 o2 z3 q6 [/ o
  46.                             60);                         /* 时间片 */6 W2 n5 j7 {" i, a- ]7 |% b
  47.     if (result == RT_EOK). k$ k* N# m( b+ b: r4 V
  48.     {
    - I# c: q  z6 w% u0 r
  49.         rt_thread_startup(&mpython_thread);              /* 启动线程 */
    9 ]2 G! M+ ^- r) u
  50.     }; K* Z2 p. W5 T- S8 p; L1 D
  51.     return 0;* q2 V2 @; x7 N$ V, v& b
  52. }
    ; c7 N3 k" j6 n" x+ f

  53. % k+ z8 W; ?1 Q# J/ }/ y8 _) d
  54. INIT_APP_EXPORT(mpython_init);
    ) |7 g) X* D. @/ s  C* i
复制代码
将代码放到applications目录中,编译代码,下载程序到开发板中,复位开发板,此时开发板上的LED灯开始闪烁,说明程序正常运行。/ W/ ]( d* |! d" e5 Q
' e; c& d5 a4 W& `

+ U' j4 q/ b2 H& o' L1 O; s
+ C4 O& q) P; [
; t* r8 j2 |; z% w
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 4 天前 | 显示全部楼层
也可以用 msh_exec 函数,在代码上实现 msh 命令调用
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
  1. static void mpython_thread_entry(void *parameter)4 A$ l( m4 {& o2 }& \& z& P
  2. {3 `' |! M% ~" e# m- @! Y  d
  3.     char py_cmd[] = "python main.py \r\n";: d1 W: ]( E9 y
  4.     while (1)
    2 C3 n+ W2 M+ R9 s% v/ B
  5.     {3 ]' E/ S8 o1 \" I
  6.       
    5 ^6 A$ q: o7 X7 ]0 o3 o- J# e
  7.    , X/ x3 R- f* @, f7 A- H# ?7 U6 e
  8.        msh_exec(py_cmd, rt_strlen(py_cmd));/ k' u5 t8 T8 H* O8 ~; m
  9.         while(1);
    ! v4 y) u" E! o7 t( j1 X: J
  10.     }
    - a* i* Q$ C, D- Q6 W! Q
  11. }
复制代码
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
这段代码不好用,如果把while去掉的话,就一直执行python main.py这个脚本停不下来,不知道这里怎么修改
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
  1. msh_exec(py_cmd, rt_strlen(py_cmd));3 D% M! u% Q4 C  S! U' V
  2. msh_exec("python", strlen("python"));
复制代码
9 ]( R' ]$ x3 }$ d/ c6 _. `) g+ b

0 Q5 c" K' e8 `6 p: _: Y试试上面代码,确认下是不是你想要的效果?
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
strlen这个函数的头文件在那里,第一行是执行python脚本,第二行做什么用的
使用道具 举报 回复
发表于 4 天前 | 显示全部楼层
sunlichao 发表于 2018-12-6 16:46
7 O8 p/ r% C; T6 w$ k' Lstrlen这个函数的头文件在那里,第一行是执行python脚本,第二行做什么用的
3 g, p; ]9 |- j' _3 C
第二行是进入 python 交互环境呀
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|RT-Thread开发者社区  

© 2013-2017 上海睿赛德电子科技有限公司 沪ICP备13014002号-1

Powered by RT-Thread

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