历史上的今天
返回首页

历史上的今天

今天是:2026年03月14日(星期六)

2023年03月14日 | 单片机能实现真正的多线程吗?

2023-03-14 来源:zhihu

所谓多线程都是模拟的,本质都是单线程,因为cpu同一时刻只能执行一段代码。

模拟的多线程就是任务之间快速切换,看起来像同时执行的样子。

据说最近有多核的单片机,不过成本应该会高很多。

对于模拟的多线程,我知道的有两种方式:

1.基于时间片的轮询系统

我自己就写过这样一个系统,原理就是用systick给系统提供一个时间基准,一般我用10ms。

然后把整体产品功能成不同的任务(线程),并且为每个任务分配一个时间片。

我红色框标注的每个任务调度的时间,1代表10ms,50则代表500ms,每个任务执行的频率可以不同,方便释放cpu资源给更需要的任务。

主函数的循环里一直判断每个任务的状态。

这里我把任务直接封装成结构体,通过函数指针的方式去调用,方便不同的任务集中管理。

如果任务就绪,就执行,等该任务执行完,下一个任务才能执行,所以本质还是轮询。

只是每个任务可以灵活分配调度时间,不重要的任务执行次数少,重要的任务执行次数多,看起来像多线程的效果。

这种方式比传统的while(1)去轮询在程序架构上会好一点,任务管理和调度也灵活很多。

缺点就是任务在执行过程中无法被打断,不能马上切换到别的任务去执行。


推荐阅读

史海拾趣

Fastron公司的发展小趣事

Fastron公司非常重视与客户的合作关系。公司始终坚持以客户为中心的服务理念,为客户提供优质的产品和服务。Fastron不仅关注客户的需求和反馈,还积极与客户沟通合作,共同推动产品的升级和优化。这种紧密的合作关系使得Fastron与客户之间建立了长期稳定的信任关系,为公司的持续发展提供了有力保障。

HEIMANN公司的发展小趣事

Fastron公司起源于XXXX年的德国,凭借其卓越的技术和产品质量,逐渐在电感器领域崭露头角。随着业务的发展,Fastron不仅保留了德国的精湛工艺和严格品质控制,还成功地将业务拓展到了东欧和东南亚。这些地区的生产设施均通过TS 16949和ISO 14001认证,确保了产品的全球统一品质。

Greenliant公司的发展小趣事

GPS公司成立于2010年,初期专注于可再生能源存储解决方案的研发。随着全球对清洁能源需求的增长,GPS开发了一款高效能的锂离子电池储能系统,该系统能够在电力需求高峰时自动释放电能,平衡电网负载。这一技术突破迅速吸引了投资者的关注,并在几年内成为市场上的领先产品。GPS通过不断优化电池管理系统和智能控制算法,进一步提升了储能系统的效率和安全性,逐步在全球范围内建立了稳定的客户群体。

Charcroft Electronics Ltd公司的发展小趣事

在电子行业的早期,Charcroft Electronics Ltd公司以其对新兴技术的敏锐洞察力和创新研发能力脱颖而出。公司不断投入研发资源,开发出一系列具有竞争力的电子元器件产品,这些产品以其优异的性能和稳定性赢得了市场的广泛认可。同时,公司还积极与高校和研究机构合作,共同探索新的技术应用领域,为公司的长远发展奠定了坚实的基础。

E-San Electronic Co Ltd公司的发展小趣事

E-San Electronic Co Ltd非常重视人才培养和团队建设。公司建立了完善的培训机制,为员工提供了各种专业技能和综合素质的培训机会。同时,公司还注重员工的职业规划和晋升通道建设,为员工提供了广阔的发展空间和良好的职业前景。这些措施不仅提升了员工的综合素质和业务能力,也为企业的发展注入了源源不断的活力。

Brainboxes公司的发展小趣事

Brainboxes拥有一流的内部制造设施和全球供应链,这使得公司在产品研发和生产方面具有极大的灵活性。内部制造设施保证了产品的高品质和快速交付,而全球供应链则确保了公司能够及时获取所需的原材料和零部件。这种高效的生产模式使得Brainboxes能够迅速响应市场需求,为客户提供优质的产品和服务。

问答坊 | AI 解惑

关于存储器数据保存

请问,怎样把存储器的任意地址赋给一个数组的初地址?(用C语言怎么写)…

查看全部问答>

FPGA设计指南

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 我收藏的英文版和中文版对照的FPGA设计指南,不错的阿。说实话,在论坛里看东西都要钱 缺少金币啊,对不住大家了 但是我的不贵阿 呵呵。。我会后续继续传点资料的。 [ 本帖最后由 五月一 于 2009-8- ...…

查看全部问答>

讨论一下,怎样从非正弦的信号中快速取出正弦信号?

热烈讨论,等待大家发言,工业应用,必不可少!…

查看全部问答>

关于线程的问题,高分求助

现有3个线程Status, GetData,Process. Status用于判断设备的状态,当设备准备好后向GetData线程发送ready事件 GetData在得到ready事件后从设备采集数据,采集完毕后向Process线程发送done事件, Process线程得到done事件后开始处理数据。 ready ...…

查看全部问答>

求单片机开发老师,要求会Silicon Labs 芯片(最好在厦门),价钱qq 联系.

我主要是学习Silicon Labs芯片.有一定编程基础.对电子电路略懂一点.求最好在厦门的单片机开发的老师. 有无刷电机开发的最好.…

查看全部问答>

vxworks 调试

当我在windsh里面   输入主函数 -> user_start value = 0 = 0x0 问题会出在哪呢? 我编译下载都操作过了~ 程序源代码如下: #include \"vxWorks.h\" #include \"taskLib.h\" #include \"logLib.h\" #include \"wdLib.h\" int ...…

查看全部问答>

详解LED用透镜相关知识点

透镜是根据光的折射规律制成的。透镜是由透明物质(如玻璃、水晶等)制成的一种光学元件。透镜是折射镜,其折射面是两个球面(球面一部分),或一个球面(球面一部分)一个平面的透明体。它所成的像有实像也有虚像。透镜一般可以分为两大类:凸透镜 ...…

查看全部问答>

stm32的时钟源问题

um0427\\Project\\Examples\\TIM\\TimeBase例程中, /* ---------------------------------------------------------------     TIM2 Configuration: Output Compare Timing Mode:      TIM2CLK= 36 MHz, Pr ...…

查看全部问答>

ARM RealView ICE Debugger V3.2

谁有ARM RealView ICE Debugger V3.2 工具,或者可以有相同的功能的工具。 我需要,可以购买。  …

查看全部问答>

把一个IO口设定为开关,用手轻碰IO口,就变开的状态,这是为什么?

把一个IO口设定为开关,用手轻碰IO口,就会变开的状态,然后我换一个端口也一样,这是为什么?…

查看全部问答>