设为首页 加入收藏

TOP

嵌入式C语言开发实战详解(一)
2017-12-29 06:06:47 】 浏览:595
Tags:嵌入式 语言 开发 实战 详解

嵌入式C语言实战开发详解

一、概述

1、嵌入式开发中为什么选择C语言?

因为操作系统的内核都是使用的C语言,而且C语言也有如下几个优点:

(1)出色的移植性,能在多种不同体系结构的软/硬平台上运行(修改量越小,移植性越好);

(2)简洁紧凑,使用灵活的语法机制,并能直接访问硬件(效率高);

(3)很高的运行效率

拓展:

什么时候使用汇编什么时候使用C语言呢?(C VS 汇编)

汇编是低级语言,不能实现复杂的功能,所以:

当对硬件做初始化——汇编

当对硬件做复杂操作——C语言

面向过程处理机制 VS 面向对象处理机制(详情戳网址)

http://blog.csdn.net/wzhcalex/article/details/51878170

2、嵌入式开发中的地位:

(1)嵌入式Linux应用软件开发工程设计;

(2)嵌入式Linux驱动开发工程师;

(3)嵌入式BSP开发工程师;

(4)嵌入式Kernel(内核)开发工程师;

3、精通C语言考核标准:

(1)企业笔试题;

(2)累积的代码量(强化编程训练)

(3)良好的编码规范(华为的编码规范要求);

(4)行业应用的项目经验;

4、如何学习C语言(外功与内功兼修)

(1)零基础学习经历过程(菜鸟如何修炼成老鸟)

(2)算法在C语言开发

(3)《C和指针》《C语言专家编程》《程序员的自我修养》《高质量C/C++编程》《编程之美》

5、C语言的标准有哪些?

K&RC、C89、C99、C11

注:

gcc支持的C89,部分兼容C99

不同的编译器标准不一样

很多编译器支持的是C89

二、数据类型

1、什么是数据类型?

数据集合的划分,不同的数据类型对CPU的意义是不一样的。

2、数据类型有哪些?

\

3、左右法则

右左法则:首先从最里面的圆括号内未定义的标识符开始阅读看起,然后往右看,再往左看。每当遇到圆括号时,就应该掉转阅读方向。一旦解析完圆括号里面所有的东西,就跳出圆括号。重复这个过程直到整个声明解析完毕。

企业笔试题:

1、用变量a给出下列定义

a) 一个整型数(An integer):int a;

b) 一个指向整型数的指针(A pointer to an integer):int *a;

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a

pointer to an integer):int **a;

d) 一个有10个整型数的数组(An array of 10 integers):int a[10];

e) 一个有 10 个指针的数组,该指针是指向一个整型数的(An array of 10

pointers to integers):int *a[10];

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers):

int (*a)[10];

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer

to a function that takes an integer as an argument and returns an integer):

int (*a)(int);

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返

回一个整型数( An array of ten pointers to functions that take an integer

argument and return an integer ): int (*a[10])(int).

2、int *(*(*fpl)(int))[10];

fpl:函数指针变量,该函数指针指向一个形参为int,返回值为数组指针,该数组指针指向一个整型指针;

int *(*(*arr[5])())();

arr:函数指针数组,该数组里的元素指向一个形参为空,返回值为函数指针的函数,该函数指针指向一个形参为空,返回值为整型的指针。

float (*(*b())[ ])();

b:函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组里的元素指向一个形参为空,返回值为float的函数。

void* (*c)(char, int(*)());

c:函数指针变量,该函数指针指向一个形参为char 、函数指针,返回值为void*,该函数指针的形参为空,返回值为int。

void** (*d)(int *,char **(*)(char *,char **));

d:函数指针变量,指向函数形参为char,函数指针,返回值为void **,该函数指针形参为 char*,char**,返回值为char**;

float(*(*e[10])(int *))[5];

e:函数指针数组,指向函数形参为 int *,返回值为数组指针,该数组元素指向float;

4、隐式类型转化与强制类型转化:

char < int < float < double 隐式类型转化(自动)

代码示例:

\
\

这就是隐式类型转换;

强制类型转化:

代码示例:

\
\

上述代码中的char*就是强制类型转化

5、数据类型的重要知识点:

字节长度:

bit;

字节 = 8bit;

半字 = 2个字节 = 16bit;

字 = 4个字节 = 32;

6、基本数据类型

char 1个字节;

short 2个字节;

int 4个字节;

long 4个字节;

float 4个字节;

double 8个字节;

long long 8个字节;

代码查询:

\
\

拓展:

为什么任何类型的指针都是4字节?

因为指针指向地址,地址长度都是固定的。而地址长度是由操作系统决定,如果操作系统是32位的,地址长度为4字节;如果操作系统是64位的,则地址长度为8字节。

char 取值范围:

无符号:0~255(2^8-1)

有符号:-128~127

有符号时:第一个为符号位:

0为整数:0 000 0000 = 0; 0 111 1111 = 127;

1为负数:负数时计算机保存补码

1 000 0000 取反加1 = -128

1 111 1111 取反加1 = -1

补码取反加1成原码

例如:

打印~2:常量都是有符号的:0 000 0010

取反:1 111 1101 负值

取反加1:0 000 0011 = -3

代码举例:

\
\

分析:-128 1 000 0000

取反 1 111 1111

加1 0 111 1111 = 127

企业笔试题:

\
\

输出结果分析:

有符号:i = 127 a[127] = -128

i = 128 a[128] = 127

...

i = 255 a[255] = 0; 0 相当于‘\0’

strlen(a)统计到‘\0’跳出,共255个。

无符号:i = 0 a[0] = 255;

i = 1 a[1] = 254;

...

i = 255 a[255] = 0;

strlen(a)统计到‘\0’跳出,共255个。

有符号与无符号数据的区别:

实例解析:

\
\

分析:

有符号数和无符号数进行比较运算时(==、<、>、<=、>=)有符号数隐式转换成了无符号数(即底层的补码)但是此数从有符号数变成了无符号数。

7、sizeof与strlen区别(详情请戳网址):

http://blog.csdn.net/wzhcalex/article/details/51852632

8、变量与常量

变量三大特点:

变量的数据类型:主要说明变量占用的内存空间

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C语言实例之困死自己的智能蛇 下一篇C语言代码实现的万年历计算

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目