嵌入式笔试

1、将一个字符串”1234…abcdef…”逆序排列。

char  *str=”1234…abcdef…”;

int n,i,j;

char tem;

while(*str)n++;

for(i=0;i<n-1;i++)

  for(j=0;j<n-i-1;j++)

  {

if(str[j]<str[j+1])

{

  Tem = str[j];

  str[j] = str[j+1];

  str[j+1] = tem;

}

}

2、计算一个字节(BYTE)里面有多少位(bit)为1。

char get_bit1(char BYTE)

{

  char bit,i;

  for(i=0;i<8;i++)

   if((BYTE>>i)&1)bit++;

return bit;

}

3、单片机上点后没有运转,请简述调试步骤。

①检查供电

②检查晶振

③检查RESET引脚的逻辑电平

④如果设计时,程序是从扩展的外部ROM运行的,还需检查EA脚

⑤检查MCU是否损坏或FLASH无法下载,换新芯片试试

4、static全局变量与普通全局变量有什么区别?

static全局变量,只能供本文件内的函数调用,不能被其它文件的函数调用

普通全局变量,可被其它文件的函数调用

5、static局部变量与普通局部变量有什么区别?

局部变量:每次进入进入子函数中重新赋值 static:静态变量,开始定义时赋值,以后进入子函数时之前在此函数中计算的值重新赋值该变量

6.寻找两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

 int different_bits(int num_1, int num_2)

{

    int count = 0;

    for (int i = 0; i < 32; i++)

    {

        if (((num_1 >> i) & 1) ^ ((num_2 >> i) & 1))

            count++;

    }

    return (count);

}

7.将一个无符号数的二进制数逆置

 unsigned int  reverse_bit(unsigned int num)

{

    int i = 0;

    unsigned int ret = 0;

   for (i = 0; i < 32; i++)

    {

        ret<<=1;

        ret |= ((num >> i) & 1);

    }

    return (ret);

}

8.将16进制字符串”A05B12C7”转换成int(32位)数0xa05b12c7,注:’0’=0x30,’A’=0x41

char  *str=” A05B12C7”;int  tem,i;

while(str[i])

{

tem<<4;

  if(str[i] >=0x30 && str[i] <=0x39)

tem|= str[i]-0x30;

elseif(str[i] >=0x41 && str[i] <=0x46)

tem|= str[i]-0x41+10;

 i++;

}

9.求平均值:数组char str[n],去除一个最大值和最小值,求平均值, (假设数组元素和为int数)。

char tem;

int sun;

for(i=0;i<n-1;i++)

  for(j=0;j<n-i-1;j++)

  {

if(str[j]<str[j+1])

{

  tem = str[j];

  str[j] = str[j+1];

  str[j+1] = tem;

}

}

for(i=1;i<n-1;i++)

 sum += str[i];

sum =sum/(n-2);

10. 编写一个程序,将字符串char *str2连接到字符串char *str1

void main(char *str1,char *str2;)  

{  

    int i=0,j=0;  

    while (str1[i]!='\0')  

    {  

        i++;  

    }  

    while (str2[j]!='\0')  

    {  

        str1[i++]=str2[j++];  

}  

    str1[i]='\0';  

}  

11. 用变量a给出下面的定义

a) 一个整型数(An integer)

b)一个指向整型数的指针( A pointer to an integer)

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

d)一个有10个整型数的数组( An array of 10 integers)

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

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

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as anargument and returns an integer)

答案:

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

12、.h头文件中的ifndef/define/endif 的作用?

答:防止该头文件被重复引用。

13.a=2;b=5;c=a+++b>>1;求c的值,写出运算过程

答案: c=((a++) +b)>>1  c=6

14. 写一个“标准”宏Max,这个宏输入两个参数并返回较大的一个。

#define Max(A,B) ((A) >= (B) ?(A) :(B))

15.中断的概念,简述中断过程

中断的概念:当外部请求服务时,暂时中断当前主程序,转而执行中断处理程序,完成后再自动返回被中断的主程序继续运行

中断过程:中断源发出中断请求 -> 对中断请求进行响应 -> 执行中断处理程序 >返回主程序

16. 步进电机的工作原理?

通常电机的转子为永磁体,当电流流过定子绕组时,定子绕组产生一矢量磁场。该磁场会带动转子旋转一角度,使得转子的一对磁场方向与定子的磁场方向一致。当定子的矢量磁场旋转一个角度。转子也随着该磁场转一个角度。每输入一个电脉冲,电动机转动一个角度前进一步。它输出的角位移与输入的脉冲数成正比、转速与脉冲频率成正比。改变绕组通电的顺序,电机就会反转。所以可用控制脉冲数量、频率及电动机各相绕组的通电顺序来控制步进电机的转动

......

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雲烟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值