多任务"并行处理"
首先我们来理解一下并行处理,初学者写程序通常是顺序执行,当我们逐渐想成为“专业”人士的时候顺序执行 的程序已经不能满足我们了,所以就需要多任务多线程系统,市面上标准的一些操作系统比如ucos,freeRTOS这些操作系统需要的学习周期长,范围广。在网上看到了一本书"单片机编程魔法师之高级裸编思想"在没学会ucos的阶段学习用这种思想过度感觉非常nice!
单片机是支持多任务同时并行地运行在一个系统中,在具体介绍之前先看一看单片机的硬件结构
这个图中我们可以看出,单片机的运行是在ALU的主导下进行的;而定时器指是一个定时装置,它在定时计数期间是无需ALU干预的,完全独立运行;串口的通讯单元对数据的接收与发送也是完全独立完成的,并不需要ALU干预。很显然这三个任务是并行处理,切互不干涉,只有在定时器或串口产生中断时才会到代码中临时运行一段程序,已向单片机的主体运行过程交付一下结果,以便进行汇总处理。
微操作系统
简单一点来说就是一个while(1)但是while中我们采用多任务多线程的方式管理。首先我们要知道任务有生死,生死是一个过程所以具有寿命。
一个任务的线程:假设一个任务的执行代码有50步,通常编程只会一次执行完毕,但是我们现在需要想想,因为我们会嫌这个任务总占用着ALU的时间而影响其他任务的执行效果,所以就可以对任务进行划分,把它分为5份,每份10步,这样我们每次执行其中的一个程序片–每次正在运行的程序片我们称为线程。
这个图很完美的解释了线程的运行原理。
具体线程的实现:
typedef struct{
u8 isTask_Living;
u8 Thread_Process;
}myTask;
void Task(void)
{
if(Task.isTask_Living)
{
Task.isTask_Living = !myThread3(&Task3,&Task3.Thread_Process);
}
}
/*初始化任务变量*/
void InitTask4(myTask4 *Task)
{
Task->isTask_Living=1;
Task->Thread_Process=0;
}
/*功能:任务线程
**参数:myTask:Task任务类型
** :Process:unsigned char*类型,线程指针
**返回值:CHAR类型,线程结束,或未结束
*/
static int myThread(myTask *Task,unsigned char *Process)
{
int ret=0;
switch(*Process)
{
case 0:
//程序片1
break;
case 1:
//程序片2
break;
case 2:
//程序编3
break;
default:break;
}
(*Process)++;
if(*Process>3)
{
ret = -1;
*Process = 0;
}
return ret;
}
void TaskCommunication(void)
{
if(Task.isTask_Living)
{
Task.isTask_Living = !myThread(&Task4,&Task4.Thread_Process);
}
}
真正多任务处理的过程:
仔细理解图上的内容对写多任务程序的结构很有好处。
加油吧骚年们!
关键字:STM32 裸机 多任务 多线程
引用地址:
关于STM32的裸机多任务多线程心得
推荐阅读最新更新时间:2024-11-16 23:34
STM32再学习——时钟初始化
STM32F系列微处理器,或者说是Cortex-M3内核的MCU内,都集成了一个叫PLL的东西。PLL就是锁相回路或锁相环(PhaseLockedLoop),用来统一整合时脉讯号,使内存能正确的存取资料。PLL用于振荡器中的反馈技术,将外部的输入信号与内部的振荡信号同步,锁相环路的基本方框图如下图所示。一句话,PLL用来控制STM32F的时钟频率的。总而言之,STM32F系列MCU使用了这个东西,而我们在MCU上电之后,也就要对其正确的初始化,这样,我们才能得到我们需要的时钟配置。 本文引用地址:http://www.eepw.com.cn/article/182408.htm 在ST公司的外设固件库的示例里,对于工
[单片机]
STM32——待机唤醒实验
1.STM32待机模式介绍 1.1 STM32低功耗模式介绍 很多单片机具有低功耗模式,比如MSP430、STM8L等,我们的STM32 也不例外。默认情况下,系统复位或上电复位后,微控制器进入运行模 式。在运行模式下,HCLK 为CPU提供时钟,并执行程序代码。当 CPU 不 需继续运行(例如等待外部事件)时,可以利用多种低功耗模式来节省 功耗。用户需要根据最低电源消耗、最快速启动时间和可用的唤醒源等 条件,选定一个最佳的低功耗模式。 当然在运行模式下,也可以通过如下方式降低功耗: (1)降低系统时钟速度 (2)不使用 APBx 和 AHB 外设时,将对应的外设时钟关闭 STM32 提供了 3 种低功耗模式,以达到不
[单片机]
STM32低功耗实验总结
1、首先回答一个问题,STM32能不能做低功耗? 回答是肯定的,这个是有数据支持的,我测试的STM32101CB,FLASH:128K,RAM:16K并且RTC工作的情况下,测试到的功耗为16uA应该说还是相当不错的。 2、STM32低功耗有哪些需要注意的地方? 一开始我测试到STM32为16uA的时候,还是非常高兴的,以为真的可以做为我的应用,我的应用是让MCU定时醒来干活,干一会就睡觉,可能干活的时间就几十个毫秒。可是后来发现有些问题(工作在STOP模式): 1) 时钟问题:STM32被唤醒以后的时钟自动切换到内部HIS RC振荡器,大家都是知道的,RC振荡器的精度是不高的。而且,睡觉前对于时钟的设置都是恢复到复位状态,只
[单片机]
最简单的方式 创建STM32的工程(使用标准库)-1
1:看到网上好多资料有关怎么创建STM32工程文件的,比较麻烦,都是建啥文件夹,然后拷贝文件,挪来挪去。其实在STM32标准库中本来就有工程文件的样板,如下图,有5中IDE的工程文件样板。我这里选用的标准库是F1系列的。 2:我电脑装的IDE是MDK uVision V4.00。打开上面MDK-ARM文件夹,双击直接打开Project.uvproj 工程文件。 3:直接编译-build,没问题! 这里介绍下工程目录: STM32100E-EVAL 是当前工程的名字,100E应该是一款MCU,EVAL尾缀是evalution的简写,评估的意思。 User: 里面放main.c 和 stm32f10x_it.c ,我
[单片机]
STM32入门学习笔记之MPU6050传感器解析实验4
(2)创建mpu6050.c文件,输入以下代码。 /********************************************************************************************************* MUP6050 驱 动 程 序 *********************************************************************************************************/ #include mpu6050.h #include delay.h /***********
[单片机]
jz2440裸机开发与分析:内存控制器3之时序图分析
根据前两节课,我们明白不同内存类设备与2440的连接 2440与NOR flash的连接图 由上图NOR flash 读的时序图可知,Taa即当输出地址的70ns之后数据有效;Tce即当CE处于低电平大于70ns之后数据有效;Toe即当OE处于低电平大于30ns之后数据有效;Trc即为读周期的时间为70ns;Tdf即为OE和CE处于高电平大于30ns之后,数据输出稳定;综上,我们要让2440同时发出CE,OE,addr信号。 寄存器的配置: 综上,通过配置寄存器BANKCON0使其发出可以满足控制NOR flash读的时序 代码 init.c #include s3c2440_soc.h void b
[单片机]
STM32中断优先级理解及先占优先级和从优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 指定抢占式优先级别1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响 如上,NVIC_IRQChannelPreemptionPriority 和 NVIC_IRQChannelSubPriority
[单片机]
采用STM32 单片机的太阳能LED街灯解决方案
随着化石类能源的日益减少,以及温室气体的过度排放导致全球变暖问题越来越受到重视,人们一方面在积极开发各类可再生新能源,另一方面也在倡导节能减排的绿色环保技术。太阳能作为取之不尽、用之不竭的清洁能源,成为众多可再生能源的重要代表;而在照明领域,寿命长、节能、安全、绿色环保、色彩丰富、微型化的LED固态照明也已被公认为世界一种节能环保的重要途径。太阳能-LED街灯同时整合了这两者的优势,利用清洁能源以及高效率的LED实现绿色照明。 本文介绍的太阳能-LED街灯方案,能自动检测环境光以控制路灯的工作状态,最大功率点追踪(MPPT)保证最大太阳能电池板效率,恒电流控制LED,并带有蓄电池状态输出以及用户可设定LED工作时间等功
[电源管理]