1、单片机软件开发中经常用到死循环,请用C语言编写一段死循环代码?
for(;;)
{}
while(1)
{}
2、C语言头文件中的ifdef/define/endif有什么作用
防止头文件重复包含
3、绘图说明如何采用单片机的IO口来实现9个按键信号的输入,简述工作原理和需要注意的问题。
设置一端为高电平,另一端为读取端,按键按下就读取低电平导通,按键没有按下就不导通
4、单片机一条指令在执行过程中,单片机能被中断吗?如果两个中断同时产生,单片机会优先执行那一个中断服务程序呢?
不能中断
执行优先级高的中断
5、中断是单片机系统的重要组成部分,请评论下面一段中断服务子程序代码:
__interrupt double compute_area (double radius)
{
double area = PI * radius *radius;
printf("\nArea =%f",area);
return area;
}
中断无返回值,不能进行参数的传递,中断中不能使用浮点(耗时)
printf打印会很耗时
6、变量A = 0x12 34 56 78,在内存中的起始地址为0x10 20 00 00,画出在大端模式下,A在内存中的存放情况。
大端存储:低位存储高位,高位储存低位
0x10 20 00 00 0x12
0x10 20 00 01 0x34
0x10 20 00 01 0x56
0x10 20 00 03 0x78
小端存储:低位存储低位,高位存储高位
0x10 20 00 00 0x78
0x10 20 00 01 0x56
0x10 20 00 01 0x34
0x10 20 00 03 0x12
7、在某一个工程中,要求设置一绝对地址为0x5a00的整型变量的值为0xaa55,写一段代码实现
*(int * const)(0x5a00) = 0xaa55;
或
int *p;
p = (int *)0x55a00;
*p = 0xaa55;
8、看看代码有什么问题:
char * DoSomething()
{
char i[32 * 1024];
return i;
}
开辟的空间过大,可能会导致栈空间溢出
返回值错误
9、使用C语言编写一段代码,让一位8位无符号数a的第2位置为0,第6位置为1
unsiged int a = 0xff;
a |= 1<<6;//从第1位开始,6位置1
a &= ~(1<<2);//从第1位开始,2位置0
10、使用C语言编写一段内存,拷贝代码,从物理地址0x1000的存储空间开始的1000个字节拷贝到物理地址0x2000的存储空间
#include<stdio.h>
#include<sting.h>
int main()
{
char * s = (char * ) 0x1000;
char * d = (char * )0x2000;
for(int i;i<1000;i++)
{
s[i] = d[i];
}
}
注:
上述代码是个人整理的,如有错误,抄袭嫌疑,请联系删除!