文档章节

嵌入式面试笔试题

henry-zhang
 henry-zhang
发布于 2015/04/15 17:16
字数 890
阅读 44
收藏 0

嵌入式编程方面的问题:

1、找出下面程序的错误 (一个中断服务子程序ISR)

    interrupt double compute_area(double radius)

    {

        double area = PI *radius * radius;

        printf("\nArea=%f",area);

        return area;

    }

    解答:

        a、ISR不能返回一个值。

        b、ISR不能传递参数。

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

        d、printf经常是有冲入性和性能上的问题,所以一般不使用printf函数。

2、volatile关键字的意义和用途

    volatile的语法和const的语法是一样的,但是volatile的意思是“在编译器认识的范围外,这个数据可以被改变”。环境在不知原因的条件下改变数据,所以,volatile在告诉编译器不要擅自做出有关数据的任何假定,在优化期间这是特别重要的。

    通俗的说,volatile的一个定义为:定义为volatile的变量是说这个变量可能会被异想不到的改变,这样编译器就不会去假设这个变量的值了。精确的说,优化器在用到这个变量的时候必须每次都小心的重新读取这个变量的值,而不是使用寄存器中备份的值。

    下面是使用volatile变量的几个例子:

    a、并行设备的硬件寄存器,如状态寄存器,处理器的状态不停的在变化,所以寄存器的值也在不断的随处理器状态的变化而变化。

    b、一个中断服务子程序中会访问到得非自动变量

    c、多线程应用中被几个任务共享的变量。每个线程都有可能会修改变量的值。

    

    下面一个关于volatile的问题:

    一个参数既可以是const也是volatile吗?一个指针可以使volatile吗?

    第一个问题:是的,最好的例子就是只读的状态寄存器。他是volatile,因为它可能会被意想不到的改变;他又是const,因为程序不应该试图去修改它。

    第二个问题:是的。尽管这并不常见,一个例子就是当中断服务子程序修改一个指向一个buffer的指针时。    

 

    再看一个实例:

    下面的函数有什么错误?

    int square(volatile int *ptr)

    {

        return *ptr * (*ptr);

    }

    解析:程序的目的是想用来返回指针*ptr指向值的平方,但是由于*ptr是指向一个volatile型参数,编译器将产生下面类似的代码:

    int square(volatile int *ptr)

    {

        int a,b;

        a = *ptr;

        b = *ptr;

        return a*b;

    }

    由于*ptr的值可能被意想不到地改变,因此a和b可能是不相同的。结果是可想而知的。

    正确的代码如下:

    long square(volatile int *ptr)

    {

        int a;

        a = *ptr;

        return a*a;

    }

 

3、访问特定位置的内存特点

    要求设置一绝对地址为0x67a9的整型变量的值为0xaa66.编译器是一个纯粹的ANSI编译器。

    典型的答案为:

        int *ptr;

        ptr = (int *)0x67a9;

        *ptr = 0xaa66;

    一种不合理的方法:

        *(int *const)(0x67a9) = 0xaa66;

4、写两段代码,一个设置a的bit 3,一个清楚a的bit 3

    最佳答案:

    #define BIT3 (0x1 << 3)

    static int a;

    void set_bit3(void)

    {

        a |= BIT3;

    }

    void clear_bit3(void)

    {

        a &= BIT3;

    }

 


本文转载自:

henry-zhang
粉丝 2
博文 62
码字总数 1431
作品 0
海淀
私信 提问
16.09.23、深圳科陆校招、java工程师面试记录

1、笔试,java基础+行测。 2、一面,基本人事面,注重综合素质,会问简单专业问题,面试官(女主管模样)软件硬件测试都懂。 3、二面,技术面,面试我的貌似是c/c++工程师(技术男),所以并...

761218914
2016/09/25
27
0
笔试题集锦(1)

1) 下面代码的结果是什么?(台湾某cpu公司05年笔试题) include using namespace std; define product(x) (x*x) int main() { int i=3,j,k; j = product(i++); k = product(++i); cout<<"j="......

嗯哼9925
2017/12/27
0
0
在appstore里面搜索android会出现哪些鬼?

  曾经一个朋友建议我去麦当劳买完套餐,然后去KFC吃,看看会有什么效果。我当时的一次反应是会不会被KFC的工作人员打呢?这是赤裸裸的砸场子唉,就好像07年我最早研究SEO的时候,在谷歌搜...

程序员客栈
2016/05/23
45
0
新书出版 |《数据库程序员面试笔试真题库》

新书出版 《数据库程序员面试笔试真题库》 新书出版 《数据库程序员面试笔试真题库》 书名: 数据库程序员面试笔试真题库 作者:李华荣 定价: 69.00元 出版社名称: 机械工业出版社 出版时间:...

小麦苗
2018/08/07
76
0
春招已近,这份GitHub万星的ML算法面试大全请收下

机器之心整理,项目作者:HUA Yang,机器之心编辑部。 春季到来,春招不久也会开始。在本项目中,作者为大家准备了 ML 算法工程师面试指南,它提供了完整的面试知识点、编程题及题解、各科技...

机器之心
02/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

[mycat]PartitionByString分片报错

java.lang.RuntimeException: error,check your partitionScope definition.at io.mycat.route.util.PartitionUtil.<init>(PartitionUtil.java:69) PartitionUtil.java 注意:其中count,l......

Danni3
21分钟前
8
0
OSChina 周三乱弹 —— 魂淡!不是这种粪发涂墙

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小小编辑推荐歌曲《10/10》- Rex Orange County 《10/10》- Rex Orange County 手机党少年们想听歌,请使劲儿戳(这里) @奋斗的小牛 :上午...

小小编辑
34分钟前
615
8
Arduino教程:认识Arduino控制板

@toc 1.1 课程说明 认识Arduino控制板的各个部分, 1.2 器材 名称 数量 规格 Arduino uno控制板 1 R3 1.3 UNO电路: UNO参数 名称 参数说明 工作电压: 5V 输入电压: 接上USB时无须外部供电...

acktomas
40分钟前
6
0
WeUI框架

WeUI框架 WeUI是一套小程序的UI框架,所谓UI框架就是一套界面设计方案,有了组件,我们可以用它来拼接出一个内容丰富的小程序,而有了UI框架,我们就可以让我们的小程序变得更加美观。 体验W...

达达前端小酒馆
43分钟前
5
0
Rainbond 5.1.8发布,应用网关支持多IP网络接入

2019年10月23日,Rainbond发布5.1.8版本,本次版本更新带来了应用网关对多IP的支持, 第三方组件对域名实例的支持 等新功能和修复若干BUG。 Rainbond:支撑企业应用的开发、架构、交付和运维的...

好雨云帮
44分钟前
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部