MicroPython-python自启动硬件测试

发表在 MicroPython2018-12-6 08:20 [复制链接] 6 296

实验平台:
2 h  E+ v% s# \, O, K开发板型号:SM1432F405
9 ]8 P4 m! }* U2 X单片机型号:STM32F405
4 w+ s) G: S( o7 t, P实验目的:! r2 u2 Y# c, \; j7 _2 d
1.学习RT-Thread操作系统的Micropython组件用法
5 y5 ?3 _; Y/ i" ~! r. u7 r: k2.学习python脚本编写程序控制硬件的方法! j% ^- \4 n8 j; n$ n, X" E: w
3.学习通过系统线程自动执行python脚本
! x2 j9 C3 i# t! p& xpython脚本编写:+ N5 o2 M5 Y4 R4 q# P
  1. import time; ~+ r; U6 J' o# R4 d  d( F& W
  2. from machine import Pin
    5 m6 N% D  j4 K
  3. 5 j, I/ V* T6 j; M
  4. LED = Pin(("LED1", 25), Pin.OUT_PP)          #将第52号 Pin 设备设置为输出模式5 _$ p  L/ f" ^, A' r
  5. while True:
    9 P) D5 E5 r0 K! ^! o, I7 r
  6.     LED.value(1)0 |" c# z6 o  l- J! |4 w! D
  7.     time.sleep_ms(500)3 A0 C( S) B& A- m' [( l( ^
  8.     LED.value(0)' g+ ]( @. Z- [% H
  9.     time.sleep_ms(500)
复制代码
将此脚本保存成main.py文件放到sd卡中,通过串口终端运行程序
$ r. x! q$ v" B# I5 L# I
  1. python main.py
复制代码
此时可以看到开发板上的LED灯闪烁,说明程序正常运行。
# J/ J. _" X, P1 K5 A( R- D3 `  d7 S" R# Y/ M
5 H( v& Z5 H, K3 c# v; u0 s
线程代码编写:/ p7 G. C/ S- u7 T) {2 y
  1. /*+ d' j, s# B- q1 ^$ I) F
  2. * 程序清单:跑马灯例程9 Z" }4 @/ N( ~8 C% _* L5 n
  3. *
    7 a# p% I2 l, P0 W& d
  4. */
      j1 @# A/ {1 Y; O$ ?* c. {

  5. 8 P7 m' d0 k9 I5 O
  6. #include <rtthread.h>. r2 |& Q' D2 O: E
  7. #include <stdint.h>8 y9 Y5 \# S+ a/ `9 i
  8. #include <stdio.h>, F; ~. q' B8 w9 A
  9. #include <stdlib.h>4 l4 V7 F+ t; s3 j& |1 o/ ^
  10. #include <msh.h>
    + b' ~- A( c' T" d  E" b

  11. % n" u% _! U) p/ \, `
  12. extern void mpy_main(const char *filename);6 G$ P: p0 i8 F8 S

  13. 7 `& {' j2 ~: I( n/ [' F) W4 \8 ?; w
  14. ALIGN(RT_ALIGN_SIZE)
    ( c, _6 s5 A9 O; `5 J
  15. /* 静态线程的 线程堆栈 */
    * [* |: `  m6 _5 W. K9 `
  16. static rt_uint8_t mpython_stack[1024*8];3 l  N- o- z) @3 P; `
  17. /* 线程的 线程控制块 */9 `+ h  B2 x% L, {* Q, c
  18. static struct rt_thread mpython_thread;
    " I5 y0 D, s- b/ K2 D+ W; A
  19. 8 Q8 K! H3 U+ X- ~
  20. /* 启动python脚本线程实现  */7 g3 ?% r9 I) Y* o+ H# j, g
  21. static void mpython_thread_entry(void *parameter)
    6 Y( x: L' E% e8 _' F4 U
  22. {. A+ a8 w- a! p3 G& S2 `
  23.     6 g+ n6 d7 `/ H' ?* Q; z0 G) I) X
  24.     while (1)
    . i  g3 }) u# r
  25.     {
    ) [6 ~* N5 r1 X. r8 m( p& U! i
  26.        $ ~; z* \+ ]$ O
  27.         mpy_main("main.py");( h* K/ C% T& I
  28.       
    2 L" h/ _! a- J5 S, i
  29.         while(1);7 u+ J- J# t5 _9 R" s$ @
  30.     }8 [4 M0 Q3 [) V% S( @6 C6 ~" A
  31. }6 b; h. m" O& N4 `

  32. / F- \1 H3 T) V0 ]% |
  33. /* 线程初始化以及启动线程*/
    & {  U0 \5 W$ ~& T/ k  g# z- M( S
  34. int mpython_init(void)% y# B/ I, C8 i: ?
  35. {/ Y: X# @! O  h
  36.     rt_err_t result;0 F) Z9 t( m, J" E9 T
  37. . a: s0 r7 T5 C7 A4 f, S
  38.     /* init led thread */( t8 O0 U) K; `% g; @4 O; q
  39.     result = rt_thread_init(&mpython_thread,             /* 线程对象 */
    # n& ?; g! r/ j( ^$ a7 N
  40.                             "mpy_thread",                /* 线程名称 */
    4 `: e9 p, b( f3 A, `
  41.                             mpython_thread_entry,        /* 线程     */
    : V# l( o! m. b7 D& A/ L, u5 k
  42.                             RT_NULL,& V1 ?" h) L$ ^7 [% ~
  43.                             (rt_uint8_t *)&mpython_stack[0], /* 线程堆栈地址 */
    ( o& X- f7 u5 Z8 c
  44.                             sizeof(mpython_stack),           /* 线程堆栈 */5 [( Z( @# m% E5 c  f7 l
  45.                             2,                          /* 线程优先级 */
    . I. x" T$ u. J2 ~  U
  46.                             60);                         /* 时间片 */
    ; ^9 T5 ~, H& w3 {- R+ |
  47.     if (result == RT_EOK). G; w" G8 _3 ~9 M0 ?* j( \
  48.     {- R8 I) u! K6 F' o/ J! s
  49.         rt_thread_startup(&mpython_thread);              /* 启动线程 */, R/ }4 N$ f: I6 u+ N
  50.     }+ H& F7 x5 J$ B, s. H8 V$ ^1 c
  51.     return 0;( G0 g; R. W9 [; d
  52. }
    3 O3 i0 `- m2 L) ?+ z3 w

  53. 6 v8 `  F$ r( G" l& T$ V' e
  54. INIT_APP_EXPORT(mpython_init);9 l; J$ S! f+ x, q" U' G4 T/ h2 D
复制代码
将代码放到applications目录中,编译代码,下载程序到开发板中,复位开发板,此时开发板上的LED灯开始闪烁,说明程序正常运行。
0 X7 W) U3 }/ V7 V4 @4 s# ]
7 Y: c" K0 S" p, I$ Y8 _: L. I. k" R& H2 R# B/ O8 F
9 b  o" f) f/ M* z/ W& f: p
  }/ v- H$ [6 M7 D4 }- ?4 Q
使用道具 举报 显示全部楼层 回复
最新评论 | 正序浏览
显示全部楼层 |楼层直达:
发表于 2018-12-6 13:04:04 | 显示全部楼层
也可以用 msh_exec 函数,在代码上实现 msh 命令调用
使用道具 举报 回复
发表于 2018-12-6 15:45:51 | 显示全部楼层
  1. static void mpython_thread_entry(void *parameter)3 s" X; ]7 m+ b! G
  2. {
    4 I/ V# _% X1 h. E
  3.     char py_cmd[] = "python main.py \r\n";
    - r4 z/ {1 P! g* j+ T8 F. {
  4.     while (1)
    % ?$ k. j. N! E# R# M5 K! @5 K/ x
  5.     {7 T3 i% U5 m% Y) i
  6.       
    ) V' G3 L: e4 V5 U- ^2 d
  7.    
    : ~& {2 g: }8 B6 Z) T7 v
  8.        msh_exec(py_cmd, rt_strlen(py_cmd));
    - M2 ^7 g& u2 O
  9.         while(1);" r1 W2 m# `) S4 k; ?, t
  10.     }. P  {3 x8 }1 K+ P
  11. }
复制代码
使用道具 举报 回复
发表于 2018-12-6 15:47:15 | 显示全部楼层
这段代码不好用,如果把while去掉的话,就一直执行python main.py这个脚本停不下来,不知道这里怎么修改
使用道具 举报 回复
发表于 2018-12-6 16:24:47 | 显示全部楼层
  1. msh_exec(py_cmd, rt_strlen(py_cmd));
    & H1 ~8 P4 x' v( p
  2. msh_exec("python", strlen("python"));
复制代码

0 n* b  o3 I, Y$ Y6 _6 G  |3 P! Z" n9 J0 n$ s
试试上面代码,确认下是不是你想要的效果?
使用道具 举报 回复
发表于 2018-12-6 16:46:02 | 显示全部楼层
strlen这个函数的头文件在那里,第一行是执行python脚本,第二行做什么用的
使用道具 举报 回复
发表于 2018-12-6 17:58:24 | 显示全部楼层
sunlichao 发表于 2018-12-6 16:46
4 e5 R4 a7 ^- n) istrlen这个函数的头文件在那里,第一行是执行python脚本,第二行做什么用的

" e) [5 ?) B2 S7 e第二行是进入 python 交互环境呀
使用道具 举报 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

Powered by RT-Thread

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