语言 面试题-一道面试题,不是很清楚这个例子怎么解答,求大神帮助.

问题描述

一道面试题,不是很清楚这个例子怎么解答,求大神帮助.
提问是 这段代码有什么问题, 有什么解决思路。(我其实连问题都没看出来,代码可以编译)

// Memory-mapped peripheral
#define STATUS_REG_ADDR 0x12345678 // 32-bit status register
#define DATA_REG_ADDR 0x1234567C // 32-bit data register

// Status register bits
#define BUSY_BIT_MASK 0x00000080 // Busy bit == '1' while peripheral busy

uint32_t get_value()
{
while (((*(uint32_t*)STATUS_REG_ADDR) & BUSY_BIT_MASK) == 1)
;

return *(uint32_t*)DATA_REG_ADDR;

}

解决方案

首先忙碌标志位是第8位,0000 0000 0000 0000 0000 0000 1000 0000
其次是判断标志位是否为1,那么状态寄存器地址取忙碌标志位的值是用按位与操作,得到状态寄存器第八位的值,如果忙碌,则第八位是1,
如果空闲,第八位是0,所以判断的结果不应该是1,而是0000 0000 0000 0000 0000 0000 1000 0000,即((*(uint32_t*)STATUS_REG_ADDR) & BUSY_BIT_MASK) == BUSY_BIT_MASK
在一个判断逻辑问题,标志位为忙时能取数据还是标志位为闲时能取数据的问题。

解决方案二:
我又试了下 之前把调试程序写错了 这儿下变成了 在调用get_value()的时候 出现针对 0x1234567C 也就是DATA_REG_ADDR 内存不能为read的出错
这段程序应该是想问这个导致这个内存出错的原因吧 还是?

解决方案三:
原来问题在于 返回值强制转换 引起的 虽然我不知道为什么 如果直接返回DATA_REG_ADDR 就不会有内存报错了.

时间: 2024-10-27 20:15:46

语言 面试题-一道面试题,不是很清楚这个例子怎么解答,求大神帮助.的相关文章

c语言-C++代码改成C语言代码,没学过C++好多看不懂啊(泪奔······)求大神指点,我用的VC6.0

问题描述 C++代码改成C语言代码,没学过C++好多看不懂啊(泪奔······)求大神指点,我用的VC6.0 代码如下, #include "winsock2.h" #include "Winsnmp.h" #include 这里是string以下都要用 < 和 > 括起来(不知为何不显示=,=) #include vector #include algorithm #include iostream #pragma comment(lib,"

c语言-菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点

问题描述 菜鸟OJ, C语言数简单列求和, 感觉测试没错, 但是wrong answer, 求大神指点 Description 有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13... 求出这个数列的前n项之和. Input 多测试用例,每个测试用例一行,每行是一个正整数n Output 为每个测试用例单独输出一行:该数列的前n项之和.结果均保留小数点后10位. Sample Input 1 2 3 Sample Output 2.0000000000 3.5000000000

java代码-请问这个c语言版的理发师问题,怎么改成java版的?,求大神赐教,感激不尽!!

问题描述 请问这个c语言版的理发师问题,怎么改成java版的?,求大神赐教,感激不尽!! #include #include #define random (rand()*10000)/RAND_MAX //用来产生随机数 main() { int chairs; //普通椅子数 int customers=0; //顾客数 int count=0; //循环中用来计量的 int waiting=0; //等候理发的人数 int finish=0; //已经理完发的人数 int work=0;

java多线程问题-有一道Java面试题,没太理解明白,求大神指点啊~

问题描述 有一道Java面试题,没太理解明白,求大神指点啊~ package test2; /** 设计4个线程,其中两个线程每次对i增加1,另外两个线程对i每次减少1 @author liuyu * */ public class Test { private int i ; private synchronized void inc(){ i ++; System. out .println(Thread.currentThread().getName()+ "--inc--" +

string-一道面试题,求大神帮助

问题描述 一道面试题,求大神帮助 public class ceshi{ String str=new String("good"); public static void main(String[] args){ ceshi cs=new ceshi(); cs.change(cs.str); System.out.print(cs.str); } public void change(String str){ str="test ok"; } } 正确答案是输出

java 面试题大全,求大神们帮助一下~~~~

问题描述 java 面试题大全,求大神们帮助一下~~~~ java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~java 面试题大全,求大神们帮助一下~~~~ 解决方案 求啥,百度上有的是,还带答案 解决方案二: http://pan.baidu.com/s/1kTxbjt9 百度文库 解决方案三: 同意楼上的,去百度上搜

java-谷歌面试题,求大神帮忙

问题描述 谷歌面试题,求大神帮忙 原题是这样的(后面我补充了中文解释): Don't mind the map After the trauma of Dr. Boolean's lab, the rabbits are eager to get back to their normal lives in a well-connected community, where they can visit each other frequently. Fortunately, the rabbits

出现频率-一道C语言编程题,本人初学者,求大神解答

问题描述 一道C语言编程题,本人初学者,求大神解答 编写程序实现功能:数据文件story.txt是一篇英文小故事,请先统计其中26个字母的出现次数. 要求一:再根据用户要求,输出某个字母的出现次数,直到用户输入#为止. 要求二:请输出出现频率最高的三个字母和它们的出现次数. 解决方案 #include #include #include int main() { int alpha[26]={0}; //用于计数26个字母出现的次数 FILE *text; //FILE 指针 char ch;

java试题,求大神解答啊

问题描述 java试题,求大神解答啊 2. 以下代码运行输出是() public class Person{ ????private String name="Person"; ????int age=0; } public class Child extends Person{ ????public String grade; ????public static void main(String[] args){ ????????Person p = new Child(); ???