2013年北邮电子院计算机实习题目1——5 文字版

时间:2019-05-15 11:16:23下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《2013年北邮电子院计算机实习题目1——5 文字版》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《2013年北邮电子院计算机实习题目1——5 文字版》。

第一篇:2013年北邮电子院计算机实习题目1——5 文字版

1.设计一个平均值计数器,有一个输入窗口,可迅速算出输入的一系列数字的平均值和方差;同时支持加载外部文本,可算出文本中列出数字的平均值和方差。

2.给出数字序列A,B的值和逻辑函数F的表达式(与,或,非,异或,同或等),生成A,B和F的波形图。注:A,B序列可任意长度。

3.由数字信号处理原理可知:计算有限长数字序列线性卷积的公式为:

若x(n)x(n),0nN1

else0,nh(n)h(n),0nM1 else0,则y(n)

m0x(m)h(nm)0nNM1

h(n)取x(n)1,0n9

else0,0.5n,0n19 else0,设计程序求出:

(1)输出y(n)的值

(2)在图形方式下以x轴为n,y轴分别为x(n),h(n),y(n)画出其关系图(图上x轴单位长度可取5point,y轴单位长度可取20point)

4.每个同学自己设计一个多米诺骨牌动画,时长不少于60秒。

5.模拟信号发生器

1.题目要求:

(1)调制方式:幅度调制,频率调制。模拟信号和载波信号的频率,幅值可变。调制信号频率,幅值可变。

(2)画出信号波形。

(3)对该信号采样,并做文件存入磁盘中。

(4)可以适用多种调制方式。

第二篇:北邮电子院专业实验报告

电子工程学院

ASIC专业实验报告

班级: 姓名:

学号: 班内序号:

第一部分 语言级仿真

LAB 1:简单的组合逻辑设计一、二、实验目的 实验原理 掌握基本组合逻辑电路的实现方法。

本实验中描述的是一个可综合的二选一开关,它的功能是当sel = 0时,给出out = a,否则给出结果out = b。在Verilog HDL中,描述组合逻辑时常使用assign结构。equal=(a==b)?1:0是一种在组合逻辑实现分支判断时常用的格式。parameter定义的size参数决定位宽。测试模块用于检测模块设计的是否正确,它给出模块的输入信号,观察模块的内部信号和输出信号。

三、源代码

mux.v module scale_mux(out,sel,b,a);parameter size=1;output[size-1:0] out;input[size-1:0]b,a;input sel;assign out =(!sel)?a:

(sel)?b:

{size{1'bx}};endmodule

mux_test.v `define width 8 `timescale 1 ns/1 ns module mux_test;

reg[`width:1]a,b;

wire[`width:1]out;

reg sel;

scale_mux#(`width)m1(.out(out),.sel(sel),.b(b),.a(a));

initial

begin

$monitor($stime,“sel=%b a=%b b=%b out=%b”,sel,a,b,out);

$dumpvars(2,mux_test);

sel=0;b={`width{1'b0}};a={`width{1'b1}};

#5sel=0;b={`width{1'b1}};a={`width{1'b0}};

#5sel=1;b={`width{1'b0}};a={`width{1'b1}};

#5sel=1;b={`width{1'b1}};a={`width{1'b0}};

#5 $finish;

end endmodule

四、仿真结果与波形

LAB 2:简单时序逻辑电路的设计一、二、实验目的 实验原理 掌握基本时序逻辑电路的实现。

在Verilog HDL中,相对于组合逻辑电路,时序逻辑电路也有规定的表述方式。在可综合的Verilog HDL模型中,我们常使用always块和@(posedge clk)或@(negedge clk)的结构来表述时序逻辑。

在always块中,被赋值的信号都必须定义为reg型,这是由时序逻辑电路的特点所决定的对于reg型数据,如果未对它进行赋值,仿真工具会认为它是不定态。为了正确地观察到仿真结果,在可综合的模块中我们通常定义一个复位信号rst-,当它为低电平时对电路中的寄存器进行复位。

三、源代码

counter.v `timescale 1 ns/100 ps module counter(cnt,clk,data,rst_,load);output[4:0]cnt;input [4:0]data;input

clk;input

rst_;input

load;reg

[4:0]cnt;

always@(posedge clk or negedge rst_)

if(!rst_)

#1.2 cnt<=0;

else

if(load)

cnt<=#3 data;

else

cnt<=#4 cnt + 1;

endmodule

counter_test.v `timescale 1 ns/1 ns module counter_test;

wire[4:0]cnt;

reg [4:0]data;

reg

rst_;

reg

load;

reg

clk;

counter c1

(.cnt(cnt),.clk(clk),.data(data),.rst_(rst_),.load(load));

initial begin

clk=0;

forever begin

#10 clk=1'b1;

#10 clk=1'b0;

end

end

initial begin

$timeformat(-9,1,“ns”,9);

$monitor(“time=%t,data=%h,clk=%b,rst_=%b,load=%b,cnt=%b”,$stime,data,clk,rst_,load,cnt);

$dumpvars(2,counter_test);

end task expect;input [4:0]expects;

if(cnt!==expects)begin

$display(“At time %t cnt is %b and should be %b”,$time,cnt,expects);

$display(“TEST FAILED”);

$finish;

end endtask initial begin

@(negedge clk)

{rst_,load,data}=7'b0_X_XXXXX;@(negedge clk)expect(5'h00);

{rst_,load,data}=7'b1_1_11101;@(negedge clk)expect(5'h1D);

{rst_,load,data}=7'b1_0_11101;

repeat(5)@(negedge clk);

expect(5'h02);

{rst_,load,data}=7'b1_1_11111;@(negedge clk)expect(5'h1F);

{rst_,load,data}=7'b0_X_XXXXX;@(negedge clk)expect(5'h00);

$display(“TEST PASSED”);

$finish;

end endmodule

四、仿真结果与波形

五、思考题

该电路中,rst-是同步还是异步清零端?

在counter.v的always块中reset没有等时钟,而是直接清零。所以是异步清零端。

LAB 3:简单时序逻辑电路的设计一、二、实验目的 实验原理 使用预定义的库元件来设计八位寄存器。

八位寄存器中,每一位寄存器由一个二选一MUX和一个触发器dffr组成,当load=1,装载数据;当load=0,寄存器保持。对于处理重复的电路,可用数组条用的方式,使电路描述清晰、简洁。

三、源代码

clock.v `timescale 1 ns /1 ns module clock(clk);reg clk;output clk;initial begin clk=0;forever begin #10 clk=1'b1;#10 clk=1'b0;end end endmodule

mux及dffr模块调用代码

mux mux7(.out(n1[7]),.sel(load),.b(data[7]),.a(out[7]));dffr dffr7(.q(out[7]),.d(n1[7]),.clk(clk),.rst_(rst_));mux mux6(.out(n1[6]),.sel(load),.b(data[6]),.a(out[6]));dffr dffr6(.q(out[6]),.d(n1[6]),.clk(clk),.rst_(rst_));mux mux5(.out(n1[5]),.sel(load),.b(data[5]),.a(out[5]));dffr dffr5(.q(out[5]),.d(n1[5]),.clk(clk),.rst_(rst_));mux mux4(.out(n1[4]),.sel(load),.b(data[4]),.a(out[4]));dffr dffr4(.q(out[4]),.d(n1[4]),.clk(clk),.rst_(rst_));

mux mux3(.out(n1[3]),.sel(load),.b(data[3]),.a(out[3]));dffr dffr3(.q(out[3]),.d(n1[3]),.clk(clk),.rst_(rst_));mux mux2(.out(n1[2]),.sel(load),.b(data[2]),.a(out[2]));dffr dffr2(.q(out[2]),.d(n1[2]),.clk(clk),.rst_(rst_));mux mux1(.out(n1[1]),.sel(load),.b(data[1]),.a(out[1]));dffr dffr1(.q(out[1]),.d(n1[1]),.clk(clk),.rst_(rst_));mux mux0(.out(n1[0]),.sel(load),.b(data[0]),.a(out[0]));dffr dffr0(.q(out[0]),.d(n1[0]),.clk(clk),.rst_(rst_));

例化寄存器

register r1(.data(data),.out(out),.load(load),.clk(clk),.rst_(rst_));例化时钟

clock c1(.clk(clk));

添加检测信号 initial begin $timeformat(-9,1,“ns”,9);$monitor(“time=%t,clk=%b,data=%h,load=%b,out=%h”, $stime,clk,data,load,out);$dumpvars(2,register_test);end

四、仿真结果与波形

LAB 4:用always块实现较复杂的组合逻辑电路

一、实验目的

掌握用always实现组合逻辑电路的方法;

了解assign与always两种组合逻辑电路实现方法之间的区别。

二、实验原理

仅使用assign结构来实现组合逻辑电路,在设计中会发现很多地方显得冗长且效率低下。适当地使用always来设计组合逻辑,会更具实效。

本实验描述的是一个简单的ALU指令译码电路的设计示例。它通过对指令的判断,对输入数据执行相应的操作,包括加、减、或和传数据,并且无论是指令作用的数据还是指令本身发生变化,结果都要做出及时的反应。

示例中使用了电平敏感的always块,电平敏感的触发条件是指在@后括号内电平列表的任何一个电平发生变化就能触发always块的动作,并且运用了case结构来进行分支判断。

在always中适当运用default(在case结构中)和else(子if…else结构中),通常可以综合为纯组合逻辑,尽管被赋值的变量一定要定义为reg型。如果不使用default或else对缺省项进行说明,易产生意想不到的锁存器。

三、源代码

电路描述

always@(opcode or data or accum)begin if(accum==8'b00000000)#1.2 zero=1;else #1.2 zero=0;

case(opcode)PASS0: #3.5 out =accum;PASS1: #3.5 out =accum;ADD: #3.5 out = data + accum;AND: #3.5 out =data&accum;XOR: #3.5 out =data^accum;PASSD: #3.5 out=data;PASS6:#3.5 out=accum;PASS7:#3.5 out=accum;default:#3.5 out=8'bx;endcase end

四、仿真结果与波形

LAB 5:存储器电路的设计一、二、实验目的 实验原理 设计和测试存储器电路。

本实验中,设计一个模块名为mem的存储器仿真模型,该存储器具有双线数据总线及异步处理功能。由于数据是双向的,所以要注意,对memory的读写在时序上要错开。

三、源代码

自行添加的代码

assign data=(read)?memory[addr]:8'hZ;

always @(posedge write)begin memory[addr]<=data[7:0];end

四、仿真结果与波形

LAB 6:设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别

一、实验目的

明确掌握阻塞赋值与非阻塞赋值的概念和区别; 了解阻塞赋值的使用情况。

二、实验原理

在always块中,阻塞赋值可以理解为赋值语句是顺序执行的,而非阻塞赋值可以理解为并发执行的。实际时序逻辑设计中,一般情况下非阻塞赋值语句被更多的使用,有时为了在同一周期实现相互关联的操作,也使用阻塞赋值语句。

三、源代码

blocking.v `timescale 1 ns/ 100 ps

module blocking(clk,a,b,c);

output[3:0]b,c;

input [3:0]a;

input

clk;

reg

[3:0]b,c;

always@(posedge clk)

begin

b =a;

c =b;

$display(“Blocking: a=%d,b=%d,c=%d.”,a,b,c);

end endmodule

non_blocking.v `timescale 1 ns/ 100 ps module non_blocking(clk,a,b,c);

output[3:0] b,c;input[3:0] a;input clk;reg [3:0]b,c;always @(posedge clk)begin b<=a;c<=b;$display(“Non_blocking:a=%d,b=%d,c=%d”,a,b,c);end endmodule compareTop.v `timescale 1 ns/ 100 ps module compareTop;wire [3:0] b1,c1,b2,c2;reg[3:0]a;reg clk;initial begin clk=0;forever #50 clk=~clk;end initial $dumpvars(2,compareTop);initial begin a=4'h3;$display(“_______________________________”);# 100 a =4'h7;$display(“_______________________________”);# 100 a =4'hf;$display(“_______________________________”);# 100 a =4'ha;$display(“_______________________________”);# 100 a =4'h2;$display(“_______________________________”);# 100 $display(“_______________________________”);$finish;end non_blocking nonblocking(clk,a,b2,c2);blocking blocking(clk,a,b1,c1);endmodule

四、仿真结果与波形

LAB 7:利用有限状态机进行复杂时序逻辑的设计一、二、实验目的 实验原理 掌握利用有限状态机(FSM)实现复杂时序逻辑的方法。

控制器是CPU的控制核心,用于产生一系列的控制信号,启动或停止某些部件。CPU何时进行读指令,何时进行RAM和I/O端口的读写操作等,都由控制器来控制。

三、源代码

补充代码

nexstate<=state+1'h01;case(state)1:begin sel=1;rd=0;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 2:begin sel=1;rd=1;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 3:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 4:begin sel=1;rd=1;ld_ir=1;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 5:begin sel=0;rd=0;ld_ir=0;inc_pc=1;ld_pc=0;data_e=0;ld_ac=0;wr=0;if(opcode==`HLT)halt=1;end 6:begin sel=0;rd=alu_op;ld_ir=0;inc_pc=0;halt=0;ld_pc=0;data_e=0;ld_ac=0;wr=0;end 7:begin sel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=0;wr=0;if(opcode==`SKZ)inc_pc<=zero;if(opcode==`JMP)ld_pc=1;end 0:begin sel=0;rd=alu_op;ld_ir=0;halt=0;data_e=!alu_op;ld_ac=alu_op;inc_pc=(opcode==`SKZ)&zero||(opcode==`JMP);if(opcode==`JMP)ld_pc=1;if(opcode==`STO)wr=1;end //default:begin sel=1'bZ;rd=1'bZ;ld_ir=1'bZ;inc_pc=1'bZ;halt=1'bZ;ld_pc=1'bZ;data_e=1'bZ;ld_ac=1'bZ;wr=1'bZ;end endcase end

control_test.v /***************************** * TEST BENCH FOR CONTROLLER * *****************************/

`timescale 1 ns / 1 ns

module control_test;

reg [8:0] response [0:127];

reg [3:0] stimulus [0:15];

reg [2:0] opcode;

reg

clk;

reg

rst_;

reg

zero;

integer

i,j;

reg[(3*8):1] mnemonic;

// Instantiate controller

control c1(rd , wr , ld_ir , ld_ac , ld_pc , inc_pc , halt , data_e , sel , opcode , zero , clk , rst_);

// Define clock

initial begin

clk = 1;

forever begin

#10 clk = 0;

#10 clk = 1;

end

end

// Generate mnemonic for debugging purposes

always @(opcode)

begin

case(opcode)

3'h0

: mnemonic = “HLT”;

3'h1

: mnemonic = “SKZ”;

3'h2

: mnemonic = “ADD”;

3'h3

: mnemonic = “AND”;

3'h4

: mnemonic = “XOR”;

3'h5

: mnemonic = “LDA”;

3'h6

: mnemonic = “STO”;

3'h7

: mnemonic = “JMP”;

default : mnemonic = “???”;

endcase

end

// Monitor signals

initial

begin

$timeformat(-9, 1, “ ns”, 9);

$display(“ time

rd wr ld_ir ld_ac ld_pc inc_pc halt data_e sel opcode zero state”);

$display(“--------------------------------------------------------------”);//

$shm_open(“waves.shm”);//

$shm_probe(“A”);//

$shm_probe(c1.state);

end

// Apply stimulus

initial

begin

$readmemb(“stimulus.pat”, stimulus);

rst_=1;

@(negedge clk)rst_ = 0;

@(negedge clk)rst_ = 1;

for(i=0;i<=15;i=i+1)

@(posedge ld_ir)

@(negedge clk)

{ opcode, zero } = stimulus[i];

end

// Check response

initial

begin

$readmemb(“response.pat”, response);

@(posedge rst_)

for(j=0;j<=127;j=j+1)

@(negedge clk)

begin

$display(“%t %b %b %b

%b

%b

%b

%b

%b %b

%b

%b”,$time,rd,wr,ld_ir,ld_ac,ld_pc,inc_pc,halt,data_e,sel,opcode,zero,c1.state);

if({rd,wr,ld_ir,ld_ac,ld_pc,inc_pc,halt,data_e,sel}!==

response[j])

begin : blk

reg [8:0] r;

r = response[j];

$display("ERRORTEST1 PASSED!

111_00000

// 18

JMP BEGIN //run test again

@1A 00000000

// 1A

DATA_1:

//constant 00(hex)

11111111

// 1B

DATA_2:

//constant FF(hex)

10101010

// 1C

TEMP:

//variableTEST2 PASSED!

111_00000

// 11

JMP BEGIN

//run test again

@1A 00000001

// 1A

DATA_1:

//constant 1(hex)

10101010

// 1B

DATA_2:

//constant AA(hex)

11111111

// 1C

DATA_3:

//constant FF(hex)

00000000

// 1D

TEMP:

CPUtest3.dat //opcode_operand // addr

assembly code //--------------//-------------------------

111_00011

// 00

JMP LOOP

//jump to the address of LOOP @03 101_11011

// 03

LOOP:

LDA FN2

//load value in FN2 into accum

110_11100

// 04

STO TEMP

//store accumulator in TEMP

010_11010

// 05

ADD FN1

//add value in FN1 to accumulator

110_11011

// 06

STO FN2

//store result in FN2

101_11100

// 07

LDA TEMP

//load TEMP into the accumulator

110_11010

// 08

STO FN1

//store accumulator in FN1

100_11101

// 09

XOR LIMIT //compare accumulator to LIMIT

001_00000

// 0A

SKZ

//if accum = 0, skip to DONE

111_00011

// 0B

JMP LOOP

//jump to address of LOOP

000_00000

// 0C

DONE:

HLT

//end of program

101_11111

// 0D

AGAIN: LDA ONE

110_11010

// 0E

STO FN1

101_11110

// 0F

LDA ZERO

110_11011

// 10

STO FN2

111_00011

// 11

JMP LOOP

//jump to address of LOOP

@1A 00000001

// 1A

FN1:

//variablestores 2nd Fib.No.00000000

// 1C

TEMP:

//temporary variable

10010000

// 1D

LIMIT:

//constant 144stores 1st Fib.No.00000101

// 1B

data2:

//5

variablemax value

00000110

// 1E

LIMIT:

// 6

constant 1

11111111

// 1F

AND1:

//FF and

四、仿真结果与波形

第二部分 电路综合一、二、三、四、实验目的 实验内容 源代码

门级电路仿真结果与波形 掌握逻辑综合的概念和流程,熟悉采用Design Compiler进行逻辑综合的基本方法。采用SYNOPSYS公司的综合工具Design Compiler对实验7的control.v做综合。与实验指导书中相同。

五、思考题

1.control_pad.v文件是verilog语言及的描述还是结构化的描述?

是结构化的描述。

2.control_pad.sdf文件中,对触发器的延迟包括哪些信息?

包括对逻辑单元和管脚的上升/下降时延的最大值、最小值和典型值。

第三部分 版图设计一、二、三、四、实验目的 实验内容 源代码

仿真结果与波形 掌握版图设计的基本概念和流程,熟悉采用Sysnopsys ICC工具进行版图设计的方法。对电路综合输出的门级网表control_pad.v进行布局布线。与实验指导书中相同。布局规划后结果

未产生core ring和mesh前

产生core ring和mesh后

电源线和电影PAD连接后

filler PAD填充后

布局后结果

时钟树综合后结果

布线后结果

寄生参数的导出和后仿

五、思考题

1.简述ICC在design setup阶段的主要工作。

创建设计库,读取网表文件并创建设计单元,提供并检查时间约束,检查时钟。在对之前的数据与信息进行读取与检查后保存设计单元。2.为什么要填充filler pad?

filler pad把分散的pad单元连接起来,把pad I/O区域供电连成一个整体。使它们得到持续供电并提高ESD保护能力。3.derive_pg_connection的作用是什么?

描述有关电源连接的信息。4.简述floorplan的主要任务。

对芯片大小、输入输出单元、宏模块进行规划,对电源网络进行设计。5.简述place阶段的主要任务。

对电路中的延时进行估计与分析,模拟时钟树的影响,按照时序要求,对标准化单元进行布局。

6.简述CTS的主要步骤。

设置时钟树公共选项;综合时钟树;重新连接扫描链;使能传播时钟;Post-CTS布局优化;优化时钟偏移;优化时序。

实验总结

经过数周的ASIC专业实验,我对芯片设计流程、Verilog HDL语言、Linux基本指令和Vi文本编辑器有了基本的了解。虽然之前对芯片设计、VHDL一无所知,但通过实验初步熟悉了ASIC的体系结构和VHDL的基本语法,对电路中时钟、寄生参数、元件布局带来的影响也有了了解。我在实验中也遇到了许多问题,但我在老师、助教、同学的帮助下解决了这些问题,也有了更多收获。通过这次ASIC专业实验,我加深了对本专业的认识。我会继续努力成为合格的电子人。

第三篇:北邮电子院嵌入式实验报告大四上

嵌入式实验报告

学院: 电子工程学院

一、实验目的

1、了解嵌入式系统及其相关基础知识。

2、了解宿主PC机与PXA270目标版,能正确连接宿主PC机与PXA270目标版。

3、学会在宿主机上安装Linux操作系统——RedHat9.0。、4、学会建立宿主PC机端的开发环境。

5、学会配置宿主PC机端的超级终端。

6、配置宿主PC机端的TFTP服务,并开通此服务。

7、配置宿主PC机端的NFS服务,并开通此服务。

8、学会简单Linux驱动程序的设计。

二、实验内容

(一)基本实验

实验一到六为基础实验,主要是为了在熟悉实验操作平台的同时为后续实验搭建好软、硬件环境,配置好相关的协议、服务。

其中实验一是各个硬件的互联,搭建好了实验的硬件环境。实验二是在宿主PC端安装虚拟机,提供了实验需要的Linux操作系统。实验三是宿主PC端开发环境的安装与配置。

实验四是配置宿主PC机端的超级终端,使PC机与PXA270目标板之间可以通过串口通讯。在每次重启宿主PC机时,都需要重新将超级终端挂载到虚拟机上,挂载之前须通过ifconfig命令查看该机的IP地址,若其已经复位,须用命令:ifconfig eth0 192.168.0.100 up重置宿主PC机的IP地址。挂载虚拟机的代码为:

root ifconfig eth0 192.168.0.50 up mount –o nolock 192.168.0.100:/ /mnt 实验五是配置宿主PC机的TFTP服务。TFTP是简单文件传输协议。每次重启宿主PC机时,都要重启该服务,重启命令为:

service xinetd restart。

实验六是配置宿主PC机端NFS服务。NFS是指网络文件系统,它实现了文件在不同的系统间使用。当使用者想用远端档案时,只需调用“mount”就可以远端系统挂接在自己的档案系统之下。每次重启宿主PC机时,也都要重启该服务,重启命令为: service nfs restart service nfs restart

(二)基本接口实验

实验

十二、简单设备驱动程序

本次实验的目的是让我们动手实践一个简单的字符型设备驱动程序,学习Linux驱动程序构架,学习在应用程序中调用驱动。驱动程序代码及注释为: // 头文件

#include #include #include #include #include #include #include #define SIMPLE_HELLO_MAJOR 96 // 定义主设备号HELLO DEVICE MAJOR #define OURS_HELLO_DEBUG // 定义标识符

#define VERSION “PXA2700EP-SIMPLE_HELLO-V1.00-060530” // 定义版本号 void showversion(void)//显示版本的函数 { printk(“***************************************”);printk(“t %s tn”,VERSION);printk(“***************************************”);}

/*-------read:用于在指定文件描述符中读取数据 file:是文件指针 buf:读取数据缓存区 count:请求传输的字节数 f_ops:文件当前偏移量

当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count----------*/ ssize_t SIMPLE_HELLO_read(struct file * file ,char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_read[--kernel--]n”);#endif return count;}

/*-----write:用于向打开的文件写数据 file:是文件指针 buf:写入数据缓存区 count:求传输的字节数 f_ops:文件当前偏移量

当读取标识符OURS_HELLO_DEBUG时,打印信息,然后返回count----------*/ ssize_t SIMPLE_HELLO_write(struct file * file ,const char * buf, size_t count, loff_t * f_ops){ #ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_write[--kernel--]n”);#endif

return count;}

/*-----ioctl:对设备的I/O通道进行管理的函数 inode:设备节点

flip:打开的一个文件

cmd:驱动程序的特殊命令编号 data:接收剩余参数

----------*/ ssize_t SIMPLE_HELLO_ioctl(struct inode * inode ,struct file * file, unsigned int cmd, long data){ #ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_ioctl[--kernel--]n”);#endif return 0;}

/*----------open:打开函数

inode:打开文件所对应的i节点,获取从设备号 flip:打开的一个文件

open()方法最重要的是调用了宏MOD_INC_USE_COUNT,这个宏主要用来使驱动程序使用计数器,避免不正确卸载程序

----------*/ ssize_t SIMPLE_HELLO_open(struct inode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_open[--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;}

/*----------released:关闭函数

Inode:打开文件所对应的i节点,主要获取从设备号 flip:打开的一个文件

release()方法最重要的是调用了宏MOD_DEC_INC_USE_COUNT,这个宏主要用来减少驱动程序使用计数器

----------*/ ssize_t SIMPLE_HELLO_release(struct inode * inode ,struct file * file){ #ifdef OURS_HELLO_DEBUG

printk(“SIMPLE_HELLO_release[--kernel--]n”);#endif MOD_DEC_INC_USE_COUNT;return 0;}

struct file_operations HELLO_ops ={ // SIMPLE_HELLO设备向系统注册

open: SIMPLE_HELLO_open, read: SIMPLE_HELLO_read, write: SIMPLE_HELLO_write, ioctl: SIMPLE_HELLO_ioctl, release: SIMPLE_HELLO_release, };

/*----------INIT:驱动程序初始化

devfs_register_chrdev(SIMPLE_HELLO_MAJOR,“hello_serial_ctl”,& HELLO_ops)最为主要

devfs_register_chrdev注册设备驱动程序,包括主设备号、驱动程序名、结构体指针----------*/ static int __init HW_ HELLO_init(void){ int ret =-ENODEV;

ret = devfs_register_chrdev(SIMPLE_HELLO_MAJOR, “hello_serial_ctl”,& HELLO_ops);

showversion();

if(ret<0)

{

printk(“pxa270 init_module failed with %d n[--kernel--]”,ret);

}

else

{

printk(“pxa270 hello_driver register success!![--kernel--]n”);

} return ret;}

static int __init pxa270_ HELLO_init(void)//模块初始化函数,调用HW_ HELLO_init 函数

{ int ret =-ENODEV;

#ifdef OURS_HELLO_DEBUG

printk(“pxa270_ HELLO_init[--kernel--]n”);

#endif ret = HW_ HELLO_init();if(ret)return ret;return 0;}

/*----------模块卸载函数

devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR,“hello _ctl”)最为主要 devfs_unregister_chrdev卸载设备驱动程序,包括主设备号、驱动程序名

----------*/ static void __exit cleanup_ HELLO_ctl(void){ #ifdef OURS_HELLO_DEBUG

printk(“cleanup_HELLO_ctl[--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_HELLO_MAJOR, “hello_ctl”);}

MODULE_DESCRIPTION(“simple hello driver module”);//描述信息 MODULE_AUTHOR(“liduo”);

//驱动程序作者姓名 MODULE_LICENSE(“GPL”);module_init(pxa270_HELLO_init);

//指定驱动程序初始化函数 module_exit(cleanup _HELLO_ctl);

//指定驱动程序卸载函数

Makefile文件代码:

#TOPDIR:=$(shell cd..;pwd)TOPDIR:=.KERNELDIR=/pxa270_linux/linux INCLUDEDIR=$(KERNELDIR)/include CROSS_COMPILE=arm-linux-

AS =$(CROSS_COMPILE)as LD =$(CROSS_COMPILE)ld CC =$(CROSS_COMPILE)gcc CPP =$(CC)-E AR =$(CROSS_COMPILE)ar NM =$(CROSS_COMPILE)nm STRIP =$(CROSS_COMPILE)strip OBJCOPY=$(CROSS_COMPILE)objcopy OBJDUMP=$(CROSS_COMPILE)objdump

CFLAGS+=-I..CFLAGS+=-Wall –O –D_KERNEL_-DMODULE –I$(INCLUDEDIR)

TARGET = pxa270_hello_drv.o modules: $(TARGET)

all: $(TARGET)

pxa270_hello_drv.o:pxa270_hello_drv.c $(CC)-c $(CFLAGS)$^-o $@

clean: rm-f *.o *~ core.depend Makefile文件的内容用于执行编译工作,一个Makefile文件包括:① 由make工具创建的目标体(target),通常是目标文件或可执行文件;② 要创建目标体所依赖的文件(dependency_file);③ 创建每个目标需要运行的命令(command)。

以上两个文件编辑完成后后,用make modules编译驱动程序,编写测试文件simple_test_driver.c,然后GCC编辑器编译测试程序生成测试文件。成功生成测试文件后用超级终端开始挂载,加载驱动程序,使用命令./test测试,观察测试结果,实验完成。

实验十三 CPU GPIO驱动程序设计

本实验是让我们在linux系统中插入自己的驱动程序,调用它。实现用CPU GPIO控制外部LED,利用PXA270核心板上的LED验证我们的工作。驱动程序代码:

驱动程序代码与实验十二无大区别,下面列出需要补充的代码。

一、补充代码

补充代码1:

#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);#endif return count;

补充代码2:

#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_open [--kernel--]n”);#endif

补充代码3:

open: SIMPLE_GPIO_LED_open, read: SIMPLE_GPIO_LED_read, write: SIMPLE_GPIO_LED_write, ioctl: SIMPLE_GPIO_LED_ioctl, release: SIMPLE_GPIO_LED_release, 不同之处:GPIO_LED,主文件名、二、Makefile文件:

将实验十二相关代码作如下修改即可: TARGET = pxa270_gpio_led_drv.o modules: $(TARGET)

all: $(TARGET)

pxa270_gpio_led_drv.o:pxa270_gpio_led_drv.c $(CC)-c $(CFLAGS)$^-o $@

三、作业代码

要求:使得目标板的核心板上的LED闪烁产生亮7秒,灭5秒的效果。作业主要代码:

while(1)

{ ioctl(fd,LED_OFF);

sleep(5);//原来为sleep(1);

ioctl(fd,LED_ON);sleep(7);//原来为sleep(1); }

不同之处:改变代码中加粗位置括号数字,可以改变灯亮和熄灭的时间比

四、测试显示

测试时,超级终端上的显示如下:

实验十四 中断实验

本实验是让我们学习中断的相关概念,以及Linux系统是如何处理中断的,并且学会编写获取和处理外中断的驱动程序。

一、补充代码

补充代码1:

printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);补充代码2:

#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_read [--kernel--]n”);#endif return count;

补充代码3:

#ifdef OURS_GPIO_LED_DEBUG printk(“SIMPLE_GPIO_LED_write [--kernel--]n”);#endif return count;

补充代码4:

open: SIMPLE_INT_open, read: SIMPLE_INT_read, write: SIMPLE_INT_write, ioctl: SIMPLE_INT_ioctl, release: SIMPLE_INT_release, 二、Makefile文件如实验十三做相应修改。

三、测试时,超级终端上显示如下:

实验十五 数码管显示驱动实验

本实验中,我们要编驱动程序以实现在Linux系统下控制LED数码管的显示。

一、补充代码

补充代码1:

printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);

补充代码2: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_read [--kernel--]n”);#endif return count;

补充代码3: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_write [--kernel--]n”);#endif return count;

补充代码4: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_ioctl [--kernel--]n”);#endif return 0;

补充代码5: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;

补充代码6: #ifdef OURS_HELLO_DEBUG printk(“SERIAL_LED_release [--kernel--]n”);#endif MOD_DEC_USE_COUNT;return 0;

补充代码7: open: SERIAL_LED_open, read: SERIAL_LED_read, write: SERIAL_LED_write, ioctl: SERIAL_LED_ioctl, release: SERIAL_LED_release

补充代码8: int ret =-ENODEV;ret = devfs_register_chrdev(SERIAL_LED_MAJOR, “serial_led_ctl”, &SERIAL_LED_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;

补充代码9: int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG printk(“pxa270_SERIAL_LED_init [--kernel--]n”);#endif ret = HW_SERIAL_LED_init();if(ret)return ret;return 0;

补充代码10: #ifdef OURS_HELLO_DEBUG printk(“cleanup_SERIAL_LED [--kernel--]n”);#endif devfs_unregister_chrdev(SERIAL_LED_MAJOR, “serial_led”);

补充代码11: MODULE_DESCRIPTION(“serial_led driver module”);MODULE_AUTHOR(“liduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_SERIAL_LED_init);module_exit(cleanup_SERIAL_LED);

二、Makefile文件与实验十四相同,只需作相应修改即可

三、作业代码

1、实现目标板上的LED数码管循环显示数字9-0。

for(count=0;count<10;count++)

{ data[0] = buf[9-count];//原来为data[0] = buf[count] ret=write(fd,data,1);sleep(1);} 修改之处:将显示的数有buf[count]改为buf[9-count],实现反向循环显示。

2、实现目标板上的LED数码管循环显示数字2、4、6、8、0或者8、6、4、2、0。代码: for(count=0;count<10;count+=2)//原来为count++

{data[0] = buf[count];ret=write(fd,data,1);sleep(1);}

修改之处:修改count的变化方式,让其每次增加2,而不是1,使0、2、4、6、8循环显示,如要循环显示8、6、4、2、0的话,只要在上述代码中将buf[count]改为buf[8-count]即可。

四、测试显示:

测试时,显示如下:

作业1: 作业2:

实验十六 LED点阵驱动程序设计

本实验要求我们学会编写驱动程序,实现在Linux系统下控制LED点阵显示,并在此基础上稍加改进,实现对LED的控制。驱动程序代码:

一、补充代码

补充代码1:

printk(“*****************************************n”);printk(“t %s tn”,VERSION);printk(“************************************************nn”);

补充代码2:

#ifdef OURS_LED_DEBUG printk(“SIMPLW_LED_read [--kernel--]n”);#endif return count;

补充代码3:

#ifdef OURS_LED_DEBUG printk(“SIMPLE_LED_ioctl [--kernel--]n”);#endif return 0;

补充代码4:

open: SIMPLE_LED_open, read: SIMPLE_LED_read, write: SIMPLE_LED_write, ioctl: SIMPLE_LED_ioctl, release: SIMPLE_LED_release

补充代码5:

int ret =-ENODEV;#ifdef OURS_LED_DEBUG printk(“pxa270_LED_CTL_init [--kernel--]n”);#endif ret = HW_LED_CTL_init();if(ret)return ret;return 0;

补充代码6:

#ifdef OURS_LED_DEBUG printk(“cleanup_LED_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_LED_MAJOR, “led_ctl”);

二、Makefile程序仍然可以用前一个实验的,只要把相关函数名改了就可以,此处不再赘述。

三、作业代码

1、按横方向隔行扫描led点阵数码管。代码:

for(i=1;i<=4;i++){ //原来为i<8

buf[0]=c;

buf[1]=~r;// row

for(j=1;j<=8;j++){

write(fd,buf,2);

printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);

usleep(200000);// sleep 0.2 second

c = c<<1;

buf[0]=c;// column

}

c = 1;

r = r<<2;

} //原来为r=r<<1

修改之处:外层for循环中间i<8改为i<4,同时,将else中的r=r<<1改为r<<2。这样就可以让点阵在显示时跳跃一行进行显示。

2、按竖方向顺序扫描led点阵数码管。代码:

for(i=1;i<=8;i++){

buf[0]=c;

buf[1]=~r;// row

for(j=1;j<=8;j++){

write(fd,buf,2);

printf(“buf[0],buf[1]: [%x,%x]n”,buf[0],buf[1]);

usleep(200000);// sleep 0.2 second

r = r<<1;//原来此处为c=c<<1 buf[1]=~r;//原来此处为buf[1]=~c } r = 1;//原来此处为c=1 c = c<<1;//原来此处为r=r<<1 修改之处(现对于最初的测试程序,而不是作业1的测试程序):将r和c 进行对调。实现将横和竖的对调,已达到竖方向扫描的目的。四、测试显示

测试时,超级终端显示如下:

作业1: 作业2:

实验十七 AD驱动程序

本实验要求我们学会编写驱动程序对模拟量输入进行采集,并转换为数字量显示在超级终端上,从而实现AD转换。

驱动程序代码

一、补充代码

补充代码1:

printk(“*****************************************n”);printk(“t %s tn”,VERSION);

printk(“************************************************nn”);

补充代码2:

#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_read [--kernel--]n”);#endif return count;

补充代码3:

#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_write [--kernel--]n”);#endif return count;

补充代码4:

#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;

补充代码5:

#ifdef OURS_HELLO_DEBUG printk(“SIMPLE_HELLO_release [--kernel--]n”);#endif MOD_DEC_USE_COUNT;return 0;

补充代码6:

open: SIMPLE_HELLO_open, read: SIMPLE_HELLO_read, write: SIMPLE_HELLO_write, ioctl: SIMPLE_HELLO_ioctl, release: SIMPLE_HELLO_release

补充代码7:

ad_ucb = ucb1x00_get();

int ret =-ENODEV;ret = devfs_register_chrdev(ADCTL_MAJOR, “ad_ctl”, &adctl_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;

补充代码8:

int ret =-ENODEV;#ifdef OURS_HELLO_DEBUG printk(“pxa270_AD_CTL_init [--kernel--]n”);#endif ret = HW_AD_CTL_init();if(ret)return ret;return 0;

补充代码9:

#ifdef OURS_HELLO_DEBUG printk(“cleanup_AD_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(ADCTL_MAJOR, “ad_ctl”);

二、Makefile文件可以用前一个程序的文件,只要将相应部分的代码修改即可

三、作业代码

要求:将UCB_ADC_INP_AD0换为其他通道并观察。代码:

for(i=0;i<50;i++)

{ Val0 = ioctl(fd,UCB_ADC_INP_AD1,0);usleep(100);val1 = ioctl(fd,UCB_ADC_INP_AD0,0);printf(“val0 = %dtval1 = %dn”,val0,val1;usleep(500000);

}

修改之处:只需交换AD1和AD0即可实现输出通道的改变。四、测试时显示

测试时、超级终端显示如下:

实验十八 DA驱动程序

本实验要求我们编写驱动程序,实现将数字信号转换成模拟信号并在示波器上显示出模拟信号波形,即实现DA转换。驱动程序代码:

一、补充代码

补充代码1:

#include“../AD/pxa_ad_drv.h” /引用AD驱动程序的头文件/

补充代码2:

printk(“*****************************************n”);printk(“t %s tn”,VERSION);

printk(“************************************************nn”);

补充代码3:

#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_read [--kernel--]n”);#endif return count;

补充代码4:

#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_write [--kernel--]n”);#endif return count;

补充代码5:

#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_ioctl [--kernel--]n”);#endif return 0;

补充代码6:

#ifdef OURS_DA_DEBUG printk(“SIMPLE_DA_open [--kernel--]n”);#endif MOD_INC_USE_COUNT;return 0;

补充代码7:

open: SIMPLE_DA_open, read: SIMPLE_DA_read, write: SIMPLE_DA_write, ioctl: SIMPLE_DA_ioctl, release: SIMPLE_DA_release

补充代码8:

int ret =-ENODEV;ret = devfs_register_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”, &DA_ctl_ops);Showversion();If(ret<0){ printk(“pxa270 init_module failed with %dn [--kernel--]”,ret);return ret;} else { printk(“pxa270 serial_led_driver register success!![--kernel--]n”);} return ret;

补充代码9:

int ret =-ENODEV;#ifdef OURS_DA_DEBUG printk(“pxa270_DA_CTL_init [--kernel--]n”);#endif ret = HW_DA_CTL_init();if(ret)return ret;return 0;

补充代码10:

#ifdef OURS_DA_DEBUG printk(“cleanup_DA_ctl [--kernel--]n”);#endif devfs_unregister_chrdev(SIMPLE_DA_MAJOR, “DA_ctl”);补充代码11:

MODULE_DESCRIPTION(“serial_led driver module”);MODULE_AUTHOR(“liduo”);MODULE_LICENSE(“GPL”);module_init(pxa270_DA_CTL_init);module_exit(cleanup_DA_ctl);

二、Makefile文件可以继续用前面程序Mekefile的代码,只需要将相应部分的代码修改即可。

三、作业代码

要求:输出三角波。代码:(需要修改部分)

//---------------------print--------------------void da_create_sin(int fd){ unsigned char buf[(int)POINT];unsigned char*c;unsigned long I;int j;double x;for(j=0;j

x=(j/POINT)*(5*M_PI);//此处原来为x=sin((j/POINT

//*(2*M_PI))#ifdef OURS_DEBUG printf(“%ft”,x);#endif buf[j] =(unsigned char)255*(x/2+1)/2;#ifdef OURS_DEBUG printf(“%xn”, buf[j]);#endif } printf(“create sin waven”);printf(“Use”Ctrl + c“quit the functionn”);while(1){ c = buf;for(j=0;j

四、测试显示:(以下为三角波)

(以下为sin)

三、实验总结:

在本次嵌入式实验中,我们首先在老师的指导下了解了嵌入式系统,初步接触了Linux环境。我们的实验板是OURS-PXA270-EP,它是一款基于INTEL XSCALE PXA270处理器,针对高校嵌入式系统教学和实验科研的平台。这款设备主要包括核心板与底板两个部分,核心板主要集成了高速的PXA270 CPU,配套的存储器,网卡等设备;底板主要是各种类型的接口与扩展口。

了解了实验的平台后,在接下来的基本实验中我们学会了嵌入式开发系统硬件环境的搭建、Linux操作系统RedHat9的安装、软件环境的搭建,以及配置超级终端,配置通讯服务。这些实验内容只要按照实验指导书上的步骤一步一步做即可,不会出现难以解决的问题,一般都会做的很顺利。有三个需要注意的地方时,在配置端口时,一定要确定实验箱接的是端口一,还是端口二。否则会出现无法建立呼叫的问题(其表现为超级终端接口内没有输出内容)。其次要确定虚拟机上网桥的设定是否正确。不然也会出现无法呼叫现象。最后,要确定网线是否连接上。在实验时,由于有些电脑的网线接口有断裂的现象,如果插口没接好的话,将会出现nfs连接错误。

在基本实验之后,进行的就是接口实验。总的来说,实验的难度不大。当然这是建立在对实验代码有一定理解的基础之上的。在实验十二中,我们对实验的接口代码规则已经有了一定的了解。而之后的几个实验都是基于实验十二进行相应的改动即可。所以完成下来难度不是很大。而对应的作业中,我们仅需要对测试代码进行相应的改写。在对c语言有一定的了解的前提下,可以很容易相应代码所实现的功能,仅需要对相应代码做些修改即可。

不过,值得注意的还有两点,第一:代码的编写一定要符合规则,同时,代码的输入要避免输入错误。否则,在需要一次一次编译一次次查看错误一次次改正错误,这会是个费时费力的工作。第二:每次实验时,需要从新设定虚拟机的ip,即每次实验开始时都需要重复做实验五实验六。不然在挂载时会出现无法挂载的现象。

通过这次实验,我对嵌入式编程有了更深层次的理解,加深了我对理论知识的认识,有助于今后的学习和工作。感谢黄惠英老师的细心指导。

第四篇:北邮论文题目

附件1:

毕业设计参考题目

一、通信类(30个)

 ×××宽带接入网规划设计

 ×××小区EPON光纤接入网规划设计方案 ××ADSL宽带接入网设计

 ××GSM网扩容工程基站建设的规划设计 ××SDH传输网规划设计(优化)方案 ××TD-SCDMA室内解决方案 ××TD-SCDMA无线网络规划/优化 ××WCDMA无线网络规划/优化 ××WLAN的规划设计方案

 ××本地网智能化改造及××业务的实现 ××地区××公司关口局的设计 ××地区××公司软交换关口局的设计 ××地区ASON网络设计方案 ××地区DWDM传输网络设计方案 ××地区双向HFC接入网络的设计

 ××多媒体技术(如视频会议/VOIP/VOD等)在××地区通信网

 ××公司VOIP网的规划与设计 ××光纤接入网规划设计 ××宽带IP城域网的规划设计

 ××市××公司NGN(软交换)网络设计方案 ××市CDMA移动通信网无线规划(优化) ××市GSM无线网络优化

 ××市TETRA(数字集群通信系统)规划/优化 ××无线系统(网络优化)方案设计 ××智能业务在××本地网的实现 ××综合楼GSM网络的室内分布设计 3G网络规划、优化、测试等方向的自选题 流媒体技术及其在××地区中的应用

 通信网(固网或者移动网络)网络管理方面自拟题目 网络电视(IPTV)技术在××地区中的应用

二、计算机类(12个)

 ×××局域网优化(升级)方案设计 XX大学学籍管理系统开发与设计 XX电信计费系统的设计与实现 XX公司人事信息管理系统的设计与实现 XX图书馆信息管理系统的设计与实现 XX系统数据库优化的设计与实现

 基于数据库技术的某网站设计与实现 某公司/学校网络方案规划与设计 某管理信息系统的设计与实现 网络安全策略的研究与应用 网上远程考试系统的设计与实现 ××局域网(校园网)的规划设计

三、管理与营销类(14个)

 ××公司××类人员绩效考核的研究 ××公司××类人员薪酬管理的研究 ××公司员工培训的研究

 ××邮政储蓄银行发展××业务的策略研究 ××邮政局(公司)现代物流发展(营销)策略 ××邮政局××业务发展策略探讨 关于××公司宽带业务营销策略的探讨 关于××公司提升服务质量的对策研究

 关于××公司提升客户满意度的策略研究 关于××公司营销渠道建设与管理的探讨 关于××公司运维管理的精细化研究 关于××公司增值业务发展策略的探讨

 关于××通信公司大(商务)客户营销策略的研究 关于××通信企业防止客户流失的策略研究

第五篇:【2011】北邮网研院和计算机院复试上机题目

2011北邮网研院复试上机题目

A、字符串操作

Accept:93 Submit:1212 Time Limit:1000MS Memory Limit:65536KB 请仔细阅读“考前必读”

Description

大家平时都会用到字符串,现在有几种字符串操作,需要你用这几种操作处理下字符串。

Input

多组数据,以EOF结束。

第一行一个字符串,字符串长度大于0,并且小于等于200。第二行一个数字t,(0

共有两种操作,每行数据的第一个数表示操作的种类:

翻转操作:第一个是一个数字0,然后两个数字i和len,翻转从下标i长度为len的子串。

替换操作:第一个是一个数字1,然后两个数字i和len,接着一个长度为len的字符串str,用str替换从下标i长度为len的子串。字符串操作后会更新,旧的字符串被舍弃。(详见sample)Output

每个操作之后输出生成的新的字符串

Sample Input

bac 2 0 0 3 1 1 2 as

Sample Output

cab cas

Hint

字符串下标从0开始,所有操作的数据范围都合乎规范。

B、虚数

Accept:36 Submit:448 Time Limit:1000MS Memory Limit:65536KB 请仔细阅读“考前必读”

Description

给你一个复数集合{Aj+i*Bj},保证Aj和Bj都是整数,初始为空集。

每次会给你如下两种操作中的一种:

1.“Insert x+iy”,其中x,y都是整数。表示在集合中加入一个复数 x+iy,同时输出此时集合的大小;

2.“Pop”。如果集合为空集直接返回“Empty!”,如果有元素则以“x+iy”的形式显示集合中模值最大的复数,然后将该元素从集合中删除,之后在第二行显示操作之后的集合大小,如果为空集则显示“Empty!”。

Input

第一行只有一个数T,代表case数。0<=T<=10 每一组case:

第一行有一个整数n,表示这组case中一共有n条命令 0

保证不会输入两个模值同样的元素,并保证实部虚部都大于0,小于1000。

Output

依照上述原则输出每一个命令对应的输出

如果输入命令是Insert命令,则对应的输出占一行为集合大小; 如果输入命令是Pop命令,则对应的输出占一行或者两行,为模值最大的复数和集合大小。

请注意,输出集合大小的格式为“Size:空格x回车”,x为集合大小

Sample Input 5 Pop Insert 1+i2 Insert 2+i3 Pop Pop Sample Output

Empty!Size: 1 Size: 2 2+i3 Size: 1 1+i2 Empty!

C、中序遍历树

Accept:0 Submit:18 Time Limit:1000MS Memory Limit:65536KB 请仔细阅读“考前必读”

Description 给一棵树,你可以把其中任意一个节点作为根节点。每个节点都有一个小写字母,中序遍历,得到一个字符串,求所有能得到的字符串的字典序最小串。因为这棵树不一定是二叉树,所以中序遍历时,先中序遍历以节点序号最小的节点为根的子树,然后再遍历根节点,最后根据节点序号从小到大依次中序遍历剩下的子树。

Input

多组数据,以EOF结束。

第一行一个数n(0

接下来n-1行,每行两个数a,b,(0<=a,b

Output

题中要求的最小的字符串

Sample Input 3 bac 0 1 1 2 4 abcd 0 1 0 2 0 3

Sample Output

bac

bacd

Hint

意思就是请枚举所有的点为根,然后中序遍历 最后输出所有结果中字典序最小的

比如说第二组数据

以0为根时结果为 bacd 以1为根时结果为 cadb 以2为根时结果为 badc 以3为根时结果为 bacd 所以字典序最小的是bacd

D、first集

Accept:0 Submit:17 Time Limit:1000MS Memory Limit:65536KB 请仔细阅读“考前必读”

Description

对于文法,给出求first集的算法,让大家求first集。输入中大写字母表示非终结符,小写字母表示终结符,#表示空也是终结符。First集求解算法如下: 为了求每个符号的first集,连续使用以下规则,直到每个符号的first集不再增大为止。

1.对于终结符,它的first集就是它自己。

2.对于非终结符,如果有产生式 X-> a...,把a加入first(X)中,如果X-># ,即X可以推出空,那么把空加入first(X)中。3.对于X->Y...这样的产生式,且X,Y都是非终结符,把first(Y)中的所有非空的元素加入到first(X)中。

对于X->Y1Y2...Yk产生式,X,Y1,Y2...Yk都是非终结符,对于某个i(i<=k),如果first(Y1),first(Y2),...first(Yi-1)都含有空,那么将first(Yi)中的所有非空元素加入到first(X)中。若所有的first(Yi)(i=1,2,...k)中都有空,那么将空加入first(X)中。

Input

多组数据,以EOF结束。

第一行一个数字n,表示有n个文法式,(0

下面n行,每行第一个是一个大写字母,表示产生式的左边,然后一个字符串,由大写字母(非终结符),小写字母(终结符)和#(空)组成。

Output

按照字典序输出每个非终结符的first(集)。每行表示一个first集。第一个字母输出表示非终结符(按字母序排列),然后按字母顺序输出first集,如果包含空的话,最后输出#。一行中每两个字符间有一个空格。

Sample Input B A A ab A c A # Sample Output

A a c # B a c #

Hint

2011北邮计算机学院复试上机题目(回忆版)

A 句子逆转 输入一个句子,占用一行。句子由单词和单词间的空格组成。单词只有小写字母。单词之间由空格隔开。单词之间不会有多个空格。每个句子至多有1000个字母。多组数据输入。将句子单词的排列顺序倒过来输出。多组数据输入,以EOF为结束。SAMPLE: INPUT: It is a apple OUTPUT: apple a is it

B 成绩管理

实现查询成绩的功能。首先输入T表示有T组数据。每组数据首先输入n,接下来有n行输入.每行输入是插入或者查找。插入为Insert id score。id是自然数,不大于1000。每次插入的id都不同。score是自然数,不大于100。查找为Find id。找到输出该id与score。查找不到输出No result!

SAMPLE: INPUT: 2 2 Insert 0 10 Find 0 5 Insert 1 15 Find 1 Find 2 Insert 2 35 Find 2 Output: name:0 score:10 name:1 score:15 No result!name:2 score:35

C 寻找宝藏

一棵多叉树T,根结点为0,某个结点上有宝藏。从根结点沿着树枝向下寻找,如果有分支,沿各分支继续寻找是等概率的。计算找到宝藏的概率。首先输入M,N,L。M多叉树T的结点数,结点分别为0~M-1。N和L分别是树枝数和宝藏所在结点。接下来有N行输入,每行两个数,表示这两个结点之间有树枝连接。而且前一个结点比后一个更靠近根结点。输出找到结点的概率,保留六位小数。SAMPLE: INPUT: 6 5 5 0 1 0 2 1 3 2 4 2 5 OUTPUT: 0.250000 HINT: 输出可用printf(“%.6f”,a)

D 略

下载2013年北邮电子院计算机实习题目1——5 文字版word格式文档
下载2013年北邮电子院计算机实习题目1——5 文字版.doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    北邮2011计算机上机复试编程题目

    Your account is taobao_68 .And your passwd: 1138899884A 句子逆转 输入一个句子,占用一行。句子由单词和单词间的空格组成。单词只有小写字母。单词之间由空格隔开。单词......

    考研心得(北邮计算机)

    我是计算机专业,考的北京邮电大学计算机。 确定能考上之后就一直想写个什么经验的出来分享下,毕竟都是从那个时候过来的,不过这一拖就拖到毕业了,还毕业已经一个月了,呵呵,直到今......

    北邮实习报告

    篇一:北京邮电大学实习报告 北京邮电大学实习报告附页: 专业实习总结及心得体会 总结: 大学三年的生活已经结束,在这个暑假学校安排我们进行了专业实习,但是我理解的实习并不是......

    北邮网院英语答案

    一、阅读理解(共1道小题,共25.0分)  William Henry Harrison, the ninth President of the United States, was born in a small town. As a boy, he was quiet and shy. In......

    北邮机器狗电子工艺实习要求201401

    实习作业 需要大家提交的实习作业共分三部分: ① 练习板; ② “Multisim.ms10 + PROTEL.ddb +实习报告.Doc”的RAR文件上传FTP,按照 “班级+小班学号 +姓名”来命名,例如:11101班......

    2014北邮计算机复试细则

    计算机学院2014年硕士研究生招生复试细则 来源:教务科发布时间:2014/3/24点击次数:4430计算机学院 2014年硕士研究生招生复试细则依据教育部和北京邮电大学研究生院的有关规定......

    北邮计算机学院考研经验

    北邮计算机学院考研经验 2010年05月26日 04:17 来源: 查看评论[0] [导读]再说说北邮的录取,北邮是很公正的,亲身经历一次就会知道,不要听信一些网上的谣言而自乱阵脚,一切都靠实......

    北邮 应用文作业1

    一、多项选择题(共20道小题,共100.0分) 1通报包括 等种类。 表彰性通报 批评性通报 口头通报 情况通报 知识点:第四章国家行政机关公文写作学生答案:[A;B;D;]??得分:试题分......