澳门威尼斯人官网手机网 > 控制/MCU > 正文

单片机中如何实现多线程

2018年11月08日 16:21 次阅读

随着计算机的不断发展,越来越多的,优秀的编程思想被提出来,并付诸实践。在某些方面已出现了根本性的变革。另一方面,单片机自从80年代诞生以来,便以飞快的速度发展起来,但由于其物理条件的限制,单片机控制系统的编程仍然局限于经验的模式,很少应用那些新提出的高级语言的编程思想。如果将不断发展的编程思想与广泛应用的单片机控制系统结合起来,一定会大大促进单片机控制系统的进一步发展。使其更广泛的应用于各个方面。

在下面这个具体项目中,实际情况对系统有一些比较苛刻的要求。按照一般的单线程的控制方法已经无法满足实际需求。

单片机中如何实现多线程

对象M1开始动作17操作,即首先步进电机M1(正向)转动查找光电开关信号PS1;查到后执行两次‘过程1‘。过程1:向电机打出30拍。由表1可知该动作从C 段执行到 K段停止;

对象M2即步进电机M2等对象M1执行完动作17后执行动作23等。对象M3和对象M4 则在开始时同时启动,分别执行各自的动作。各个对象之间有的独立,有的相互关联。

整个项目需要控制16台步进电机,21个电磁阀,3个泵,1个直流电机,系统要求全部执行时间为6秒钟,系统要求步进电机以其最快的速度-----40us—60us打拍。如果以单线程的方式编程让一台电机转到位之后,再转其他电机。这样16台电机打一拍就需要640us---960us已经无法满足系统要求。这就需要使单片机并行控制多台电机运转。这种以并行的方式驱动各个电机同时启动可以在最短的时间将各个电机同时到位。在转动电机的同时还需要检测一些开关量已确定电机的位置。为了实现这个目的。下面提供第一种解决方案(此方案是常用的方案之一,但作者并不推荐这个方案。因为这个方案成本太高。)。

方案一: 硬件实现。

我们可以用多个CPU,将各个电机的控制分到不同的CPU中执行,并可将不互相冲突的电机控制过程放到一个CPU中。

系统中设定一个主CPU,其功能为与计算机通讯,并将计算机下达的指令分发给相应的从CPU,更主要的是主CPU将监控整个并行控制的运作。因为各个控制过程之间有的彼此关联,所以主CPU不仅要控制各个线程的执行,还要兼顾线程之间的通讯。以表1为例,具体作法如下:

1.开始后,主CPU发给从CPU1一个信号,从CPU启动对象M1进行动作17,并由从CPU向主CPU返回一个信号。主CPU收到信号后,置起标志1。当对象M1进行完动作17后,从CPU向主CPU发出信号,CPU将标志1清掉。

2.开始后,主CPU发给从M2一个信号,从CPU启动对象M2。从CPU向主CPU不断查询标志1。当标志1被清掉后,从//控制对象2执行动作23。

3.开始后,主CPU发给从CPU一个信号,从CPU启动对象M3和对象M4。执行动作25,然后开电磁阀6,然后延时1秒,关电磁阀6,执行动作24,然后执行动作26,等////1的动作17完成后,启动步进电机20,执行动作25,等等。

如上所说, 主CPU设置了多个标志位用以跟踪各个线程的运行情况。并用这些标志位承担了各个相关线程之间的通讯。凡是线程运行到与其他线程相关的地方都会在主CPU内设置一个标志位以供其它相关线程查询。而那些不相关的线程可以完全独立运行。相关线程除了需检测标志的部分,其他部分也可独立运行。

这种多CPU控制的作法实现了单片机的并行运作方式。但多CPU的控制方案成本几乎是成倍提高,而且在硬件的基础上实现的多CPU之间的通讯花费时间稍长。并且容易有干扰。

方案二(作者推荐): 另一种实现的方法是在软件的层面上模拟多cpu的运作。从而实现单片机的伪并行处理。这种实现方法借鉴了计算机实现多线程的编程方法。

多线程编程编程思想,即:同时给CPU分配了几个任务或线程。当然计算机 CPU实际上不可能同一时间做几件事,而是把时间分到不同的线程,使每个线程都有点进展。如果一个线程无法进行,比如线程要求的键盘输入尚未取得,则转入另一个线程的工作。通常,CPU在线程间的切换非常迅速,使人们感觉好象所有的线程是同时进行的。

多线程编程中有一个很重要的环节:各个线程之间的通讯与控制问题

在多线程编程中,每个线程都用编码提供线程的行为,用数据供给编码操作。多个线程同时处理同一编码和数据,不同线程可能各有不同的编码和数据。事实上,编码和数据部分是相当独立的,需要时即可向线程提供。因此经常是几个线程使用同一段编码和数据这就会出现下面的情况

当一个线程在调用数据时,另一个线程可能正在修改这些数据。则前一个线程所调用的数据出现了不确定性。这会影响整个运行结果。为了避免这个问题,多线程编程中,各个线程之间通讯和控制尤为重要。在将多线程的思想向单片机控制系统移植时,这点要非常注意。 因为系统多线程运作的实现从其最基本的层面看仍然是单线程的操作;他的实现归根结底是利用了计算机的高速度。它将系统运行的基准时间分成了许多时间片,将各个时间片分给不同的线程,如此一来在一个基准时间内各个线程全都向前行进了一步,然后运行下一个基准时间,周而复始。这样在用户层的角度看来,各个线程是同步进行的。只要速度够块,时间片的划分不会影响用户层面上的应用,这样就可以实现多线程的操作。近年来单片机速度的大幅度提升,这就使多线程思想向单片机控制系统的移植成为可能。

在整个项目中全部的输入信号共39个;同时并行查询的对象最多时有61个系统要求以步进电机最快的速度打拍。时间约40us---60us,为了保证步进电机打拍的稳定性和灵活性。我选用了DSP内部的一个定时器,定时时间为打拍时间的1/3—1/5。设定为10us中断。这个时间为整个系统运行的基准时间。在这段时间内,系统要查询一遍所有对象并向相应的步进电机打拍。在一些线程中还需要采样多次。换句话说,在这个系统时间内。所有线程都要向前行进一步。

就像计算机一样,将这个基准时间分为多个时间片。将各个时间片分给不同的线程,在这种情况下,各个线程的执行是间断的。这与用硬件模拟多线程有本质的不同。像这样既要应用各线程执行的间断性,又要保证各线程运行的连续性。这对软件的设计有了很高的要求,这同时也是单片机控制系统用软件模拟多线程方法中的难点之一,为了解决这个问题,可在个线程自带线程进度指示器用来标志线程的运行进度,即用一个变量记载线程的每一步。

系统设定线程进度指示器用来指引线程的连续运行,同时在一个中断中轮询所有对象。其编程结构大致如下:

时钟中断:

线程1:

线程进度标志:

1: ;

2: ;

3;

线程2:

线程进度标志:

1: ;

2: ;

。。。。。。。。

技术专区

下载发烧友APP

打造属于您的人脉电子圈

关注澳门威尼斯人官网手机微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播
收藏 人收藏
分享:

评论

相关推荐

快速上手Linux,很适合入门进阶的Linux的朋友

发表于 2018-11-08 14:00 21次阅读
快速上手Linux,很适合入门进阶的Linux的朋友

STM32F103试用体验:水共震准备材料中的过...

我这次要做的东东是一个水共震系统,说明:水共震系统是指在一个水盆里,有一个执行单元,通过电机和皮带,...

发表于 2018-11-08 10:38 74次阅读
STM32F103试用体验:水共震准备材料中的过...

一文了解逻辑分析仪当中的高级参数

对于快速高效的调试,选择逻辑分析仪解决方案时,需要重点评估仪器各方面参数,逻辑分析仪在数字电路的前期...

发表于 2018-11-08 09:07 19次阅读
一文了解逻辑分析仪当中的高级参数

比较逻辑分析仪与示波器之间的区别

目前电路的发展从抽象类似向着数字化发展,因此这些测量仪器的开发也正在朝着这种条件方法迈进。 现在,在...

发表于 2018-11-08 08:55 18次阅读
比较逻辑分析仪与示波器之间的区别

基于51单片机的智能温湿度控制系统

发表于 2018-11-07 18:31 13次阅读
基于51单片机的智能温湿度控制系统

单片机控制三极管让12V电路通断

发表于 2018-11-07 16:49 113次阅读
单片机控制三极管让12V电路通断

单片机快速上手学习资料

发表于 2018-11-07 16:46 172次阅读
单片机快速上手学习资料

基于NRF403的无线传感器网络数据接收电路设计

发表于 2018-11-07 16:21 44次阅读
基于NRF403的无线传感器网络数据接收电路设计

CH55X开发资料

发表于 2018-11-07 16:16 68次阅读
CH55X开发资料

常用几种单片机的特点

发表于 2018-11-07 13:37 110次阅读
常用几种单片机的特点

苹果手机Lightning二合一音频转接头

发表于 2018-11-07 10:36 13次阅读
苹果手机Lightning二合一音频转接头

浅析单片机、ARM、FPGA 、嵌入式的特点

自带廉价的程序存储器(FLASH)和非易失的数据存储器(EEPROM)。这些存储器可多次电擦写,使程...

发表于 2018-11-07 09:54 171次阅读
浅析单片机、ARM、FPGA 、嵌入式的特点

求一个基于单片机的数字电压表设计的电路原理图

发表于 2018-11-06 17:27 91次阅读
求一个基于单片机的数字电压表设计的电路原理图

如何系统地入门学习stm32?老司机筒子们有自己...

arm 官方也开始推这种通用库了。而此时st发现一剑走天涯的方法的确有很多弊端,开始了stmcube...

发表于 2018-11-06 17:07 253次阅读
如何系统地入门学习stm32?老司机筒子们有自己...

C语言指针的高级用法

发表于 2018-11-06 16:50 96次阅读
C语言指针的高级用法

单片机无线传输系统的设计及nRF905无线收发模...

nRF905片内集成了电源管理、晶体振荡器、低噪声放大器、频率合成器、功率放大器等模块,曼彻斯特编码...

发表于 2018-11-06 16:00 59次阅读
单片机无线传输系统的设计及nRF905无线收发模...

五花八门的关于单片机的开发经验

AT89C51我认为是一个非常标准的51单片机了,4个P口,1个串口,RAM只有标准的128Byte...

发表于 2018-11-06 15:58 195次阅读
五花八门的关于单片机的开发经验

浅析单片机中断处理过程

中断处理过程可分为中断响应、中断处理和中断返回三个阶段。

发表于 2018-11-06 14:31 101次阅读
浅析单片机中断处理过程

如何使用可编程斜坡发生器外设创建参考信号和时序源

可编程斜坡发生器(PRG)(在Microchip最近推出的几款8位PIC 单片机上提供)是一种高度灵...

发表于 2018-11-06 09:15 138次阅读
如何使用可编程斜坡发生器外设创建参考信号和时序源

单片机中的定时计数器的四种工作方式解析

在单片机中有两个特殊功能寄存器与定时/计数有关,这就是TMOD和TCON。,TMOD和TCON是名称...

发表于 2018-11-05 16:11 76次阅读
单片机中的定时计数器的四种工作方式解析

借助Vivado来学习FPGA的各种配置模式

单片机是基于FLASH结构的,所以单片机上电直接从本地FLASH中运行。但SRAM 架构的FPGA是...

发表于 2018-11-05 15:12 203次阅读
借助Vivado来学习FPGA的各种配置模式

单片机IO口另外三种状态

标准 51 单片机的P0 口默认就是开漏输出,如果要用的时候外部需要加上拉电阻。而强推挽输出就是有比...

发表于 2018-11-05 11:40 278次阅读
单片机IO口另外三种状态

上拉电阻应用很多,都可以起到什么作用呢?

加大普通 IO 口的驱动能力。标准 51 单片机的内部 IO 口的上拉电阻,一般都是在几十 K 欧,...

发表于 2018-11-05 11:35 273次阅读
上拉电阻应用很多,都可以起到什么作用呢?

为何不在单片机上实现PLC的逻辑呢?

内存规划,包括堆栈区的设置,定时器,计数器的累加值和预设值地址等等,目前初步定义8个计数器的当前计数...

发表于 2018-11-05 11:31 342次阅读
为何不在单片机上实现PLC的逻辑呢?

开发单片机时需掌握的四个基本技巧

在单片机应用开发中,代码的使用效率问题、单片机抗干扰性和可靠性等问题仍困扰着。现归纳出单片机开发中应...

发表于 2018-11-05 11:21 250次阅读
开发单片机时需掌握的四个基本技巧

准备学习单片机,该做哪些准备呢?

这估计是争论最大的一个问题了,有些人坚持学单片机软件一定要用汇编,也有人坚持选择高级语言。C51刚推...

发表于 2018-11-05 11:00 259次阅读
准备学习单片机,该做哪些准备呢?

单片机为什么需要晶振?外接晶体的值可以随意选择呢...

获取稳定的脉冲!那只要有合适的方法生成稳定的脉冲,那就可以去掉外接的晶体。举例,AVR单片机,它在单...

发表于 2018-11-05 10:40 187次阅读
单片机为什么需要晶振?外接晶体的值可以随意选择呢...

MCU的内存分配详解

其中code和RO-data存储在flash中,所以两者之和为单片机中flash需要分配给它们的空间...

发表于 2018-11-04 11:24 78次阅读
MCU的内存分配详解

单片机、ARM、DSP与CPU之间的关系大揭秘

你知道单片机、ARM、DSP都是CPU吗,它们之间又有什么不同,小编进行了整理和编辑。

发表于 2018-11-02 17:38 363次阅读
单片机、ARM、DSP与CPU之间的关系大揭秘

单片机中的上下拉电阻有什么作用

上拉电阻就是将不确定的信号通过一个电阻拉到高电平,同时此电阻也起到一个限流作用,下拉就是下拉到低电平...

发表于 2018-11-02 16:22 117次阅读
单片机中的上下拉电阻有什么作用

单片机中的CY与OV详细解析

CY(Carry): 用于表示加法进算中的进位和减法运算中的借位,加法运算中有进位或减法运算中有借位...

发表于 2018-11-02 16:15 88次阅读
单片机中的CY与OV详细解析

基于STM32单片机的64Mbit单对单通信

简单的一种应用,ARM芯片作为master,flash为slaver,实现单对单通信。

发表于 2018-11-02 14:19 172次阅读
基于STM32单片机的64Mbit单对单通信

AVR系列单片机的主要特性及选型

AVR单片机是1997年由ATMEL公司研发 出的增强型内置Flash的RISC(Reduced I...

发表于 2018-11-02 09:20 236次阅读
AVR系列单片机的主要特性及选型

单片机中的冷复位和热复位是什么意思

冷复位用英文来表示是Restart,热复位用英文来表示是Reset。

发表于 2018-11-01 16:25 134次阅读
单片机中的冷复位和热复位是什么意思

单片机存储器的工作原理及选片与总线的概念解析

存储器就是用来存放数据的地方。它是利用电平的高低来存放数据的,也就是说,它存放的实际上是电平的高、低...

发表于 2018-11-01 16:15 80次阅读
单片机存储器的工作原理及选片与总线的概念解析

基于单片机的I2C和EEPROM连接

在实际的应用中,保存在单片机RAM中的数据,掉电后就丢失了,保存在单片机的FLASH 中的数据,又不...

发表于 2018-11-01 10:38 196次阅读
基于单片机的I2C和EEPROM连接

面对芯片及其相关的软件开发技术的快速发展变化如何...

单片机不是裸奔就是RTOS,其实玩过RTOS和linux的同学都知道,RTOS虽然也叫操作系统,但是...

发表于 2018-10-31 17:05 302次阅读
面对芯片及其相关的软件开发技术的快速发展变化如何...

单片机通用寄存器的分类及应用

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特...

发表于 2018-10-31 16:50 91次阅读
单片机通用寄存器的分类及应用

单片机为何不能直接驱动继电器

虽然这个问题对于电子老白来说不值一提,不过对于初学单片机的朋友,问这个问题的人实在是太多了,以前总是...

发表于 2018-10-31 16:23 354次阅读
单片机为何不能直接驱动继电器

如何实现单片机UART串行数据与CAN数据之间相...

GCAN-601模块是嵌入式单片机UART串口转CAN模块,可实现将UART串行数据与CAN数据之间...

发表于 2018-10-31 16:00 232次阅读
如何实现单片机UART串行数据与CAN数据之间相...

单片机硬件电路设计的七个原则分享

一个单片机硬件系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元,如ROM、RA...

发表于 2018-10-30 16:22 143次阅读
单片机硬件电路设计的七个原则分享

单片机实现利用中断复位的两种方式

如果想要实现利用中断复位,我所知道的有两种方式:看门狗中断和无中断服务程序的中断。

发表于 2018-10-30 15:55 213次阅读
单片机实现利用中断复位的两种方式

简单分析树莓派的优点与缺点

关于树莓派,想必从事嵌入式开发的开发者都有听过,树莓派原名为Raspberry Pi,也就是它的英文...

发表于 2018-10-30 15:08 164次阅读
简单分析树莓派的优点与缺点

Arduino/树莓派/单片机/arm区别分析

Arduino是一款由开源软件环境提供支撑的开源硬件原型平台。最早是意大利的一个团队的一个开源项目,...

发表于 2018-10-30 11:06 261次阅读
Arduino/树莓派/单片机/arm区别分析

浅谈树莓派与单片机的区别

树莓派指的是一款硬件开源的,树莓派是一个成品开发板,上面也有CPU、内存,但是它们都是以分立的芯片的...

发表于 2018-10-30 09:42 188次阅读
浅谈树莓派与单片机的区别

如何使用单片机中printf

1. 如c语言同:printf(“”);在控制台就会输出“”中的内容; 2. 通过串口输出:只...

发表于 2018-10-29 15:48 108次阅读
如何使用单片机中printf

远程代码执行漏洞现身运行内嵌式系统的流行操作系统

在主要用于智能家居及关键基础设施系统中的大部分微处理器与单片机的开源操作系统FreeRTOS中,已发...

发表于 2018-10-28 09:30 393次阅读
远程代码执行漏洞现身运行内嵌式系统的流行操作系统

STM32单片机如何超频工作超大约多少还能正常工...

根据微软学术的定义,所谓超频(OVERCLOCKING)就是强制将计算机或硬件运行于厂商指定的时钟频...

发表于 2018-10-28 09:26 452次阅读
STM32单片机如何超频工作超大约多少还能正常工...

基于单片机D/A输出程序编写分享

D/A 是和 A/D 刚好反方向的,一个 8 位的 D/A,从 0~255,代表了 0~2.55V ...

发表于 2018-10-26 16:03 104次阅读
基于单片机D/A输出程序编写分享

基于stm8s103k3单片机串口UART的正确...

我使用的是stm8s103k3,32脚单片机,这个使用手册上说了UART1,UART2,UART3。...

发表于 2018-10-26 15:43 72次阅读
基于stm8s103k3单片机串口UART的正确...

基于单片机在异形曲面在线检测系统中的应用设计

随着三维设计软件常利用对系统模拟优化分析、路况的反馈和理论的计算,能够设计出高水平曲面异形线和截面,...

发表于 2018-10-26 15:19 54次阅读
基于单片机在异形曲面在线检测系统中的应用设计

单片机中的定时器与计数器有何不同,二者的区别是什...

定时器实际上也是工作在计数方式下,只是计数的是固定周期的脉冲,由于脉冲周期固定,由计数值可以计算时间...

发表于 2018-10-26 14:58 118次阅读
单片机中的定时器与计数器有何不同,二者的区别是什...

网上单片机制作“2.4G频率计”方案之我见

注:本文是作者以前发表在其个人博客,现在发布到聚丰开发专栏 在网上看到有朋友发布一个单片机制作2.4...

发表于 2018-10-25 17:01 353次阅读
网上单片机制作“2.4G频率计”方案之我见

转学STM32的入门总结和学习步骤

大家可能是从51单片机过来的,回想一下,我们之前学单片机时如何入门呢?实际上都是先看书(理论),再玩...

发表于 2018-10-25 16:19 405次阅读
转学STM32的入门总结和学习步骤

基于单片机应用程序编写的七大步骤分享

接到一个单片机项目设计文件之后,并不是马上动手编写程序,而是仔细研究用户提出的技术要求或者技术说明,...

发表于 2018-10-25 15:37 112次阅读
基于单片机应用程序编写的七大步骤分享

基于单片机Stm32f103 DAC电流输出解决...

用的是64封装的芯, 此芯ADC的基准Vref+和电源是同一个端口,Vref-共用电源地。在电池输出...

发表于 2018-10-25 15:20 103次阅读
基于单片机Stm32f103 DAC电流输出解决...

基于单片机设计堆栈的基本概念解析

向上生长:向高地址方向生长,称为递增堆栈 向下生长:向低地址方向生长,称为递减堆栈

发表于 2018-10-25 15:16 48次阅读
基于单片机设计堆栈的基本概念解析

我被红外遥控闪了一下腰

发表于 2018-10-25 11:26 420次阅读
我被红外遥控闪了一下腰

基于KL16的指纹锁低功耗方案

ZLG基于数百厂家的需求共性,设计了基于NXP KL16的指纹锁方案,单触摸休眠状态下达到7.52u...

发表于 2018-10-25 10:26 416次阅读
基于KL16的指纹锁低功耗方案

学STM32对你来说有什么好处

STM32是32位的单片机却只要八位单片机的价格,速度也是八位的好几倍。

发表于 2018-10-25 09:06 1394次阅读
学STM32对你来说有什么好处

如何利用单片机来驱动继电器

注意:单片机的IO口驱动能力不够,加一片ULN2003来驱动继电器,一个ULN2003可以驱动7个继...

发表于 2018-10-24 16:02 188次阅读
如何利用单片机来驱动继电器

基于51单片机直流电机PWM调速程序

这是一款AT89C51单片机直流电机PWM调速程序,程序可以直接用于AT89C52、AT89S51、...

发表于 2018-10-24 15:56 385次阅读
基于51单片机直流电机PWM调速程序

打破思维定式——两种键盘扫描方法比较分析

发表于 2018-10-24 11:24 316次阅读
打破思维定式——两种键盘扫描方法比较分析

应广双核单片机应用提示

发表于 2018-10-24 11:24 247次阅读
应广双核单片机应用提示

用一条IO口实现两个按键功能

发表于 2018-10-24 11:24 271次阅读
用一条IO口实现两个按键功能

基于S3C6410裸机程序中可能用到的函数分享

*函数:voidSetEINT_TriggerMode(u8EINT0_N,u8Trigger) ...

发表于 2018-10-23 16:00 61次阅读
基于S3C6410裸机程序中可能用到的函数分享

基于LED图文显示屏控制系统的设计

LED显示屏系统组成 LED图文显示屏系统由软件控制系统、无线传输系统、设备主控制器、LED显示点阵...

发表于 2018-10-23 15:35 215次阅读
基于LED图文显示屏控制系统的设计

双核单片机之初体验--2

发表于 2018-10-23 10:08 271次阅读
双核单片机之初体验--2

双核单片机之初体验--1

注:本文是作者以前发表在其个人博客,现在 发布到 聚丰开发专栏 不 经意间,酷睿双核已经成为电脑CP...

发表于 2018-10-23 09:08 571次阅读
双核单片机之初体验--1

单片机的构成及功能特点解析

单片机是一种控制芯片,一个微型的计算机,而加上晶振,存储器,地址锁存器,逻辑门,七段译码器(显示器)...

发表于 2018-10-22 15:23 119次阅读
单片机的构成及功能特点解析