一、嵌入式C语言(函数的应用)
1、函数的语法格式
返回值类型 函数名(数据类型 参数1,数据类型 参数2, ....)
{
函数体
}
2、函数的两种存在方式
(1)库函数:
例如printf是C语言的标准库函数,使用库函数时需要包含对应的头文件,所以我们在使用printf时,需要#include <stdio.h>,除了标准库之外还有很多第三方开源库需要自行去学习。
(2)自定义函数:
参考应用案例中int Sum(int begin,int end)函数
3、函数的返回值
函数的值只能通过return语句返回主调函,return语句的一般形式为:
return 表达式
注意:(1)return 表达式的结果类型和函数定义中的返回值类型应保持一致。
(2)函数没有返回值时,需要用到void关键字修饰,表示“空”的意思。即(void SUM(void))
应用案例:
需求:分别打印输出1~100、201~300、401~500的累加和。
#include <stdio.h>
/*
应用案例:
需求:分别打印输出1~100、201~300、401~500的累加和。
*/
//自定义求累加和函数
int Sum(int begin,int end)
{
int sum = 0;
for(int i = begin; i <= end; i++)
{
sum += i;
}
return sum;
}
int main()
{
int res = 0;
res = Sum(1, 100);
printf("sum of 1~100 is %d\n",res);
res = Sum(201, 300);
printf("sum of 201~300 is %d\n",res);
res = Sum(401, 500);
printf("sum of 401~500 is %d\n",res);
return 0;
}
4、函数参数的数值传递本质
(1)如果函数有参数,在调用它时,必须传递正确数量和类型的参数(参考上面的代码例子)
在调用函数时,传递给参数的可以是以下几种形式:
1.常数值:Sum(1,100); 2.变量:Sum(a,b); 3.函数的返回值:Sum(Sum(1,10),100); 4.表达式:Sum(1+2,100);
(2)如果函数没有参数时,根据编码规范,应该使用void进行修饰
5.函数的声明和定义
代码在编译时是的顺序是从上往下的,在执行编译时其它功能函数代码需要在main函数前面,也可以写在main函数的后面,但是需要在main函数前声明此函数。(参考下面的代码)
#include <stdio.h>
void swap(int x,int y);
int main()
{
int a = 8;
int b = 9;
swap(a, b);
printf("%d,%d\n",a,b);
return 0;
}
void swap(int x,int y)
{
int temp = x;
x = y;
y = temp;
}
总结:
(1)声明一个函数意味着向编译器描述函数名、返回值、参数的个数和类型,但不会为函数分配储存空间。
(2)定义一个函数意味着在声明变量的同时还要有具体的实现,并且会为函数分配存储空间。
6.函数的作用域
1.指的是函数在整个代码工程范围中内可用的区域,默认的作用域是整个代码工程。
2.静态函数:
在函数的返回值类型前加上关键字staic,函数就会被定义为静态函数;
定义静态函数的好处;
(1)静态函数不能被其他C文件所用,达到“隐藏”的目的;
(2)其它文件中可以定义相同的名字的函数,不会发生编译冲突,这样的话,不用担心自己开发定义的函数,是否会被其他人开发的C文件中的函数同名。
二.51单片机9-10章节
1.在线仿真调试
本章节主要学习内容,在开发板支持仿真功能的情况下,使用打狗棒(STC8H8K64U)进行在线仿真调试。
2.串口(UART)通信操作
10.1 通信技术的基础知识
数据通信常用的两种方式(并行通信和串行通信)
串行通信的两种常用形式(异步通信和同步通信)
(1)异步通信(ASYNC)
异步通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为了使双方的收发协调,要求发送和接收设备的时钟尽可能一致。
(2)同步通信(SYNC)
同步通信时要建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步,此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙,即保持位同步关系,也保持字符同步关系,发送方对接收方的同步可以通过两种方法实现。
(3)串行通信的线路传输方式
(1)单工
指数据传输仅能沿一个方向,不能实现反向传输。
(2)半双工
可以沿两个方向,但是需要分时进行
(3)全双工
可以同时进行双向传输