帮你改了一版,现在可以编译了。功能对不对你得自己调试。
你这不是FPGA的问题,是C语言不会写,不会看编译器的提示信息。不过你的编译器提示信息好像没有直接命令行gcc提示得完整。另外你贴代码把头上的注释省去了,这样编译器的提示信息中的行号就和代码的行号对不上了。
建议你找个代码比对工具,把改之前和改之后的代码好好对比一下。比如WinMerge,Beyond Compare.
C语言的函数调用申明中不必指明数组的大小,C语言执行的时候也没有数组越界检查。方括号不能随便加。
char* Switches表示指向char类型的指针,char* Switches2[]表示一组指针。
如果你真的需要一组指针,你必须为这一组指针的每一个元素赋值。
- #include <stdio.h>
- #define switches (volatile char *) 0x5040
- #define LEDs (char *) 0x5050
- #define ge (char *) 0x5030
- #define shi (char *) 0x5020
- #define bai (char *) 0x5010
- #define qian (char *) 0x5000
- unsigned char digital[10] = { // 数码管显示数据表
- 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F
- };
-
- void keyin(volatile char* Switches, char* leds, char oprand[6]);
- int binToDec(char oprand[6]);
- void decToBin(int dec, char *leds);
- int compute(int x, int y);
- void seg(int a);
- int main(){
- int x,y,z;
- char oprand[6];
- keyin(switches, LEDs, oprand);
- x = binToDec(oprand);
- keyin(switches, LEDs, oprand);
- y = binToDec(oprand);
- z = compute(x,y);
- decToBin(z, LEDs);
- seg(z);
- return 0;
- }
- int compute(int x, int y){
- int z;
- volatile char *p=switches;
- if (*(p+7)==0 && *(p+6)==0)
- z=x+y;
- else if (*(p+7)==0 && *(p+6)==1)
- z=x-y;
- else if (*(p+7)==1 && *(p+6)==0)
- z=x*y;
- else
- z=x/y;
-
- return z;
- }
- void seg(int a){
- int qian1, bai1, shi1, ge1;
- qian1 = a/1000;
- bai1 = a%1000/100;
- shi1 = a%1000%100/10;
- ge1 = a%1000%100%10;
-
- *qian = digital[qian1];
- *bai = digital[bai1];
- *shi = digital[shi1];
- *ge = digital[ge1];
- }
- void keyin(volatile char* Switches, char* leds, char oprand[6]){
- *leds = *Switches;
- int i;
- int k;
- if(Switches[8]==1)
- for(i=0;i<6;i++)
- oprand[i]=Switches[i];
- else
- for(k=0;k<6;k++)
- oprand[i]=0;
- }
- int binToDec(char oprand[6]){
- int dec;
- dec=(oprand[5])*32+(oprand[4])*16+(oprand[3])*8+(oprand[2])*4+(oprand[1])*2+(oprand[0]);
- return dec;
- }
- void decToBin(int dec,char *leds){
- int i;
- for(i=0;i<12;i++){
- leds[i]=dec%2;
- dec=dec/2;
- }
- }
复制代码
|
|
2020-11-22 21:59:21
评论
举报
|
|
|