框架式编程基础概念、任务调度和数据分配


文章目录

  • 框架式编程基础概念、任务调度和数据分配
  • 1. 案例引入:
  • 2.代码实现
  • 3. 框架式编程的概念
  • 4. 搭建框架式编程文件
  • 任务
  • 工程建立步骤
  • 代码编程


1. 案例引入:

单片机软件架构标准 单片机程序基本框架_最小公倍数

代码如下:

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_02

遇到要求简单的可以采用上述代码实现,但遇到接下来的呢?

单片机软件架构标准 单片机程序基本框架_单片机_03

2.代码实现

因此,采用另一种代码实现方式,while主循环里面套if分支判断

clude <STC15.H>		//头文件包含,STC15W系列单片机使用(注意:使用STC15.H,需要删除下面的sfr行)


sbit LED1=P3^5;						//定义3个灯
sbit LED2=P3^6;
sbit LED3=P3^7;
void main()							//主函数 有且唯一
{
	
	static unsigned short count=0;  //65535,16位
	P3M0 = 0;
	P3M1 = 0;

	
	while(1)						//主函数死循环
	{
		count++;					
		if(count%90==0)				//大循环运行90圈,最小公倍数61110=90*679
		{
			LED1=~LED1;				//LED1每2ms 翻转一次,方波频率255Hz
		}
		if(count%315==0)			//大循环运行315圈,最小公倍数61110=315*194
		{
			LED2=~LED2;				//LED2每7ms 翻转一次,方波频率72Hz
		}
		if(count%4365==0)			//大循环运行4365圈,最小公倍数61110=4365*14
		{
			LED3=~LED3;				//LED3每97ms 翻转一次,方波频率5.15Hz
								    //0~61110
			count=count%61110;		//最小公倍数,让三颗LED周期更完美		
		}
	}

}

注意:

用逻辑分析仪抓取LED的运行时会发现

单片机软件架构标准 单片机程序基本框架_单片机_04

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_05

这是因为90,315,4365的最小公约数是61110,而unsigned short的范围最大是65535

计算器计算:65535可以被count计数到4365多少次

单片机软件架构标准 单片机程序基本框架_代码实现_06

单片机软件架构标准 单片机程序基本框架_最小公倍数_07

计算剩余的60即波形图1.399ms的来由

单片机软件架构标准 单片机程序基本框架_数据_08

单片机软件架构标准 单片机程序基本框架_数据_09

解决方法:

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_10

使count++到61110结束,再由0重新计数。

**总结:**合理利用碎片时间,避免占用资源。

3. 框架式编程的概念

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_11

单片机软件架构标准 单片机程序基本框架_单片机_12

要点:

根据器件特性,合理分配时间。例:数码管每秒刷新次数要大于LCD1602每秒刷新次数

单片机软件架构标准 单片机程序基本框架_最小公倍数_13

框架式概念图

单片机软件架构标准 单片机程序基本框架_数据_14

4. 搭建框架式编程文件

任务

以74HC595命名,建立一个框架式编程最简单的程序框架,并实现简单的数据分配

工程建立步骤

  1. 新建文件夹

单片机软件架构标准 单片机程序基本框架_数据_15

  1. 新建工程

单片机软件架构标准 单片机程序基本框架_最小公倍数_16

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_17

单片机软件架构标准 单片机程序基本框架_最小公倍数_18

单片机软件架构标准 单片机程序基本框架_数据_19

  1. 对工程下的源文件进行分类管理

单片机软件架构标准 单片机程序基本框架_代码实现_20

单片机软件架构标准 单片机程序基本框架_单片机_21

  1. 新建所需源文件和头文件

单片机软件架构标准 单片机程序基本框架_代码实现_22

单片机软件架构标准 单片机程序基本框架_单片机_23

单片机软件架构标准 单片机程序基本框架_数据_24

  1. 魔术棒选项设置

单片机软件架构标准 单片机程序基本框架_数据_25

单片机软件架构标准 单片机程序基本框架_最小公倍数_26

单片机软件架构标准 单片机程序基本框架_数据_27

  1. 添加新建的.c文件和.h文件

单片机软件架构标准 单片机程序基本框架_单片机_28

单片机软件架构标准 单片机程序基本框架_代码实现_29

单片机软件架构标准 单片机程序基本框架_数据_30

  1. 测试代码

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_31

至此,工程新建完毕。

代码编程

  • 文件调用规范
  1. .h文件关联.c文件

单片机软件架构标准 单片机程序基本框架_最小公倍数_32

  1. 为头文件新建标签

单片机软件架构标准 单片机程序基本框架_最小公倍数_33

  1. 写HC595_Init()初始化函数
void HC595_Init()
{
	P3M0 = 0;
	P3M1 = 0;
	P3   = 0X55;
}
  1. 代码执行流程分析

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_34

执行main.c

在主函数内找不到HC595_Init();

去头文件"HC595_Drive.H"里找

因此需要在"HC595_Drive.H"声明了该函数,同时HC595_Drive.c也包含了"HC595_Drive.H",由此找到函数体本身

"HC595_Drive.H"实现了HC595_Drive.cmain.c的关联和调用

  • 优化

用all.h包含所有头文件

新建all.h

单片机软件架构标准 单片机程序基本框架_代码实现_35

单片机软件架构标准 单片机程序基本框架_数据_36

  • 数据分配
  1. 简单数据分配:定义数组

单片机软件架构标准 单片机程序基本框架_最小公倍数_37

2… 声明

单片机软件架构标准 单片机程序基本框架_最小公倍数_38

  1. 赋值

单片机软件架构标准 单片机程序基本框架_数据_39

注:

变量或函数遵循“先定义,再声明,最后使用”的原则。

  • 框架式编程的数据分配

定义595数据分配函数,主函数内循环调用

单片机软件架构标准 单片机程序基本框架_最小公倍数_40

  • typedef取别名操作简化书写

使用取别名关键字

单片机软件架构标准 单片机程序基本框架_单片机软件架构标准_41

u8,u16,u32取别名的位置很关键

必须在"HC595_Drive.H"前面

C语言不会向后找取别名的定义