Vizitator Postat Aprilie 12, 2007 Partajează Postat Aprilie 12, 2007 Buna!Am nevoie de putin ajutor. Trebuie sa fac un program in MplabC18 dar nu am mai lucrat cu acesta pana acum. Am facut programul in C si acum trebuie sa-l adaptez in Mplab numai ca imi da tot felul de erori si warning-uri. Ma poate ajuta cineva? :smt009 Link spre comentariu
Vizitator Vasile Postat Aprilie 12, 2007 Partajează Postat Aprilie 12, 2007 eu zic ca nu ai scris bine softul pentru ca mplab stie si C Link spre comentariu
Vizitator sweetvaly Postat Aprilie 13, 2007 Partajează Postat Aprilie 13, 2007 eu zic ca nu ai scris bine softul pentru ca mplab stie si C Pai intradevar Mplab-ul are biblioteci de ale C-ului dar numai:stdio.h, stdlib.h si string.h si asa,,,, tot nu recunoaste toate functiile. Si imi da eroarea asta: "Error - section '.udata_incerc_link.o' can not fit the section. Section '.udata_incerc_link.o' length=0x00000338" care nu stiu la ce se refera si WARNING-uri pentru toate functiile create si apelate de mine ("functions without prototype") desi eu le-am definit si in C programul merge perfect.Ce sa fac?????????? Link spre comentariu
Cristiano Postat Aprilie 13, 2007 Partajează Postat Aprilie 13, 2007 eu zic ca nu ai scris bine softul pentru ca mplab stie si C Pai intradevar Mplab-ul are biblioteci de ale C-ului dar numai:stdio.h, stdlib.h si string.h si asa,,,, tot nu recunoaste toate functiile. Si imi da eroarea asta: "Error - section '.udata_incerc_link.o' can not fit the section. Section '.udata_incerc_link.o' length=0x00000338" care nu stiu la ce se refera si WARNING-uri pentru toate functiile create si apelate de mine ("functions without prototype") desi eu le-am definit si in C programul merge perfect.Ce sa fac??????????Banuiesc ca faci greseala urmatoare: te astepti ca programul pentru microcontroller sa ruleze la fel ca un program pentru PC. Cand faci programul pentru un microcontroller trebuie sa folosesti librariile care vin odata cu compilatorul, sa tii cont de memoria limitata, sa tii cont de reprezentarea tipurilor de variabile (int / float / etc), suportul pentru operatii (inmultiri / impartiri / etc) s.a.m.d. Ia pune aici codul sursa si vedem ce nu corespunde. Link spre comentariu
Vizitator sweetvaly Postat Aprilie 13, 2007 Partajează Postat Aprilie 13, 2007 Tot eu cu problema cu Mplab-ul Am atasat programul facut in C si modificat pentru Mplab trebuie sa lucrez cu 2 fisiere (fisier1.txt, fisier2.txt). Diferenta este ca in C lucrez cu Fisiere dar in Mplab ii dau PIC-ului continutul fisierelor pe USART si la sfarsitul fisierului trebuie sa pun un caracter special in loc de EOF. La ce gresesc????? programul in C #include //La rulare trebuie sa apesi W pt sus, A pt stanga, D pt dreapta, S pt jos, #include //L pentru link la fisierul aferent E pt exit #include // daca in fereastra imi apare '*' pe prima linie pot apasa L si imi deschide fisierul aferent liniei #include #include #include #define SEPARATOR '$' char* a[100]; //vectorul ce contine pozitiile fiecarei linii char aux[255]; //am 255 caractere, nu iau in considerare '.'sau '\n' char v[4][40]; char* links[100]; char* pc1; char* pc2; char kaux; int nr_lines = 0 , lin=2 , col=8; //linXcol=rezolutia LCD-ului int maxc; FILE *fis; void fereastra(int l, int c) { int i, j; int index; int ichar; clrscr(); for (i = 0; i < lin; i++) { index = l + i; for (j = 0; j < col; j++) { ichar = c + j; if (!(index >= 0 && index < nr_lines)) v[j] = ' '; else if (!(ichar >=0 && ichar < strlen(a[index]))) v[j] = ' '; else { v[j] = a[index][ichar]; } } if (index >=0 && index < nr_lines && links[index] != NULL) v[0] = '*'; if (index >=0 && index < nr_lines && links[index] == NULL) v[0]=' '; } for (i = 0; i < lin; i++) { for (j = 0; j < col; j++) { printf("%c", v[j]); } printf("\n"); } // } //de la else } void extract_links() { int i; maxc=0; for (i = 0; i < nr_lines; i++) if (links != NULL) { free(links); links = NULL; } /* * Cautam link-urile din fiecare linie. * char *strchr( const char *str, int ch ); */ for (i = 0; i < nr_lines; i++) { pc1 = (char *) strchr(a,(int) '<'); pc2 = (char *) strchr(a,(int) '>'); if (pc1 < pc2) { //daca sunt pozitionate corect scoatem link-ul pc1++; //trecem peste '<' kaux = pc2[0]; //salvam > pc2[0] = '\0'; //punem sfarsit de sir pentru copiere ;) links = (char *) malloc(255); //alocam link-ul strcpy(links, pc1); //copiem link-ul in elementul corespunzator din links pc2[0] = kaux; //refacem pc[0] //printf("LINK: %s\n", links); //acum scoatem link-ul din sir pc1--; //include si caracterul '<' pc1[0] = '\0'; //punem sfarsit de sir inainte de link pc2++; // trecem peste caracterul de sfarsit de link '>' strcat(a, pc2); //facem legatura intre cele doua parti //printf("Text: %s\n", a); } if (strlen(a) > maxc) maxc = strlen(a); } } void citire() { int i = -1; int j = -1; char c; while (!feof(fis)) { if (a[++i] == NULL) a = (char *) malloc(255); j=-1; while ((c = fgetc(fis)) != EOF && c != SEPARATOR) a[++j] = c; a[++j] = '\0'; } nr_lines = i; extract_links(); } void open_file(char *nume_fisier) { if ((fis = fopen(nume_fisier, "r")) == NULL) { printf("Eroare fopen()!\n"); exit(1); } } void main() { //citire //int i = -1; int l, c; open_file("fisier1.txt"); citire(); //pozitia initiala l = 2; c = 2; //printf ("\npozitia initiala\n\n"); fereastra(l,c); // printf ("de la ce linie incepem?\n"); //scanf("%d", &l); // printf("in ce directie navigati?\na=dreapata;\nd=stanga;\nw=in sus;\ns=in jos;\n "); while (1) { char car = getch(); if (car=='a') --c; { if (c<-1) fereastra(l,++c); else fereastra(l,c);} if (car=='d') ++c; { if (c>(maxc-col)) fereastra(l,--c); else fereastra(l,c);} if (car=='w') --l; { if (l<0) fereastra(++l,c); else fereastra(l,c);} if (car=='s') ++l; { if (l>(nr_lines-lin)+1) fereastra(--l,c); else fereastra(l,c);} if (car=='e') exit(car - 'e'); if (car=='l') {if (l >= 0 && l < nr_lines && links[l] != NULL) {fclose(fis); open_file(links[l]); citire(); l=2;c=2; fereastra(l,c);} else { clrscr(); printf("Nu exista link!");}} } } fisierele cu care lucrez: "fisier1.txt" linia aceasta este fara link 1$linie din nou fara link 2$linie de data aceasta cu link 3$ "fisier2.txt" linie cu link$linie fara link$asta e fisierul 2$ programul in MPLAB: #include #include #include #include #include #define SEPARATOR '$' #define END '@' char *a[100]; //vectorul ce contine pozitiile fiecarei linii char aux[255]; //am 255 caractere, nu iau in considerare '.'sau '\n' char v[4][40]; char *links[100]; char *pc1; char *pc2; char kaux; int nr_lines = 0 , lin=2 , col=8; //linXcol=rezolutia LCD-ului int maxc; char *fis; ///////// void fereastra(int l, int c) { int i, j; int index; int ichar; ///// clrscr(); for (i = 0; i < lin; i++) { index = l + i; for (j = 0; j < col; j++) { ichar = c + j; if (!(index >= 0 && index < nr_lines)) v[j] = ' '; else if (!(ichar >=0 && ichar < strlen(a[index][0]))) v[j] = ' '; else { v[j] = a[index][ichar]; } } if (index >=0 && index < nr_lines && links[index] != NULL) v[0] = '*'; if (index >=0 && index < nr_lines && links[index] == NULL) v[0]=' '; } for (i = 0; i < lin; i++) { for (j = 0; j < col; j++) { putcUSART((char) v[j]); } putcUSART((char) '\n'); } } void extract_links() { int i; maxc=0; for (i = 0; i < nr_lines; i++) if (links != NULL) { // free(links); links = NULL; } /* * Cautam link-urile din fiecare linie. * char *strchr( const char *str, int ch ); */ for (i = 0; i < nr_lines; i++) { pc1 = (char *) strchr(a,(int) '<'); pc2 = (char *) strchr(a,(int) '>'); if (pc1 < pc2) { //daca sunt pozitionate corect scoatem link-ul pc1++; //trecem peste '<' kaux = pc2[0]; //salvam > pc2[0] = '\0'; //punem sfarsit de sir pentru copiere ;) // links = (char *) malloc(255); //alocam link-ul strcpy(links, pc1); //copiem link-ul in elementul corespunzator din links pc2[0] = kaux; //refacem pc[0] //printf("LINK: %s\n", links); //acum scoatem link-ul din sir pc1--; //include si caracterul '<' pc1[0] = '\0'; //punem sfarsit de sir inainte de link pc2++; // trecem peste caracterul de sfarsit de link '>' strcat(a, pc2); //facem legatura intre cele doua parti //printf("Text: %s\n", a); } if (strlen(a) > maxc) maxc = strlen(a); } } void citire() { int i = -1; int j = -1; char c; c=getcUSART(); while (c!= END && c != SEPARATOR) { /* if (a[++i] == NULL) a = (char *) malloc(255);*/ j=-1; while (c!= END && c != SEPARATOR) { a[++j] = c; c=getcUSART();} a[++j] = '\0'; } nr_lines = i; extract_links(); } /*void open_file(char *nume_fisier) { // fis = getsUSART(nume_fisier); // if (fis == NULL) { char fis=getcUSART(); while(fis) fis =getsUSART(nume_fisier); //exit(1); // } }*/ void main() { int l, c; OpenUSART ( USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 10); //open_file("fisier1.txt");//////////??????????? citire(); //pozitia initiala l = 2; c = 2; //printf ("\npozitia initiala\n\n"); fereastra(l,c); while (1) { char car = getcUSART(); if (car=='a') --c; { if (c<-1) fereastra(l,++c); else fereastra(l,c);} if (car=='d') ++c; { if (c>(maxc-col)) fereastra(l,--c); else fereastra(l,c);} if (car=='w') --l; { if (l<0) fereastra(++l,c); else fereastra(l,c);} if (car=='s') ++l; { if (l>(nr_lines-lin)+1) fereastra(--l,c); else fereastra(l,c);} //if (car=='e') exit(car - 'e'); if (car=='l') {if (l >= 0 && l < nr_lines && links[l] != NULL) {//fclose(fis); // open_file(links[l]); putsUSART(links[l]); Delay1KTCYx(60); citire(); l=2;c=2; fereastra(l,c);} //else { //clrscr(); //putcUSART("Nu exista link!");} }} } CloseUSART(); } Link spre comentariu
Cristiano Postat Aprilie 13, 2007 Partajează Postat Aprilie 13, 2007 Nu am MPLAB C18, eu folosesc HiTech PICC18, dar mi se pare ca incerci sa aloci si sa folosesti mai multa memorie decat are PIC-ul. PS: codul ala e varza ... incearca sa standardizezi numele variabilelor, sa aranjezi mai bine codul in pagina, etc. Link spre comentariu
Vizitator sweetvaly Postat Aprilie 13, 2007 Partajează Postat Aprilie 13, 2007 Buna...Daca cineva are raspuns pt: <Tot eu cu problema cu Mplab-ul Am atasat programul facut in C si modificat pentru Mplab trebuie sa lucrez cu 2 fisiere (fisier1.txt, fisier2.txt). Diferenta este ca in C lucrez cu Fisiere dar in Mplab ii dau PIC-ului continutul fisierelor pe USART si la sfarsitul fisierului trebuie sa pun un caracter special in loc de EOF. La ce gresesc????? > sa-i raspunda lu alexastud....ea este interesata de subiectu acesta...a avut ceva probleme cu contu si a scris de pe al meu....multumesc frumos! bye bye! ;) Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum