搜索
bottom↓
回复: 15

求助流水线型的单片机任务程序架构怎么写好

[复制链接]

出0入4汤圆

发表于 2018-10-18 11:10:57 | 显示全部楼层 |阅读模式
各个任务由上位机进行编辑发送过来保存,单片机进行各个任务处理。
一直是裸奔的,不知道这样裸奔好不好操作。没思路了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入8汤圆

发表于 2018-10-18 11:23:51 | 显示全部楼层
给每个任务分个ID,然后上位机把ID按顺序发下来,单片机按顺序执行

出0入4汤圆

 楼主| 发表于 2018-10-18 11:26:15 | 显示全部楼层
canspider 发表于 2018-10-18 11:23
给每个任务分个ID,然后上位机把ID按顺序发下来,单片机按顺序执行

上位机目前是给每个任务建立id了。但是想想单片机底层,裸奔的话,怎么组合这些任务

出0入4汤圆

发表于 2018-10-18 11:36:01 | 显示全部楼层
上位机直接调用函数

出0入0汤圆

发表于 2018-10-18 11:36:04 | 显示全部楼层
你做一个结构体 有任务编号和执行函数,
放到一个数组里面,看到编号就执行对应的函数就好了

出0入0汤圆

发表于 2018-10-19 17:16:48 | 显示全部楼层
链表

出0入0汤圆

发表于 2018-10-19 17:30:03 | 显示全部楼层
可以触发动作, 不同的参数怎么处理?  void*?

出0入0汤圆

发表于 2018-10-19 18:50:45 | 显示全部楼层
本帖最后由 dxgdsx 于 2018-10-19 18:52 编辑
  1. typedef struct  
  2. {
  3.         uint8_t task_id;
  4.         void(*task_func_ptr)(void *data);
  5. }task_t;


  6. void task1_func(void *data)
  7. {
  8.         //do something
  9. }

  10. void task2_func(void *data)
  11. {
  12.         //do something
  13. }

  14. void task3_func(void *data)
  15. {
  16.         //do something
  17. }

  18. void task4_func(void *data)
  19. {
  20.         //do something
  21. }

  22. void task5_func(void *data)
  23. {
  24.         //do something
  25. }

  26. task_t task_list[5] = {
  27.                 { 1, task1_func },
  28.                 { 2, task2_func },
  29.                 { 3, task3_func },
  30.                 { 4, task4_func },
  31.                 { 5, task5_func }
  32. };

  33. task_t *pTask = &task_list[0];

  34. int main(void)
  35. {
  36.         int data;
  37.         uint8_t cmd_group[10]; //
  38.         uint8_t i, cmd;

  39.         while (1)
  40.         {
  41.                 //从上位机获取命令组
  42.                 receive_cmd_from_pc(cmd_group);

  43.                 for (i = 0; i < 10; i++)
  44.                 {
  45.                         //获取单个小任务对应的命令
  46.                         cmd = cmd_group[i];
  47.                         //执行该命令对应的小任务
  48.                         (pTask + cmd)->task_func_ptr(&data);
  49.                 }
  50.         }

  51.         return 0;
  52. }
复制代码

出0入4汤圆

 楼主| 发表于 2018-10-19 19:08:54 | 显示全部楼层

感谢,跟我设想的也差不多。
不过感觉不能用到for循环,要用分时执行任务,任务完成后做好标志。

出0入0汤圆

发表于 2018-10-19 19:21:45 | 显示全部楼层
bbandpp 发表于 2018-10-19 19:08
感谢,跟我设想的也差不多。
不过感觉不能用到for循环,要用分时执行任务,任务完成后做好标志。 ...

具体细节根据你的项目细节来定,大框架这样应该是可行的。

出0入0汤圆

发表于 2018-10-19 20:01:32 来自手机 | 显示全部楼层
bbandpp 发表于 2018-10-19 19:08
感谢,跟我设想的也差不多。
不过感觉不能用到for循环,要用分时执行任务,任务完成后做好标志。 ...

分时执行任务是什么意思啊不是顺序执行任务序列吗?

出0入8汤圆

发表于 2018-10-19 20:44:53 | 显示全部楼层
那就上个 os  用最简单的任务调度就行了。

出0入0汤圆

发表于 2018-10-19 21:42:40 | 显示全部楼层
楼主这样用链表啊,上位机发送过来就增长,然后遍历运行就可

出0入4汤圆

 楼主| 发表于 2018-10-19 22:49:44 | 显示全部楼层
这样表述可能更详细点attach://433647.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入228汤圆

发表于 2018-10-20 11:55:56 | 显示全部楼层
Protothread
不二选择.

出0入4汤圆

 楼主| 发表于 2018-10-20 11:58:16 | 显示全部楼层
wxws 发表于 2018-10-20 11:55
Protothread
不二选择.

感谢,提供了新思路
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-18 04:39

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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