函数定义的一般形式如下:
函数值类型 函数名 (形式参数列表)
{
函数体
}
1、函数值类型,就是函数返回值的类型。在我们后边程序使用中,会有很多函数中有return x这个东西,这个返回值也就是函数本身的类型。还有一种情况,就是这个函数只执行操作,不需要返回任何值,那么这个时候它的类型就是空类型void,这个void按道理来说是可以省略的,但是一旦省略,Keil软件会报一个警告,所以我们通常也不省。
2、函数名。可以是任何合法的标示符,但是不能与其他函数或者变量重名,也不能是关键字。什么是关键字,后边我们慢慢接触,比如char这类,都是关键字,是我们程序中具备特殊功能的标志符,这种东西不可以命名函数。
3、形式参数列表,我们也叫做形参,这个是函数调用的时候,相互传递数据用的。有的函数,我们不需要传递参数,那么可以用void来替代,void同样可以省略,但是那个括号是不能省略的。
4、函数体。函数体包含了声明语句部分和执行语句部分。声明语句部分主要用于声明函数内部所使用的变量,执行语句部分主要是一些函数需要执行的语句。特别注意,所有的声明语句部分必须放在执行语句之前,否则编译的时候会报错。
5、一个工程文件必须有且仅能有一个main函数,程序执行的时候,都是从main函数开始的。
6、关于形参和实参的概念,我们后边再总结,如果遇到程序里有,大家再跟着抄一段时间。先用,后讲解,这样更有利于理解。
我们再来回顾一下我们上节课闪烁LED程序部分
void main() //void即函数类型
{
unsigned int i = 0; //定义一个无符号整数i,变量范围是0~65535
//并且赋一个初值0
ENLED = 0; //先定义变量i,后写执行部分
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
ADDR3 = 1; //74HC138开启三极管
while(1) //程序死循环
{
LED = 0; //点亮小灯
for(i=0;i<30000;i++); //for延时操作
LED = 1; //熄灭小灯
for(i=0;i<30000;i++); //for延时操作
}
关键字:函数 简单介绍
引用地址:
函数的简单介绍
推荐阅读最新更新时间:2024-03-16 13:55
STM32 内存管理 实现了malloc,free,remalloc等函数
这两天写的一个STM32上的内存管理函数,实现了malloc和free以及remalloc几个函数.还实现了一个内存使用率查询的函数. 实验环境:ALIENTEK STM32 Mini 开发板 思路如下: 将内存分块管理. 内存池等分为固定大小的内存块. 建立一个内存状态表,对应每个块,有多少个块,状态表就有多少个元素,一一对应. 通过状态表的值判断该块内存是否可用(为0则表示可用,为其他值则表示被占用了,而且占用的内存块数量,就是该值的数字) 初始化的时候,状态表的值全0,代表所有的内存块都未被占用.当需要分配的时候,malloc从内存块的最高地址往下查找,查找到连续的空内存大于等于要分配的内存的时候,结束此次分配,返回地址给
[单片机]
STM32串口发送字符串函数
最近由于要调试一个SMS发送短信的模块,该模块需要发送一系列AT指令,且需要字符串发送,但是STM32官方给的usart.c中并没有直接发送字符串的函数,因此写了一个发送字符串的函数。 其实发送字符串的本质还是发送一个个字符,所以只需在字符串结束标志之前,循环发送字符即可。不罗嗦,上程序。 //程序功能:利用串口发送一个字符串 // 参数:USARTx USART编号 可取 USART1、USART2、USART3、USART4、 USART5(STM32F103ZET6) str
[单片机]
当主函数与中断函数共享变量问题
当时开发的一个产品,一项功能是在通电后播放40秒的语音. 测试时发现,大约通电70-80次就有一次播放时间不够40秒就提前停止。 当时以为复位有问题,换了复位片,没好。又先后换了CPU,语音芯片,还有电源,都没有好转。排除了硬件芯片原因导致的此现象. 后来又从软件中查找原因。反复查找软件逻辑,也没发现问题。后来偶然发现在主while里增加大量延时后,稳定性提高。 几乎不再出现问题。但是我还是觉得不对劲,用了两天时间终于找到了原因。因为这是公司的程序,所以不能贴源码。 我把其他程序都略去,只把出错的程序大概写一下。大家看看能找到问题吗? unsigned int ms_counter; void T0() {
[单片机]
Delphi:高效的哈希函数
view plaincopy to clipboardprint? 01.function BKDRHash(buf: Pointer; count: Integer) : Cardinal; assembler; 02.asm 03. PUSH EBX; 04. XOR EBX, EBX 05. MOV ECX, EAX 06. XOR EAX, EAX 07.@LOOP: 08. TEST EDX, EDX 09. JZ @EXIT 10. MOV BL, 11. IMUL EAX, 131 12. ADD EAX, EBX 13.
[工业控制]
第十一章、Tiny4412 U-BOOT移植十一 DDR3简单介绍
由于Tiny4412所用的芯片是DDR3,我从网上找一片介绍DDR3的原理的博文,虽然很多原理是一致的,但还是想着这些资料难搜集,而且多看一次除了费点时间外,我想不到别的坏处,那就在看一次,以便以后在修改代码时,已能对DDR3的所有参数非常清楚,网址 http://blog.csdn.net/wshini7316/article/details/8508836 此博文以是镁光的(Micron MT41J128M8 1Gb DDR3 SDRAM芯片为例说明的。内容如下: 一、内存工作流程 首先,我们先了解一下内存的大体结构工作流程,这样会比较容量理解这些参数在其中所起到的作用。这部分的讲述运用DDR3的简化时序图。 DDR3的
[单片机]
实现STM32的串口数据发送和printf函数重定向
在调试电机驱动程序的时候,是不能随便利用中断来进行一些寄存器或数据的查看的,不然你在运行的时候突然来一下,如果占空比大的话那可能直接就把MOS管给烧了,所以我们很多情况下只能使用USART(串口)来进行程序的调试和数据的监控了。 对于STM32来说,由于很多内容都是有库来实现的,那就省了很多时间,直接看个例子就可以写了,大致有4步步骤: 1 1、RCC始终初始化,对端口和USARTX使能时钟 2 2、初始化端口功能,RX设置为输入悬空,TX设置为复用功能的推挽输出,注意GPIO_SPEED要设置下,我没设置弄了半天都没输出 3 3、设置USARTX寄存器,波特率、数据位、校验位、停止位等 4 4、看需要是否开中断,我这里
[单片机]
STM32 自定义延时函数
在stm32调试过程中加入一个延时,有两种方式:一种是纯计数方式,另一种是使用系统计数器的方式。 现使用系统计数器产生中断的方式实现,查阅STM32的编程手册可知,STM32有一个24bit的系统计时器,并有STK_CTRL、STK_LOAD、STK_VAL、STK_CALIB寄存器供读写配置。 而CORTEX_M3有提供了一些函数可以供我们调用来控制这几个寄存器。 在编写延时函数时需要的库函数: /** brief System Tick Configuration details Initializes the System Timer and its interrupt, and sta
[单片机]
AFG1022函数发生器的特点及应用范围
本发生器提供了最佳性能价格比的波形发生工具。它包括双通道、25MHz带宽和高达10Vp-p的输出幅度。4种运行模式、50种内置常用波形和内置200MHz频率计数器,满足试验和测试工作中的大多数波形发生需求。3.95英寸TFT LCD、快捷按钮、USB接口和PC软件提供了最直观的仪器配置方式。最佳性价比。为教育用户定制。 主要特点 ● 双通道、25MHz正弦波和12.5MHz方波/脉冲波为基础教育应用和其他应用提供了经济的解决方案 ● 125MS/s采样率和14位垂直分辨率实现了优异的信号保真度 ● 在整个频率范围内1mVp-p~10Vp-p 输出幅度 ● 直观的用户界面缩短了学生和其他用户的学习周期 ● 2~8192点内存长度
[测试测量]