[应用相关] STM32F103X8运行脚本系统

[复制链接]
2135|8
 楼主| vsfopen 发表于 2018-7-17 00:12 | 显示全部楼层 |阅读模式
本帖最后由 vsfopen 于 2018-7-17 10:46 编辑

https://bbs.21ic.com/icview-2530324-1-1.html

MCU中集成USB设备端协议栈,实现CDC串口输出系统日志,实现U盘,并且实现FAT32文件系统。
内置python实现的IDE,可以实现脚本编译、运行停止控制。并且上电自动运行脚本。
脚本支持面向对象,使用引用计数的方式。支持部分dart语法。
脚本虚拟机核心可以做到5K以下,算上一些基本扩展,最小运行环境也不到10K,最小脚本占用内存几百字节(实测环境使用1K)。
脚本编译器占用15K不到,编译器占用内存最小4K,编译完成后释放。

测试脚本:24个LED,由48个IO口空,IO引脚参数放在数组中。实现24位计数器,每500ms增加1。
  1. const LED_NUM = 24;
  2. const LED_ON = 1, LED_OFF = 0;

  3. // 2-dimension char ledarr[LED_NUM][4] for 24 LEDs
  4. var ledarr = array_create(2, 1, LED_NUM, 4);
  5. ledarr.set(0, 0, 5, 0, 5, 1);     // ledarr[0 ]: PF0  - PF1
  6. ledarr.set(1, 0, 5, 2, 5, 3);     // ledarr[1 ]: PF2  - PF3
  7. ledarr.set(2, 0, 5, 4, 5, 5);     // ledarr[2 ]: PF4  - PF5
  8. ledarr.set(3, 0, 5, 12, 5, 13);   // ledarr[3 ]: PF12 - PF13
  9. ledarr.set(4, 0, 5, 14, 5, 15);   // ledarr[4 ]: PF14 - PF15
  10. ledarr.set(5, 0, 6, 0, 6, 1);     // ledarr[5 ]: PG0  - PG1
  11. ledarr.set(6, 0, 6, 2, 6, 3);     // ledarr[6 ]: PG2  - PG3
  12. ledarr.set(7, 0, 6, 4, 6, 5);     // ledarr[7 ]: PG4  - PG5
  13. ledarr.set(8, 0, 3, 11, 3, 12);   // ledarr[8 ]: PD11 - PD12
  14. ledarr.set(9, 0, 3, 13, 4, 3);    // ledarr[9 ]: PD13 - PE3
  15. ledarr.set(10, 0, 4, 4, 4, 5);    // ledarr[10]: PE4  - PE5
  16. ledarr.set(11, 0, 4, 6, 4, 2);    // ledarr[11]: PE6  - PE2
  17. ledarr.set(12, 0, 6, 13, 6, 14);  // ledarr[12]: PG13 - PG14
  18. ledarr.set(13, 0, 3, 14, 3, 15);  // ledarr[13]: PD14 - PD15
  19. ledarr.set(14, 0, 3, 0, 3, 1);    // ledarr[14]: PD0  - PD1
  20. ledarr.set(15, 0, 4, 7, 4, 8);    // ledarr[15]: PE7  - PE8
  21. ledarr.set(16, 0, 4, 9, 4, 10);   // ledarr[16]: PE9  - PE10
  22. ledarr.set(17, 0, 4, 11, 4, 12);  // ledarr[17]: PE11 - PE12
  23. ledarr.set(18, 0, 4, 13, 4, 14);  // ledarr[18]: PE13 - PE14
  24. ledarr.set(19, 0, 4, 15, 3, 8);   // ledarr[19]: PE15 - PD8
  25. ledarr.set(20, 0, 3, 9, 3, 10);   // ledarr[20]: PD9  - PD10
  26. ledarr.set(21, 0, 3, 5, 3, 3);    // ledarr[21]: PD5  - PD3
  27. ledarr.set(22, 0, 4, 1, 4, 0);    // ledarr[22]: PE1  - PE0
  28. ledarr.set(23, 0, 3, 4, 3, 6);    // ledarr[23]: PD4  - PD6

  29. set_led(index, value)
  30. {
  31.   var port, pin;
  32.   if (value == LED_ON)
  33.   {
  34.     port = array_get(ledarr, index, 0);
  35.     pin = array_get(ledarr, index, 1);
  36.     gpio_create(port, pin).config(GPIO_OUTPP).set();
  37.     port = array_get(ledarr, index, 2);
  38.     pin = array_get(ledarr, index, 3);
  39.     gpio_create(port, pin).config(GPIO_OUTPP).clear();
  40.   }
  41.   else
  42.   {
  43.     port = array_get(ledarr, index, 0);
  44.     pin = array_get(ledarr, index, 1);
  45.     gpio_create(port, pin).config(GPIO_INPUT);
  46.     port = array_get(ledarr, index, 2);
  47.     pin = array_get(ledarr, index, 3);
  48.     gpio_create(port, pin).config(GPIO_INPUT);
  49.   }
  50. }

  51. set_ledarr(cnt)
  52. {
  53.   var index = 0;
  54.   while (index < LED_NUM)
  55.   {
  56.     if (cnt & (1 << index))
  57.     {
  58.       set_led(index, LED_ON);
  59.     }
  60.     else
  61.     {
  62.       set_led(index, LED_OFF);
  63.     }
  64.     index = index + 1;
  65.   }
  66. }

  67. var cnt = 0;
  68. while (1)
  69. {
  70.   set_ledarr(cnt);
  71.   timer_delayms(500);
  72.   cnt = cnt + 1;
  73. }


测试图片:
vsfvm_stm32.jpg
guanjiaer 发表于 2018-7-17 08:40 | 显示全部楼层
老哥啊 你发错版块了吧
 楼主| vsfopen 发表于 2018-7-17 10:47 | 显示全部楼层
guanjiaer 发表于 2018-7-17 08:40
老哥啊 你发错版块了吧

没发错,标题打错了
guanjiaer 发表于 2018-7-17 13:52 | 显示全部楼层
哦哦哦 这样啊
keaibukelian 发表于 2018-7-17 14:07 | 显示全部楼层
所谓的运行脚本 什么叫脚本呢?
 楼主| vsfopen 发表于 2018-7-17 16:13 | 显示全部楼层
keaibukelian 发表于 2018-7-17 14:07
所谓的运行脚本 什么叫脚本呢?

应该就是不直接编译为硬件直接可以运行的机器码,而是通过解释执行或者编译为中间代码然后由虚拟机执行的系统。
keaibukelian 发表于 2018-7-17 16:14 | 显示全部楼层
我还是不能理解这个东西
labasi 发表于 2018-7-17 16:18 | 显示全部楼层
脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等
 楼主| vsfopen 发表于 2018-7-19 10:26 | 显示全部楼层
脚本系统的一个例子,虽然不是在STM32F103上运行的:
https://bbs.21ic.com/icview-2483528-1-1.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

90

主题

325

帖子

8

粉丝
快速回复 在线客服 返回列表 返回顶部