Jump to content
ELFORUM - Forumul Electronistilor
Sign in to follow this  
Guest

din C in MPLAB

Recommended Posts

Guest

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

Share this post


Link to post
Share on other sites

Guest Vasile

eu zic ca nu ai scris bine softul pentru ca mplab stie si C

Share this post


Link to post
Share on other sites
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??????????

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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();

}

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites
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! ;)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • 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.