Sari la conținut
ELFORUM - Forumul electronistilor

din C in MPLAB


Vizitator

Postări Recomandate

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
  • Răspunsuri 6
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Cristiano

    2

Vizitator sweetvaly

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

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

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

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări