[技术问答] AC7811怎么实现多线程功能

[复制链接]
181|4
 楼主 | 2019-12-2 17:22 | 显示全部楼层

使用特权

评论回复
| 2019-12-3 09:04 | 显示全部楼层
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

如果你不跑系统的话,那你就不能使用循环等待延时,所以你所有的延时都要使用定时器计数的方式延时,这样就需要把每个任务做成状态机的形式,类似switch case,然后所有的任务在while里面按需要的周期执行,这种方式是通过修改应用代码来实现的,如果你不愿意修改代码,那你可以从操作系统里面移植个任务切换的功能过来就好了,多线程无非就是找到需要执行的线程,然后进行上下文切换,你从操作系统里面把这部分移植出来,其他信号量之类的可以都不要。也能达到多线程的功能

使用特权

评论回复
| 2019-12-3 09:07 | 显示全部楼层
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

第一种方法类似这样
  1. case 1:
  2.                 OutputEnable = 1;
  3.                 GPIO_CTRL = 1;  ///À­Òý½Å
  4.                 Prepstep = 2;
  5.             break;
  6.         case 2:
  7.             delayCount++;
  8.             if (delayCount>=50)
  9.             {
  10.                 delayCount = 0;
  11.                 VCC_CTRL = 1;   ///¹Øµç
  12.                 delayCount = 0;
  13.                 Prepstep = 3;
  14.             }
  15.             break;
  16.         case 3:
  17.             delayCount++;
  18.             if (delayCount>=500)
  19.             {
  20.                 delayCount = 0;
  21.                 VCC_CTRL = 0;   ///Éϵç
  22.                 Prepstep = 4;
  23.             }
  24.             break;
复制代码
把这个代码放在1ms周期里运行,那么case2就会延时50ms执行,就能达到想要的延时效果,并且不阻塞系统。不过这种方法实现起来挺累人的,要是大家有好的建议也可以提出来。

使用特权

评论回复
| 2019-12-3 10:34 | 显示全部楼层
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

个人观点:每个任务还是像操作系统一样进行划分,或者按功能模块进行划分,但是与每个任务的执行条件都是去查询是否满足条件,满足即执行,不满足查询其他任务,当然这样的话,任务之间没有优先级之分。

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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