嵌入式Linux C笔试题积累

本文主要探讨了嵌入式系统中断服务子程序(ISR)的特点,包括ISR不能返回值、传递参数,以及浮点运算的限制。接着讨论了C语言中的位操作、volatile关键字的作用、const的用法,以及如何设置绝对地址的变量值。同时,介绍了内存复制函数memcpy的实现,字符串比较函数strcmp的编写,以及数组和指针的相关知识。最后,给出了字符串逆序和判断回文字符串的函数实现。
摘要由CSDN通过智能技术生成

1.嵌入式系统中断服务子程序(ISR) 

中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。

 __interrupt double compute_area (double radius)

{

    double area = PI * radius * radius;

    printf("Area = %f", area);

    returnarea;

}

1).ISR 不能返回一个值。

2).ISR 不能传递参数。

3).在许多的处理器/编译器中,浮点一般都是不可重入的。有些处理器/编译器需要让额处的寄存器入栈,有些处理器/编译器就是不允许在ISR中做浮点运算。此外,ISR应该是短而有效率的,在ISR中做浮点运算是不明智的。

4).与第三点一脉相承,printf()经常有重入和性能上的问题。

 

2.C语言中对位的操作

比如对a的第三位清0,第四位置1.

#defineBIT3 (1<<3)

#defineBIT4 (1<<4)

a&= ~BIT3;   a |= BIT4; 

 

3.volatile

表示这个变量会被意想不到的改变,每次用它的时候都会小心的重新读取一遍,不适用寄存器保存的副本。

volatile表示直接存取原始地址

例:

并行设备的硬件寄存器(状态寄存器)

在多线程运行的时候共享变量也要时时更新

一个中断服务子程序中访问到的的非自动变量(定义变量时默认为自动变量,这里指全局变量或加修饰的变量)

 

4.Const:
Const char*p    //p 指向的内容不能被修改
Char const *p;     // p指针指向内容不能修改

Const(char*) p;  //p指针不能修改,p++ 操作会出错
Const type fun();     // 返回值类型为一个const type类型,不能修改
Fun( const char *p);     //保护指针,引用传递的值不被修改.
类成员函数:中fun() const;     //表明FUN不能修改成员变量,不调用非const 成员函数.

 

5.

要求设置一绝对地址为0x67a9 的整型变量的值为0xaa66

int*ptr = (int *)0x67a9;

*ptr= 0xaa66;

 

7.

a)对于整形变量A=0x12345678,请画出在little endian及bigendian的方式下在内存中是如何存储的?

little endian        big endian 刚好反过来
高地址--〉0x12      低地址--〉0x12
          0x34                0x34
          0x56                0x56
低地址--〉0x78      高地址--〉0x78
记忆方法:

小端模式 : 地址的增长顺序与值的增长顺序相同(x86为小端模式)

大端模式 : 地址的增长顺序与值的增长顺序相反

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值