嵌入式C语言小结(上)
基础知识
嵌入式C语言是C语言的扩展,在嵌入式系统中应用于编写嵌入式软件。与普通C语言没有特别大的区别,主要区别在于嵌入式开发人员的思考角度,使用习惯与普通C语言不一样。普通C语言的运行环境是OS之上,有很多的标准库函数支撑调用,分配的内存是电脑的内存,其处理器就是电脑的CPU;而在嵌入式环境中,会涉及到底层的硬件,而硬件本身是没有标准库可以调用的,因而就需要开发者使用C语言编程调试硬件,使其可以工作,从语法上来说C语言并不复杂, 但编写优质可靠的嵌入式C程序并非易事,不仅需要熟知硬件特性和缺陷,还需要对编译原理和计算机技术知识有着一定的了解。在结合相关资料, 阐述嵌入式需要了解的C语言知识和重点,希望每个读到这篇文章的人都能有所收获。
嵌入式C语言的基本结构及其特点:
基本结构:
#include<stdio.h>
void main (void)//这个就是主函数,第一个void 就是返回类型:有void,int ,float等可以选择,
//第二个是main就是函数名,这里是主函数,它名字固定的,其他的函数可以随
//意定义,第三个是void,是就是参数类型,一样可以由void,int,float等等选择。
{ //中括号内就是函数体了,是函数的具体内容了
int a,b;
a=b=0;
}
特点:
1.C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。
2.C语言传递参数均是以值传递(pass by value),另外也可以传递指针(a pointer passed by value)。
3.不同的变量类型可以用结构体(struct)组合在一起。
4.只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。
5.部份的变量类型可以转换,例如整型和字符型变量。
6.通过指针(pointer),C语言可以容易的对存储器进行低级控制。
基本数据类型:
在 C 语言中,数据类型指的是用于声明不同类型的变量或函数的一个广泛的系统。变量的类型决定了变量存储占用的空间,以及如何解释存储的位模式。而基本数据类型就是算数类型,可分为整数类型和浮点数类型。
整数类型
下表列出了关于标准整数类型的存储大小和值范围的细节:
类型 | 存储大小 | 取值范围 |
---|---|---|
char | 1字节 | -128 到 127 或 0 到 255 |
unsigned char | 1字节 | 0到255 |
signed char | 1字节 | -128到127 |
int | 2或4字节 | -32768到32787或-2147483648到2147483647 |
unsigned int | 2或4字节 | 0到65535或0到4294967295 |
short | 2字节 | -32768到32767 |
unsigned short | 2字节 | 0到65535 |
long | 4字节 | -2147483648到2147483647 |
unsigned long | 4字节 | 0到4294967295 |
注意:各种类型的存储大小与系统位数有关,但目前通用的以64位系统为主。
以下列出了32位系统与64位系统的存储大小的差别(windows 相同)
例:为了得到某个类型或某个变量在特定平台上的准确大小,您可以使用 sizeof 运算符。表达式 sizeof(type) 得到对象或类型的存储字节大小。下面的实例演示了获取 int 类型的大小:
#include <stdio.h>
#include <limits.h>
int main()
{
printf(“int 存储大小 : %lu \n”, sizeof(int));
return 0;
}
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
int 存储大小 : 4
浮点数类型
类型 | 存储大小 | 取值范围 |
---|---|---|
float | 4字节 | 1.2E-38到3.4E+38 |
double | 8字节 | 2.3E -308到1.7E+308 |
long double | 16字节 | 3.4E-4932到1.1E+4932 |
头文件 float.h 定义了宏,在程序中可以使用这些值和其他有关实数二进制表示的细节。下面的实例将输出浮点类型占用的存储空间以及它的范围值:
例:
#include <stdio.h>
#include <float.h>
int main()
{
printf(“float 存储最大字节数 : %lu \n”, sizeof(float));
printf(“float 最小值: %E\n”, FLT_MIN );
printf(“float 最大值: %E\n”, FLT_MAX );
printf(“精度值: %d\n”, FLT_DIG );
return 0;
}
当您在 Linux 上编译并执行上面的程序时,它会产生下列结果:
float 存储最大字节数 : 4
float 最小值: 1.175494E-38
float 最大值: 3.402823E+38
精度值: 6