Jump to content
ELFORUM - Forumul electronistilor

din C in MPLAB


Guest

Recommended Posts

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 to comment
  • Replies 6
  • Created
  • Last Reply

Top Posters In This Topic

Guest 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 to comment

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 to comment
Guest 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 to comment
Guest 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 to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines