Intel面试题

来源:互联网 发布:数据之巅pdf 编辑:程序博客网 时间:2024/05/22 15:59

再加一些:
1、你认为一个好的Project leader应该具备那些特点

2、你认为自己有哪些自豪的地方适合Intel,技术的或者非技术的

3、PCI总线上的设备发现与资源分配的过程

4、对于Cache的认识,至少有两个面试官问了这个问题 还有一下想不起来了,大家补充吧

【 在 kongfu (NullPointer) 的大作中提到: 】 :
Intel华工面试题集(02.11.20): : (自己的答案,外加考官的一些提示信息,不对的大家补充) :
1、南北桥各自的作用? :
2、一个链表,不知道header指针,只知道其中一个节点指针,要删除这个节点?
:   h->a->b->c->d->...    不知道h位置,只知道p指向c,要del c,不能破坏链其他节 : 点情况! :   前移,del next :
3、MFC中几个macro作用 : #define (name) do_##name          (x)   do_x : #define (name) #@name             (x)   'x' :

(2) 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?
设计时候如何具体的实现。
  (3) OS相关的问题,内存访问,cache等(包括cache在整个系统中的位置,画出来
,并解释)
  (4) 解释例如mov ax,100H 这样一条指令的cpu, os, memory等都完成了什么样的工4005f8da13?应届生求职网YingJieSheng.COM?60d149af1f
作。
编译原理,操作系统和数据结构等基础知识比较重要,感触颇深,自己的基础不够扎
实,一些问题没有很好的答出来,或者解释的不对最后在第四轮被据了。

1。 你觉得C程序中为什么会有main(), 有没有想过 exit,return,或什么都不做 都能够让程序正常终止
:(2) 编译中的问题:全局变量如int i=5; int*(pf)()=foo; 分别在何时被初始化?设计时候如何具体的实现

1.叙述内存泄漏的原理和常用解决方法
一块分配的内存失去了所有引用
: 2.UNIX中的Zombie Process是怎么形成的,为啥用kill杀不掉,应该怎样避
: 免
父进程没有调用wait
kill只是发送一个signal, zombie已经不会获得cpu时间了, 所以不可能处理
这个signal.
: 3.叙述滑动窗口的原理
根据接收方接收缓冲区的大小来协调发送方的发送速度。记不清了
: 4.实现strcpy代码
: 5.已经实现了一个TCP,怎么测试它
将每个状态都走到?
: 实模式和保护模式的区别
地址翻译的不同
实模式未启用内存管理单元, 只能访问1M的地址空间(seg*16+off)
保护模式启用内存管理单元, 使用的是虚拟地址

1. 三个float:a,b,c 问值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b
2. 把一个链表反向填空
3. 设计一个重采样系统,说明如何anti-alias
4. y1(n)=x(2n), y2(n)=x(n/2),问:
如果y1为周期函数,那么x是否为周期函数
如果x为周期函数,那么y1是否为周期函数
如果y2为周期函数,那么x是否为周期函数
如果x为周期函数,那么y2是否为周期函数
5. 如果模拟信号的带宽为5KHZ,要用8K的采样率,怎么办。
6. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?
7. x^4+a*x^3+x^2+c*x+d最少需要作几次乘法
8. 什么情况下,sin(x+y)+y ~ ....
9. 下面哪种排序法对12354最快
a quick sort
b.buble sort
c.merge sort
10. 哪种结构,平均来讲,获取一个值最快
a. binary tree
b. hash table
c. stack
发信人: unfair (黑色的眼), 信区: CS
标 题: Re: INTEL面试题
发信站: 饮水思源 (Fri Nov 2 14:54:34 2001) , 转信

【 在 hfzjz (心神已走) 的大作中提到: 】
:
: 【 在 babycat (2tiger) 的大作中提到: 】
: : 标 题: INTEL面试题
: : 发信站: 饮水思源 (2001年11月02日08:26:57 星期五), 站内信件
: :
: : 1. 三个float:a,b,c
: : 问值
: : (a+b)+c==(b+a)+c
: 1
: : (a+b)+c==(a+c)+b
: 0or1

so easy
: : 2. 把一个链表反向填空
: 栈或两遍扫描(辅助空间若干)
so easy
: : 3. 设计一个重采样系统,说明如何anti-alias
: ???
anti-alias不懂的说

: : 4. y1(n)=x(2n), y2(n)=x(n/2),问:
: : 如果y1为周期函数,那么x是否为周期函数
: : 如果x为周期函数,那么y1是否为周期函数
: : 如果y2为周期函数,那么x是否为周期函数
: : 如果x为周期函数,那么y2是否为周期函数
: 皆周期
: : 5. 如果模拟信号的带宽为5KHZ,要用8K的采样率,怎么办。
: 平滑
: : 4. 某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最化了,换到另一个系统
: : (300M的CPU,50M的SDRAM)中运行,还需要优化吗?
: 需要

也有针对CPU优化的,因为程序分片运行的时间片数的实际差距变了,所以需要
改变调度 算法可以得到更优的性能
: : 5. x^4+a*x^3+x^2+c*x+d最少需要作几次乘法
: 3次 (((x+a)*x+1)*x+c)*x+d

right
我也是这么解的

: : 6. 什么情况下,sin(x+y)+y ~ ....
: ???
: : 7. 下面哪种排序法对12354最快
: : a quick sort
: : b.buble sort
: : c.merge sort
: b?

错的吧,因为冒泡排序的比较次数还是很多的

: : 8. 哪种结构,平均来讲,获取一个值最快
: : a. binary tree
: : b. hash table
: : c. stack
: b

Intel公司 c/++笔试题目
:lancen :2007年3月5日链表题:一个链表的结点结构
struct Node
{
int data ;
Node *next ;
};
typedef struct Node Node ;


(1)已知链表的头结点head,写一个函数把这个链表逆序 ( Intel)

Node * ReverseList(Node *head) //链表逆序
{
if ( head == NULL || head->next == NULL )
return head;
Node *p1 = head ;
Node *p2 = p1->next ;
Node *p3 = p2->next ;
p1->next = NULL ;
while ( p3 != NULL )
{
p2->next = p1 ;
p1 = p2 ;
p2 = p3 ;
p3 = p3->next ;
}
p2->next = p1 ;
head = p2 ;
return head ;
}
(2)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)
Node * Merge(Node *head1 , Node *head2)
{
if ( head1 == NULL)
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
Node *p1 = NULL;
Node *p2 = NULL;
if ( head1->data < head2->data )
{
head = head1 ;
p1 = head1->next;
p2 = head2 ;
}
else
{
head = head2 ;
p2 = head2->next ;
p1 = head1 ;
}
Node *pcurrent = head ;
while ( p1 != NULL && p2 != NULL)
{
if ( p1->data <= p2->data )
{
pcurrent->next = p1 ;
pcurrent = p1 ;
p1 = p1->next ;
}
else
{
pcurrent->next = p2 ;
pcurrent = p2 ;
p2 = p2->next ;
}
}
if ( p1 != NULL )
pcurrent->next = p1 ;
if ( p2 != NULL )
pcurrent->next = p2 ;
return head ;
}
(3)已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序,这次要求用递归方法进行。
答案:
Node * MergeRecursive(Node *head1 , Node *head2)
{
if ( head1 == NULL )
return head2 ;
if ( head2 == NULL)
return head1 ;
Node *head = NULL ;
if ( head1->data < head2->data )
{
head = head1 ;
head->next = MergeRecursive(head1->next,head2);
}
else
{
head = head2 ;
head->next = MergeRecursive(head1,head2->next);
}
return head ;
}

intel面试经历
:lancen :2007年3月8日11.14
  接到intel上海的电话,让15号早上8:30在楼下笔试。hr jj很忙的样子,说她是int
el的SSG部门,请笔试的时候带上。。。没等说完就把电话挂了,靠。
 晚上去听了intel的宣讲会。感觉乱糟糟的,一个部门接着一个部门走马灯似地介绍
。听得不耐烦了,于是没等宣讲会结束就离座走人。

11.15
  急急忙忙地在实验室吃完我的早饭,跑到楼下,发现蒙109门口已经排起了队。进去后
拿到考卷,发现又有智力题,晕啊。基本上没找到规律,连蒙带猜地做完,心想这回要挂
了。

  下午的时候漏接了SSG部门的电话,于是打过去,被告知晚上8:30到金陵饭店面试。暗
喜,居然笔试没挂!于是电话推迟华为的座谈会时间。晚饭过后,接到在另一个DHG部门的
师兄的电面,问了我项目和一些C/C++,TCP/IP的问题。临结束的时候责备我说,网申的简
历怎么填得这么简单,技能那项就两句短短的话?我辩解说,我也不想啊,这不是没法修
改了么。

  电面完了后和同学一起打车到了金陵。在2116等了一会,看到我宿舍上铺的同学一面结束
过来。这才明白,今天是连着面三轮啊,晕~紧张起来了,心想今天不知道能走到哪一步了。。。

  坐了一会,hr jj把我发配到了2021房间。偶敲门,礼节性地握手,落座。对面的面试
官问,你是XXX的学生吧?偶一楞,哇塞,碰到学长了!但是接下来的面试过程就没那么轻松
了,他开始问我TCP/IP,问得非常细节,而且问题一个接着一个,貌似不把TCP协议的所有细节
都问个遍不罢休的样子。然后就开始问我排队论的内容,让我给出一个M/M/1队列的平均队列
长度。我坦白已经不知道怎么算了。于是他开始问我自相似理论,我想,反正今天看来要
死在这里了,于是很愤慨地说,这玩意儿就是几个家伙为了刨论文而炒作概念,现在看谁还提
自相似理论?没想到他冲我一笑,表示赞同我的鄙视,真是出乎我的意料!于是面试以一个操作
系统题目结束,用pv写环形缓冲区的生产者/消费者问题。出来后长叹一声,唉,被人家鄙视了。没想到回到2116,惊喜地发现自己居然还活着。。。

 第二轮面试在2009房间,面试官是个30多岁的人,很和蔼。整个过程也非常轻松,我花了10
分钟给他做无线传感器网络的科普,再花了10分钟给他讲解我参加的一个863项目的整个框架
流程以及实现细节。其间网易的那个死女人(据说是宣讲会上打扮得很风骚的那个。)给我打电话
让我第二天早上去东大笔试。我气死了,心想妈的昨天去你们宣讲会提前走居然连礼物都给没收
了,什么玩意儿啊!没等她说完就道别把电话挂掉了,接着继续讲。最后面试官就开始跟我
吹他们的小组,呵呵。我开心死了,一个技术问题都不问,好人啊!

 回到2116等第三轮面试,看到整个房间里除了hr jj,已经没什么其它人了。。。等待。
木头发来短信,说要把她今天的好运全给我 :)  没聊几句,我被安排到503。就是之前电面我的
师兄的老板的老板。他告诉我说,他同时代表SSG部门和DHG部门面试我。于是前半阶段问开放性
问题,后半阶段问技术性问题。面到一半的时候,我回答他一个技术问题时,用了“可能”这个
词,他追问我是知道答案还是猜的。我毫不犹豫地说我是猜的。他不满地说,你面试的时候怎么
可以这么随便呢。。。我汗。。。。
 结束的时候他和我一起出门,然后把我送到金陵饭店的大门口。和他握手道别,看着他转身回
去之后,我看了下时间,快晚上11:00了,早没地铁了。深深地吸了口气,南京的夜晚真是冷啊。没办法,只能走着回去了。

11.16
 晚上接到电话,通知我第二天到金陵去参加SSG部门的面试。应该是SSG部门的终面了。木头给我发过来一些别人写的intel的hr面的面经,我心里稍微有了些底,不过想起在趋势被这种类型的面试问挂掉,还是有点害怕。
 
11.17
 在去金陵的地铁站接到DHG部门的电话,要求电面我。我把时间推迟,然后和同学一起到了金陵。整个大厅里入耳的都是叽里呱啦的鸟语。我按要求到1108房间,md等了好久才轮到我。因为之前
Siemens的面试就是全英文的,我才不惧她呢。大致讲了下自己的项目,然后聊我的学习,生活,团队,接着就是对加班的看法什么的,然后宣告结束,填了张Application Form,走人。

 下午再次接到DHG部门的电面,从项目到技术盘问了一遍。让我在几种进程间通信方式中选择一种最好的机制实现快速的小数据量的交换。我编程的时候可从没考虑过这种谁好谁坏的问题,于是说我不知道该怎么选择。对方无奈,于是开始问我内核编程,让我解释自旋锁的工作原理,还很鄙夷地说,你们的平台不是SMP的,用什么自旋锁啊。我抗议说,这不是显得兼容性更好嘛!
 他们换了个人继续问我C/C++问题,然后电面结束。

11.18
 晚上去把中兴的offer给拒掉了。想想自己为了拿到中兴的这个offer实在是非常的不容易。觉得对不起人家(他们不招南大的,我和另外一个同学是特批的,并且我属于霸王面),所以很坦诚地告诉他们我目前找工作的状态。hr很和气地和我握手道别,祝我好运。
 
 回来后接到DHG部门经理的电话,告诉我给我DHG部门的offer了,并说我很有可能拿到SSG部门的offer,要求我拒掉那个offer。答应他了。让我等下周的正式offer。长出一口气,终于可以休息一下了。

intel面试题目的总结
:lancen :2007年3月9日从第一次参加的intel的宣讲会开始到现在只能忙着写论文,
找工作基本上算是告了一个段落
当初定下的目标不多,不管结果成功或失败,都是可以总结出一些经验来的
这个公司最终没有去成的原因自己想过,就不在这说了
把我前面每次面试后做的一些小记录做个总结,主要把印象中的题目做个罗列,
或许直接意义不大,但希望能给大家一个参考(我申请的是硬件的职位)
有些信息模糊或给你带来困扰的地方请见谅
1.接到电话,是前一天宣讲会投的简历,又投了email,网申很麻烦
问了我的情况,大概说了一下工作学习方面的经历,问我关于electromagnetism的知识
,约一个时间面试
2.E1部门前后两个人面试,英文面试
microstrip and stripline哪一种传输速度比较快,哪种特征阻抗更大
一般的特征阻抗有多大
why reflection happens
why overshoot and undershoot happens?
what''s differencial signal and why use such signal?
what is the key point in layout between northbridge and cpu
what is northbridge and southbridge
what is pci express and what is its feature
时钟上升沿的“毛刺”会有什么影响?
阻抗匹配的问题
what is my weakness
让我问问题
第二位比较年轻的一位工程师
主要针对我的简历问一些问题,
画一下X86架构的框图,
hyperlink的总线宽度,usb的速度,pci的速度,pciexpress应该连接在nb还是sb
dram,sram,sdram,ddrram,ddrramII各自的原理和区别
dsp与arm的区别差异,各自的结构
AD卡中,adc的位宽,采样的问题,分辨率,有效位,如何验证这个有效位
strongarm与普通cpu区别
verilog的一个小问题
3.第三天C部门面试
第一位女士给我的面试,
首先先用英语大概介绍一下自己
然后问我一些技术问题,
负载开路情况下驱动端A点输出一个阶越波,负载端B的波形
用cmos设计一个反相器,CMOS的内部结构
sram和sdram的区别,内部结构
解释一下什么是Virtual memory?
和我说了一些这个部门的情况
第二位面试官是一个男士,
他的问题基本属于比较宽泛,
主要问了我一些以前做过的项目经历和工作时候的经历
还问我如果录用我了如何选择这个部门还是前一天的部门
他也透露了一些这个部门的信息
这个部门的工作情况,对英文的要求,口语的要求
第三位面试官,
他的问题主要是和技术相关
说前端总线的作用是什么,
vtt是什么作用,用2/3 VTT来作为基准比较,确定高低电平。
解释pci的作用是什么,地址线和数据线复用,通过什么信号来选择,
ddrram的工作原理,频率是多少,同步时钟如何工作
主板各种频率如何同步,
硬件设计的总体流程
4.C部门第二次,4个人,部分英文面
第一个人是这个部门的经理英文面试
他给了我两个大问题,用英文,现在想想印象非常的模糊
好像是硬件开发的流程
还有一个好像是遇到困难如何沟通?
第二个
拿了张试卷做了一下,很简单的几个小题目,还犯了些小错误,被他指正了
主要是数字逻辑的题目
第三个
主要谈了一下个人经历,
项目经验
skew,jitter等等概念
t_co,t_flight,t_hold ,t_skew, t_CLK,t_setup等等关系
第四个也是比较随意的谈了谈,也是两个一般性的英文问题
做了几个题目,373是什么如何工作、I2C的原理,现有的数字电视传输标准是什么等等
5.E2电话面试,全英文
首先介绍一下自己
问我对什么样的工作感兴趣
然后她问了些我项目上的描述
项目上的分工,如何展开计划,遇到过什么困难
主板的结构
sram和dram的区别
risetime,falltime
遇到困难或问题如何解决
后来她介绍一下E2的主要工作
6.某天接到电话下午hr面试
多数英文面
问的问题多数是一般性问题,基本上很多人都会问到
介绍项目经历
兴趣爱好,长处,短处
如何和客户或同事打交道,如何和同事交流,是否会遇到一些难题,如何解决
涉及到一些具体例子
免费考研网www.freekaoyan.com


Intel上海交大笔试题目zz
:lancen :2007年3月9日1。 pipeline
2。 程序流程图题目
3。 哲学家进餐
4。 32bit,64bit,两个平台上complier,linker,os kernel,library,debuger的性质
5。 const char * vs char const * (?)
6。 GDT and LDT
7。 1 1<<1
8。 Stack性质
9。 ???
10。正方体中压力什么的。。。
大题
1。f[40,400],log10变换
2。ACPI
3。读程序
4。频谱,采样分析


Intel一道笔试面试题目,各位有空看一下.
:lancen :2007年3月9日Intel一道笔试面试题目,各位有空看一下.

TOTAL个人围一圈,从1开始数到N,谁数到N出圈,下一个人继续从1开始数,返回最后一个出局的人。
  #define TOTAL 15;
   int xxxx(int N)
  {
   int ring[TOTAL] = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} //全是1
   int nextstart = 0, counter=0;
   for (i =1; i   counter = 0;
   while(counter    if (_______________)
   ( ______________ ; )
   else
   (____________; )
   }
   ring[nextstart]=0
   }
   return nextstart +1;
  }

[ 本帖最后由 dominic99 于 2005-10-30 21:48 编辑 ]

Springup 2005-10-30 00:08

Intel一道笔试面试题目,各位有空看一下.

#include ;
#include ;

int main(void)
{
char players[20][10];
int isOuted[20];/*人是否已出圈*/
int m;/*出圈数字*/
int s;/*起始位置*/
int i, j = 1;/*循环计数器变量*/
int n;/*参加游戏的人数*/

puts("请输入参加出圈游戏的人员名单");
for(i = 0; i < 20; ++i)
{
printf("第%d位:", i + 1);
scanf("\n%9[^\n]", players);
if( players[i][0] == '!' )
break;
}
n = i;/*获得参加游戏的人数*/
printf("请输入出圈数字:");
scanf("%d", &m);
printf("请输入起始位置:");
scanf("%d", &s);
printf("共有%d人参加游戏,出圈数字是%d,起始位置%d(%s)"
"\n\n开始游戏...\n", n, m, s, players[s - 1]);

for(i = 0; i < 20; ++i)
isOuted[i] = 0;/* 0表示没有出圈*/

for(i = 1; i <= n; ++i)
{
for(; j < m; ++j)
{
s %= n;
++s;
if(isOuted[s - 1])
--j;
}
isOuted[s - 1] = 1;/* 1表示出圈*/
printf("%s出圈!\n", players[s - 1]);
j = 0;
}
return 0;
}

er 2005-10-30 00:53

Intel一道笔试面试题目,各位有空看一下.

这是课本的题目,钱能的

dominic99 2005-10-30 06:50

那个三个空要怎么填呢?

Yarco 2005-10-30 08:39

不对.搞错...
再想想..

8想了...说明还没到去intel的时间...:)

个位积蓄...

越想越胡涂... 个位看者办.
if (ring[startnext++] && (startnext!=TOTAL))
count++;
else
startnext = (startnext==TOTAL) ? 0 : startnext;
快出标准答案.

[[i] 本帖最后由 Yarco 于 2005-10-30 21:12 编辑 ]

angelanpan 2005-10-30 11:36

确定这个程序是这个样子的吗?

因为for循环的最后一轮里面的while循环淘汰的是第Total-1轮的一个人,也就是说在完成for循环以后,nextstart指向的应该是(TOTAL-1)轮淘汰的人,这样接下来应该就是找到最后一个人啊,为什么这里直接返回(nextstart+1)(因为数组下标从1开始,所以nextstart对应的就是第nextstart+1个人)啊?

比如说TOTAL=3,N=2时候,第一次删除第2个人(数组下标为1),第二次删除第1个人(数组下标为0),这样做了2次循环后,nextstart=0;退出循环后,nextstart=0,这样返回的就是nextstart+1,也就是说最后的那个人是第一个人,但是很明显,最后的胜利者应该是第3个人啊?

我不知道这样的理解有问题没有?希望大家指正

中国管理员 2005-10-30 12:03

1111

1111

[ 本帖最后由 中国管理员 于 2005-10-30 20:21 编辑 ]

erduo100 2005-10-30 13:40

题真的有错

int ring[TOTAL] = {1} //全是1
第一个数为1,其他为0


楼主题目要给正确

bleem1998 2005-10-30 13:53


标题也要给正确
究竟是笔试还是面试?

dominic99 2005-10-30 13:55

回erduo100 . 不好意思,已改过来了.

题目是偶然在网上看到的,想了一下午还想不出一个确切的答案.
找不到答案.

各位有空再看看吧..担搁各位时间了..

soul_of_moon 2005-10-30 23:56

回复 10楼 dominic99 的帖子

二楼不是给你答案了吗?用数组或链表都可以.

soul_of_moon 2005-10-31 00:01


原帖由 soul_of_moon 于 2005-10-31 07:56 发表
二楼不是给你答案了吗?用数组或链表都可以.

不过用链表应该更容易吧.

chqg21 2005-10-31 00:51

华为笔试有一道很类似的题

我去华为笔试的时候也碰到了,说是N个人围一圈,排号1-N,从第一个人开始报数,报到3的离开,一直报下去,问最后留下的一个人原来排号几。当时我也晕了半天,后来是用数组解决的,也没检查对不对。

mq110 2005-10-31 00:52

我们学校的定制班考试 就有这道题.
用循环链表做 我想应该是最好的.

soul_of_moon 2005-10-31 01:05


原帖由 mq110 于 2005-10-31 08:52 发表
我们学校的定制班考试 就有这道题.
用循环链表做 我想应该是最好的.

钱能书上有。当时没好好看,不过现在想想也不是很难,用链表的话还蛮简单的。

openX 2005-10-31 01:25

ding

dongpy 2005-10-31 01:58

楼主,你题目出的有问题吧。

for (i =1; i
dongpy 2005-10-31 02:03

可以这样:

int xxxx(int N)
{
int ring[TOTAL]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}; //全是1
int nextstart = 0,counter=0;
for(int i=0;i {
counter = 0;
while(counter if ( ring[nextstart] == 1 && ++counter == N )
{
break;
}
else
nextstart = (nextstart+1)%TOTAL;
}
ring[nextstart] = 0;
}
return nextstart +1;
}

dongpy 2005-10-31 02:08

空白处可以填:

ring[nextstart] == 1 && ++counter == N

break

nextstart = (nextstart+1)%TOTAL

angelanpan 2005-10-31 02:30

恩,如果for循环是从0开始,而不是像楼主从1开始,这个答案是可以的

 

原帖由 dongpy 于 2005-10-31 10:08 发表
空白处可以填:

ring[nextstart] == 1 && ++counter == N

break

nextstart = (nextstart+1)%TOTAL


周五去intel笔试
:lancen :2007年3月9日字符串逆置
void (char *s)
{
char tmp;
int len=strlen(s);
int start=0,end=len-1;
while(start {
tmp=s[start];s[start]=s[end];s[end]=tmp;
}
return ;
}

 

详解C++/C中的数据在内存中的存取

本文介绍了指针的一个使用技巧,可以通过此方法将单片机中的变量按字节保存到EEPROM中,也可以从EEPROM中还原一个多字节的整型数或者浮点数。

在内存中变量对整数类型,包括
char, unsigned char, int, unsigned int, long, unsigned long
多于一个字节的按低字节在前,高字节在后的顺序存储的,比如
int iv = 0x1234,则在内存中的存储顺序,从地址由低到高的顺序排列,其值分别为: 34 12
long lv = 0x11223344则在内存中的顺序为: 44 33 22 11
如果想修改一个整型数的某个字节,则可以运用指针直接进行操作如下所示:
unsigned char *puc;
int i;
long lv = 0x11223344;
unsigned char temp[4]={0,0,0,0};

*puc = (unsigned char*)(&lv);
for(i=0; i{
temp = *(puc+i);
}
运行后temp中的值则为temp[]={0x44, 0x33,0x22,0x11};
如果要修改一个数的值也可以直接用以上方法把赋值前后的操作数对调一下即可
*(puc+i) = temp;
即可通过*puc将temp中的单字节数转换为一个长整型数赋给 lv
这种操作方法对数据的存储很有用,可以通过指针将长整型的数分别一个字节一个字节地写到文件中,读的时候按照同样的顺序再从文件中读到内存。当然在PC上也可以直接将长整型的数写到文件中,而在单片机中则只能一个字节一个字节地将数据写入到EEPROM中,通过这种指针操作就可以写到EEPROM中,或者读出整型或者浮点型数。以下为在ICCAVR中将数据写入到EEPROM和读出的程序。

void EEPROMWriteLong( int addr, // address in EEPROM
long dsrc) // source data
{
unsigned char *puc;

puc = (unsigned char*)(&dsrc);
EEPROMWriteBytes(addr, (void*)puc, sizeof(long));
}


long EEPROMReadLong( int addr)
{
long res;
unsigned char *puc = (unsigned char*)(&res);
EEPROMReadBytes(addr, (void*)puc, sizeof(long));
return res;
}
Tags: Intel  笔试 


笔试题目

1.设计一个重采样系统,说明如何anti-alias。

2.y1(n)=x(2n),y2(n)=x(n/2),问:

如果y1为周期函数,那么x是否为周期函数?

如果x为周期函数,那么y1是否为周期函数?

如果y2为周期函数,那么x是否为周期函数?

如果x为周期函数,那么y2是否为周期函数?

3.如果模拟信号的带宽为5kHz,要用8k的采样率,怎么办。

4.某个程序在一个嵌入式系统(200M的CPU,50M的SDRAM)中已经最优化了,换到另一个系统(300M的CPU,50M的SDRAM)中运行,还需要优化吗?

5.x^4+a*x^3+x^2+c*x+d最少需要做几次乘法。

6.三个float:a,b,c

问值:

(a+b)+c==(b+a)+c

(a+b)+c==(a+c)+b

7.把一个链表反向填空。

8.下面哪种排序法对12354最快?

A. quick sort

B. buble sort

C. merge sort

9.哪种结构平均来讲获取一个值最快?

A. binary tree
B. hash table
C. stack

10.

#include
“stdafx.h”
#include
struct bit
{ int a:3;
int b:2;
int c:3;
};
int main(int argc, char* argv[])
{
bit s;
char *c = (char*)&s;
*c = 0x99;
cout <<
s.a <return 0;
}

Output:?

11.

挑bug,在linux下运行:
#include
char
*reverse(char* str)
{
int len=0, i=0;
char *pstr=str, *ptemp,*pd;
while(*++pstr)
len++;
pstr--;
//ptemp=(char*)malloc(len+1);
ptemp=(char*)malloc(len+1);
pd=ptemp;
while(len--){
*ptemp=*pstr;
ptemp++;
pstr--;
i++;
}
*ptemp=*pstr;
ptemp++;
*ptemp=‘\0’;
return pd;
}
main()
{
char string[40]= “Hello World!”;
char *pstr=string;
printf(“%s”, pstr);
printf(“%s”, reverse(pstr));
}

实验室笔试题
1.写出下列信号的奈亏斯特频率

(1)f(t)=1+cos(2000pait)+sin(4000pait)
(2)f(t)=sin(4000pait)/pait
(3)f(t)=(sin(4000pait)的平方)/pait

2.有两个线程

void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}

(1)有没有其他方法可以提高程序的性能

(2)可不可以不使用信号之类的机制来实现上述的功能

3.优化下面的程序

(0)sum=0
(1)I=1
(2)T1=4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(11)IF I<20 GOTO (2)
Tags: Intel  笔试  面试 

 

原创粉丝点击