打印
[技术问答]

AC7811怎么实现多线程功能

[复制链接]
1381|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
65652626|  楼主 | 2019-12-2 17:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
65652626|  楼主 | 2019-12-2 17:22 | 只看该作者

使用特权

评论回复
板凳
JasonLee27| | 2019-12-3 09:04 | 只看该作者
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

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

使用特权

评论回复
地板
JasonLee27| | 2019-12-3 09:07 | 只看该作者
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

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

使用特权

评论回复
5
TechHolder| | 2019-12-3 10:34 | 只看该作者
65652626 发表于 2019-12-2 17:22
@TechHolder
@JasonLee27
@AutochipsMCU

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝