嵌入式经典面试题六:
关键字 static 的作用是什么?
这个简单的问题很少有人能回答完全。在 C 语言中,关键字 static 有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其
它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声
明它的模块的本地范围内使用。
嵌入式经典面试题八:
关键字 volatile 有什么含意 ? 并给出三个不同的例子。
一个定义为 volatile 的变量是说这变量可能会被意想不到地改变, 这样,编译器就不会去假设这个变量的值
了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存
在寄存器里的备份。下面是 volatile 变量的几个例子:
1) 并行设备的硬件寄存器(如:状态寄存器)
2) 一个中断服务子程序中会访问到的非自动变量 (Non-automatic variables)
3) 多线程应用中被几个任务共享的变量
1)一个参数既可以是 const 还可以是 volatile 吗?解释为什么。
2); 一个指针可以是 volatile 吗?解释为什么。
下面是答案:
1)是的。一个例子是只读的状态寄存器。它是 volatile 因为它可能被意想不到地改变。它是 const 因为程序
不应该试图去修改它。
2); 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个 buffer 的指针时。
1.static 变量和 static 函数各有什么特点?
static 变量分两种,局部变量和全局变量,他们都放在全局数据区(我觉得表达不准确。全局静态变量
本文件可见,局部静态变量在在定义的 block 内可见; static 函数也放在全局数据区,外部文件不可见;
3.描述一下嵌入式基于 ROM 的运行方式基于 ram 的运行方式有什么区别
rom 运行方式是指指令从 rom 中取出,首先对 rom 有一定要求 (例如按 block 进行读写 nand flash 就不支
持 rom 运行,同时由于 rom 读写的限制,无法完成异常处理,即异常处理函数肯定放在 ram 中)。在有区
别就是片选不一样。
4.task 有几种状态? 就绪、挂起、阻塞、睡眠、运行
5.task 有几种通讯方式? 共享内存、信号量、消息队列和管道、 socket
6.C 函数允许重入吗 ?函数的重入和不可重入是和函数本省有关的 ,例如一个字符串拷贝的函数就是可
重入的 ,而一个在函数中调用了 I/O, 分配内存是就可能是不重入的 ,是否重入要看调用的库函数是否重入的 .
现在 Windows 平台下的 C 库已经支持多线程了 ,所以如果你调用的是多线程版的 C 运行库 ,应该都是可重入
的.
7.嵌入式操作系统和通用操作系统有什么差别? 多优先级,抢占型,实时操作系统。嵌入式操作系统一
评论0
最新资源