// Declare any non-default types here with import statements
interfaceIAidlDemo{ /** * Demonstrates some basic types that you can use as parameters * and return values in AIDL. */ voidbasicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString); }
@Override public IBinder onBind(Intent intent){ // TODO: Return the communication channel to the service. thrownew UnsupportedOperationException("Not yet implemented"); }
- public class MainActivity extends AppCompatActivity { + public class MainActivity extends Activity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
} //注意别漏了左大括号
这样它马上就会报错,先把鼠标放到View.OnClickListener里,可以看到这样的提示:
我们赶紧按ALT+ENTER自动导入这个包,之后把鼠标挪到extend后面的Activity上,再导入一次。他可能会要你选是导入还是创建,就选Import Class Activity就行。 不过还是有错,这是因为我们继承了一个抽象类,必须实现其方法,所以我们在主类里再写一个方法注意方法名称、形参、返回值必须一模一样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package com.example.aidlclient;
import ... public class MainActivity extends Activity implements View.OnClickListener{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } + @Override + public void onClick (View view) { + + }
/*线路声明,用y存放编码结果,sign存放指示位*/ reg [2:0]y; wire sign = en & (|x);//若x至少有一位为1.且使能为1,结果就为1
/*每当x或en发生变化时,都会进行译码,如果有使能,结果是x的为1的位的序号,高位优先,如果没有使能,结果为0*/ integer i; always @(x or en) begin if (en) begin y = 0; for( i = 0; i <= 7; i = i+1) if(x[i] == 1) y = i[2:0]; end elsebegin y = 0; end end /*l是编码的总结果,包含符号位和数据位,实例化一个数码管*/ assign l = {sign,y}; seg seg1( .b(l), .h(h) );
/*seg.v*/ module seg( /*输入输出定义,输入4位编码值,输出7位数码管的显示控制*/ input [3:0] b, outputreg [6:0] h ); /*每当b发生变化,都会重新更新输出*/ always @(*) begin /*首先检验指示位,若指示位为0,默认显示为8(共阳极数码管)*/ if(b[3] == 0) h = 7'b0000000; elsebegin /*若v指示位不为0,则根据数据位进行译码,默认输出为8,*/ case(b[2:0]) 3'd0 : h = ~7'b0111111; 3'd1 : h = ~7'b0000110; 3'd2 : h = ~7'b1011011; 3'd3 : h = ~7'b1001111; 3'd4 : h = ~7'b1100110; 3'd5 : h = ~7'b1101101; 3'd6 : h = ~7'b1111101; 3'd7 : h = ~7'b0000111; //'d8 : h = ~7'b1111111; //'d9 : h = ~7'b1101111; default : h = ~7'b1111111; endcase en end endmodule
约束文件的绑定是这样的:
1 2 3 4 5
top=top//指定top接口名称 x (SW7,SW6,SW5,SW4,SW3,SW2,SW1,SW0)//八个开关作为输入 en SW8//使能 l (LD3,LD2,LD1,LD0)//四个led灯显示编码结果 h (SEG0G, SEG0F, SEG0E, SEG0D, SEG0C, SEG0B, SEG0A)//数码管0输出结果,注意链接顺序要与编码匹配
/*操作数,使能,指令码之一变化,就重新输出结果*/ always @(operand or en or instr) begin if (en) begin case (instr) /*加减法*/ 3'd0, 3'd1: begin /*不能把a+b_comp+{1'b0,instr}直接赋给{CF,value},否则当b=0时,b_comp+1会错误的进位*/ value = b_comp + {1'b0,instr}; {CF,value} = value +a; /*计算溢出:操作数符号相同,结果与操作数符号不同*/ OF = (a[3] == b_comp[3]) && (value[3] != a[3]); end /*逻辑运算*/ 3'd2 : begin value = ~a; {CF, OF} =2'd0; end 3'd3 : begin value = a & b; {CF, OF} =2'd0; end 3'd4 : begin value = a | b; {CF, OF} =2'd0; end 3'd5 : begin value = a ^ b; {CF, OF} =2'd0; end /*关系运算*/ 3'd6 : begin value = {3'b000,a<b}; {CF, OF} =2'd0; end 3'd7 : begin value = {3'b000,a==b};{CF, OF} =2'd0; end endcase ZF = value==0; SF = value[3] == 1; end elsebegin /*若使能为0,所有结果都为0*/ value = 0; {CF, ZF, SF, OF} =4'd0; end end
module button( /*输入输出声明:输入中上下左右四个按钮的信号,输出指令编码和使能*/ input [4:0]button, outputreg [2:0]instr, outputreg en); /*所有的五个按钮的上升沿都会触发指令或使能的改变*/ always @(posedge button[3]orposedge button[2] orposedge button[1] orposedge button[0] orposedge button[4]) begin /*按一下中间的按钮可以让使能取反*/ if(button[4]) begin en <= ~en; end elsebegin /*上:指令+2;下:指令-2;左:指令+1;右:指令-1;这四个按钮都会让使能归零*/ case(button) 5'b01000: begin instr <= instr+2; en <= 0;end 5'b00100: begin instr <= instr-2; en <= 0;end 5'b00010: begin instr <= instr+1; en <= 0;end 5'b00001: begin instr <= instr-1; en <= 0;end default: en <= 1; endcase end end endmodule
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.