嵌入式Linux C笔试题积累
2019-07-12 22:23发布
生成海报
1.嵌入式系统中断服务子程序(ISR)
中断是嵌入式系统中重要的组成部分,这导致了很多编译开发商提供一种扩展—让标准C支持中断。具代表事实是,产生了一个新的关键字 __interrupt。下面的代码就使用了__interrupt关键字去定义了一个中断服务子程序(ISR),请评论一下这段代码的。
[cpp] view
plain copy
-
__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为小端模式)
大端模式 : 地址的增长顺序与值的增长顺序相反
8.1.
请实现内存复制函数void* memcpy(void* dst, void* src, int count)。
#include
#include
void* mem_cpy(void *dst, const void*src, int count) //参数定义为空指针类型,并且源地址内容不应该被改变,因此用const修饰
{
/*
if(NULL==dst|| NULL==src)
returndst;
*/
assert(dst); //若传入参数不为真,程序退出
assert(src);
while(count--)
{
*(char*)dst= *(char*)src; //强制转化为字符指针类型,并进行内容复制
dst= (char*)dst +1;
src= (char*)src +1;
}
returndst;
}
int main(int argc, char* argv[])
{
charFrom[100] ="Hello baby!";
charTo[100] = {0};
mem_cpy(To,From,100); //前两个参数位子不要弄错
printf("%s
",From); //输出字符串
printf("%s
",To);
return0;
}
精简版
char * strcpy(char * strDest,constchar * strSrc)
{
char* strDestCopy=strDest;
assert((strDest!=NULL) && (strSrc!=NULL) ); // #include
while((*strDest++=*strSrc++)!='
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮