部分面试题

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];
    }
}

注:

        上述代码是个人整理的,如有错误,抄袭嫌疑,请联系删除!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值