嵌入式系统C语言编程基础
文章目录
- Q1:所有嵌入式系统的主流程最后都进入一个死循环,怎样用C语言实现─个死循环?
- A1
- Q2:while(){...}和do{....}while()有什么区别?
- A2
- Q3:用变量a给出下列定义
- A3
- Q4:关键字static的作用是什么?
- A4
- Q5:关键字const的作用是什么?
- A5
- Q6:定义一个标准宏MIN,这个宏输入两个参数并返回较小的一个。
- A6
- Q7:嵌入式系统中经常要对变量或寄存器进行位操作。给定一个int型变量a,写两段代码,第一个将a的bit 3置为1,第二个将a的bit 3置为0。以上两个操作中,要保持其它位不变。
- A7
- Q8:嵌入式系统具有经常去直接访问物理地址的特点。在某工程中,要求设置一绝对地址为Ox5a00的整型变量的值为Oxaa55。写代码去完成这一任务。
- A8
- Q9:下面这段代码的输出是什么?
- A9
- Q10:请评论下面一段程序代码
- A10
- Q11:请评论下面一段程序代码
- A11
- Q12:中断是嵌入式系统的重要组成部分。请评论下面一段中断服务子程序代码
- A12
Q1:所有嵌入式系统的主流程最后都进入一个死循环,怎样用C语言实现─个死循环?
A1
while(1)
{......
}
//例如:进入死循环,一直打印测试值1
#include<stdio.h>
int main()
{int a = 1;while(1){printf("测试值%d\n",a);}
}
Q2:while(){…}和do{…}while()有什么区别?
A2
while(){…}为入口条件循环,即在每次执行循环之前先检查判断条件; do{…}while()为退出条件循环,即在执行循环之后再检查判断条件。
即:
while循环结构的表达式为:while(表达式){循环体}
do-while循环结构表达式为:do{循环体;}while (条件表达)
也就是说,while循环执行时只有当满足条件时才会进入循环,进入循环后,执行完循环体内全部语句至当条件不满足时,再跳出循环。
do-while循环将先运行一次,在经过第一次do循环后,执行完一次后检查条件表达式的值是否成立,其值为不成立时而会退出循环。
如下:
while循环判断若为错,就不会进入循环,也就不会打印~
break语句用于跳出循环,continue语句用于结束本次循环。
Q3:用变量a给出下列定义
A3
a)一个整型数
int a = 1;
b)一个指向整型数的指针
int *a;
c)一个有10个整型数的的数组
int a[10];
d)一个有10个指针的数组,该指针是指向—个整型数的
int *a[10];
Q4:关键字static的作用是什么?
A4
在C语言中,关键字static有三个明显的作用:
1)在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3)在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。
Q5:关键字const的作用是什么?
A5
const是constant的缩写,“恒定不变”的意思。被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。
const常量与#define常量:
- const有数据类型,是个常变量,define只是字符替换(而且可能产生意料不到的错误),define定义的宏在编译后就不存在了,它不占用内存,因为它不是变量,系统只会给变量分配内存。
- define定义的宏是在预处理阶段展开的,而const定义的只读变量是在编译运行阶段使用的。
对于指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,const int b = &a;或者int const b = &a;修饰的都是后面的值,分别代表*b和b不能改变 。
//常变量的定义,下面两者是等价的
const int a = 1;
int const a = 1;
局部变量存储在栈中,静态变量存储在静态存储区中,而经过 const 修饰过的变量存储在内存中的“只读数据段”中。只读数据段中存放着常量和只读变量等不可修改的量。
Q6:定义一个标准宏MIN,这个宏输入两个参数并返回较小的一个。
A6
#define MIN(A,B)((A)<=(B)? (A)∶(B))#define宏的副作用,下面的代码执行后会发生什么事:least = MIN(*p++,b);//这样虽然输出的least的值是正确的,但是p的地址会发生改变,会指向下一个地址
Q7:嵌入式系统中经常要对变量或寄存器进行位操作。给定一个int型变量a,写两段代码,第一个将a的bit 3置为1,第二个将a的bit 3置为0。以上两个操作中,要保持其它位不变。
A7
const int BIT3 = 0x01<<3;
static int a;
void SetBit3(void)
{a |= BIT3;
}
void ClearBit3(void)
{a &= ~BIT3;
}
Q8:嵌入式系统具有经常去直接访问物理地址的特点。在某工程中,要求设置一绝对地址为Ox5a00的整型变量的值为Oxaa55。写代码去完成这一任务。
A8
int *ptTemp = (int *)Ox5a00;
*ptTemp = Oxaa55;
Q9:下面这段代码的输出是什么?
A9
void foo(void)
{
dnsigned int a = 6;
int b = -20; (a+b > 6) ? puts(">6"): puts("<6");
}
输出为“>6”,原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式计算出的结果大于6。这一点对于频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。
Q10:请评论下面一段程序代码
void test()
{char string[10];
char *str ="0123456789";
strcpy(string,str);
}
A10
字符串str需要11个字节才能存放下(包括末尾的’\0’ (默认有的)),而string只有10个字节的空间,所以strcpy会导致数组越界。
Q11:请评论下面一段程序代码
void GetMemory(char *p)
{p = (char *)malloc(0x20);
}
void Test(void)
{char *str = NULL;
GetMemory(str);
strcpy(str," Hello World!”);
printf(str);
}
A11
编译器总是要为函数的每个参数制作临时副本,指针参数p的副本是P编译器使_p = p本例中,_p申请了新的内存,但只是_p的值改变了,p的值却丝毫未变,仍然为NULL。事实上,每执行一次GetMemory就会泄漏—块内存。
Q12:中断是嵌入式系统的重要组成部分。请评论下面一段中断服务子程序代码
_interrupt double compute_area (double radius)
{double area = Pl * radius * radius;
printf("\nArea = %f" , area);
return area;
}
A12
- ISR不能返回值;2)不能向ISR传递参数;
3)ISR应该是短而有效率的,因而在ISR中做浮点运算、使用printf等是不明智的,会经常有重入和性能上的问题。
嵌入式系统C语言编程基础相关推荐
- 嵌入式C语言编程课件,嵌入式系统C语言编程基础PPT课件
<嵌入式系统C语言编程基础PPT课件>由会员分享,可在线阅读,更多相关<嵌入式系统C语言编程基础PPT课件(81页珍藏版)>请在人人文库网上搜索. 1.嵌入式系统C语言编程基础 ...
- arm7c语言编程实例,ARM芯片嵌式系统C语言编程…….pdf
ARM芯片嵌式系统C语言编程-- 咳 牡 痞 姻 亢 朔 台 矢 盆 校 摇 为 嘛 坷 趴 鉴 皋 己 硕 可 费 味 聋 曝 特 扳 婚 雅 善 湾 搜 茎 昼 抱 掀 平 九 牙 河 诵 弘 甥 ...
- c语言从键盘输入千米数,第二章 C语言编程基础.ppt
第二章 C语言编程基础 习题2 P51-7.8.13.14.16 2.4.8break 语句和continue语句 [例2.19] 输出100 - 200 之间不能被3整除的数. P44 2.4.9循 ...
- c语言职专试题及答案,中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc...
中等职业学校计算机应用专业c语言编程基础科试卷及答案.doc 中等职业学校计算机应用专业C语言编程基础科试卷及答案一.填空(共35分)1.Unix系统诞生于 年,是由 实验室的K和用汇编语言开发成功的 ...
- 数据库笔记09:Transact-SQL语言编程基础
/********************************* 第九单元 Transact-SQL语言编程基础 ***********************************/ /* ...
- 【R语言编程基础】【课后习题答案】【全】
文章目录 第1章 R语言概述 1.选择题 2.操作题 第2章 数据对象与数据读写 1.选择题 2.操作题 第3章 数据集基本处理 1.选择题 2.操作题 第4章 函数与控制流 1.选择题 2.操作题 ...
- 掌财社:新手学习嵌入式用什么语言编程?
随着AI智能产品的出现,市场上对于嵌入式开发人员需求也越来越多,嵌入式系统成为了一个很时尚的名词,应用范围也相当的广泛,很多人都想入行嵌入式,那么,学习嵌入式用什么语言编程?这个对于新手来说是一个比较 ...
- c语言编程基础第四版电子教案,《C语言编程基础》电子教案.doc
<C语言编程基础>电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法 ...
- c语言编程基础 教案,C语言编程基础电子教案.doc
C语言编程基础电子教案 课题(内容)1.1 C语言简史及特点课时1教学任务分析教学目标知识技能通过本节课的教学,使学生了解并熟悉编程语言C的发展历史.特点及其种类和适用范围.过程与方法通过C语言的发展 ...
最新文章
- php请求来源,如何用PHP获取请求的来源?
- 2021年4月19日 深圳头条后台开发实习面试(二面)(含总结)
- crossdomain 可用
- day14 集合与函数
- 对路径的访问被拒绝怎么办_学习了解ACL—扩展访问控制列表,就在网工知识角...
- python数据挖掘资料
- Java黑皮书课后题第8章:*8.10(最大的行和列)编写一个程序,在一个4*4的矩阵中随机填入0和1,打印该矩阵,分别找到第一个具有最多1的行和列
- 跟小静读《jQuery权威指南》——目录
- gwt前台开发_为GWT设置开发环境
- HistCite 的使用方法
- android 自定义View 的详细介绍
- SQL Prompt10 安装激活教程,让你写sql 如鱼得水
- 面向图形可扩展矢量图形规范:SVG
- CruiseControl服务器安装配置
- 百数巡检领域系统能力展示
- 鲲志说:向我跌宕起伏,喜忧参半的2022致敬!
- 嵌入式的汉字原来是这样显示的?
- vertica用户自定义扩展介绍
- 转载-工业界视频理解解决方案大汇总(人工智能前沿讲习)
- 服务器重启报kernel panic - not syncing :Attempted to kill init 错误
热门文章
- Spring Boot默认异常处理BasicErrorController源码解读
- ACM比赛完了后怎么办
- Linux 父进程子进程的进程分析
- 传统语音增强——基于先验信噪比的维纳滤波语音降噪算法
- 定时监控Ubuntu系统HDMI热插拔进行锁屏操作
- 掺铥铝酸钇晶体(Tm:YAP)晶体的资料及其相关产品目录
- 高纯度钨酸铜粉末/钨酸铁粉末/钨酸亚铁粉末/硫化铋粉末/铬酸铋粉末/氧化锆粉末/铬酸钡粉末
- 修改服务端监听器端口号为1526
- 酒类电商1919获阿里巴巴20亿元战略投资,估值达70亿元
- arduino定时器函数如何使用_Arduino定时器配置(Timer0,Timer1,Timer2)