/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
strings , %s , microcontroller
Fra : -Uncle-


Dato : 19-04-03 18:17

Hej NG

Er der nogle microkontroller folk her i gruppen som kan hjælpe mig lidt.
Jeg sidder og laver et c program til en microkontroller ( PIC16F877 )
jeg har i den forbindelse stødt på flere problemer bla. har jeg problemer
med at udskrive strings med %s, der kommer intet ud på displayet.
Jeg skal lige sige at jeg har lavet min egen putch rutine, som skriver til
LCD.
Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke det
rigtige resultat. jeg har prøvet min kode i Borland og der virker det
fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg har
inkluderet -Lf i buildoptions )

Mvh Jens



 
 
TheBachelor (19-04-2003)
Kommentar
Fra : TheBachelor


Dato : 19-04-03 18:40

On Sat, 19 Apr 2003 19:17:12 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
>jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke det
>rigtige resultat. jeg har prøvet min kode i Borland og der virker det
>fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg har
>inkluderet -Lf i buildoptions )
Hej Jens

Hvilken compiler bruger du? Er du sikker på at den understøtter 32bit?

/Thomas

-Uncle- (19-04-2003)
Kommentar
Fra : -Uncle-


Dato : 19-04-03 19:39

Hej Thomas

Ja jeg er næsten sikker på at compileren understøtter 32 bit . Compileren er
fra Hi-Tech www.htsoft.com men der skal tilføres et -Lf i
kommandolinien
for at compileren ved at der er long og floats i koden, ellers understøtter
den det ikke...

Jens

"TheBachelor" <thomas@in.dk> skrev i en meddelelse
news:he23avcaq6s3ta958jpac3lj6f5pj2p77l@4ax.com...
On Sat, 19 Apr 2003 19:17:12 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
>jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke det
>rigtige resultat. jeg har prøvet min kode i Borland og der virker det
>fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg har
>inkluderet -Lf i buildoptions )
Hej Jens

Hvilken compiler bruger du? Er du sikker på at den understøtter 32bit?

/Thomas



-Uncle- (19-04-2003)
Kommentar
Fra : -Uncle-


Dato : 19-04-03 19:54

Hej Thomas

Ja jeg er næsten sikker på at compileren understøtter 32 bit . Compileren er
fra Hi-Tech www.htsoft.com men der skal tilføres et -Lf i kommandolinien
for at compileren ved at der er long og floats i koden, ellers understøtter
den det ikke...
de skriver på deres hjemmeside :

Includes support for 24-bit and 32-bit IEEE floating point and 32-bit long
data types

Jens

"TheBachelor" <thomas@in.dk> skrev i en meddelelse
news:he23avcaq6s3ta958jpac3lj6f5pj2p77l@4ax.com...
On Sat, 19 Apr 2003 19:17:12 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
>jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke det
>rigtige resultat. jeg har prøvet min kode i Borland og der virker det
>fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg har
>inkluderet -Lf i buildoptions )
Hej Jens

Hvilken compiler bruger du? Er du sikker på at den understøtter 32bit?

/Thomas



TheBachelor (19-04-2003)
Kommentar
Fra : TheBachelor


Dato : 19-04-03 20:55

On Sat, 19 Apr 2003 20:54:24 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej Thomas
>Ja jeg er næsten sikker på at compileren understøtter 32 bit . Compileren er
>fra Hi-Tech www.htsoft.com men der skal tilføres et -Lf i kommandolinien
>for at compileren ved at der er long og floats i koden, ellers understøtter
>den det ikke...
Hvordan afgør du om din 4 byte til en 32-bit konvertering "fejler" ?

/Thomas

TheBachelor (19-04-2003)
Kommentar
Fra : TheBachelor


Dato : 19-04-03 21:04

On Sat, 19 Apr 2003 20:54:24 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej Thomas
>Ja jeg er næsten sikker på at compileren understøtter 32 bit . Compileren er
>fra Hi-Tech www.htsoft.com men der skal tilføres et -Lf i kommandolinien
>for at compileren ved at der er long og floats i koden, ellers understøtter
>den det ikke...
Hej igen... har du iøvrigt set denne update på HI-TECH's hjemmeside

<SNIP>

Code Generator:
Fixed in version 8.01

Fixed a problem with addition and subtraction of long's when the FSR
register was involved.
Fixed in version 8.00PL4:

With certain values using a "long" data type addition and subtraction
could give an inaccurate result. This has been fixed.

<SNAP>

Mvh
/Thomas

-Uncle- (19-04-2003)
Kommentar
Fra : -Uncle-


Dato : 19-04-03 21:52

Hej

Jeg kører med den sidste update 8.01 PL3 så jeg mener det skulle være i
orden. Med hensyn til koden har jeg lavet den både i Borland og Mplab
for at tjekke hvor fejlen var , og i Borland kommer det rigtige resultat,
men i Mplab bliver ikke rigtig...?
Her er mit lille test prg. :

void main(void)
{
unsigned char a=56;
unsigned char b=86;
unsigned char c=76;
unsigned char d=5;

unsigned long int nr2;
nr2=(a+(b<<8)+(c<<16)+(d<<24));
printf("%lu",nr2);
getch();
}

I Borland skriver den : 88888888
På mit LCD står der : 22153
og det er med den samme kode...?

Jens
"TheBachelor" <thomas@in.dk> skrev i en meddelelse
news:8sa3avo0n3550oe7ua579slb041amd6jl3@4ax.com...
On Sat, 19 Apr 2003 20:54:24 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej Thomas
>Ja jeg er næsten sikker på at compileren understøtter 32 bit . Compileren
er
>fra Hi-Tech www.htsoft.com men der skal tilføres et -Lf i
kommandolinien
>for at compileren ved at der er long og floats i koden, ellers understøtter
>den det ikke...
Hej igen... har du iøvrigt set denne update på HI-TECH's hjemmeside

<SNIP>

Code Generator:
Fixed in version 8.01

Fixed a problem with addition and subtraction of long's when the FSR
register was involved.
Fixed in version 8.00PL4:

With certain values using a "long" data type addition and subtraction
could give an inaccurate result. This has been fixed.

<SNAP>

Mvh
/Thomas



TheBachelor (19-04-2003)
Kommentar
Fra : TheBachelor


Dato : 19-04-03 22:26

On Sat, 19 Apr 2003 22:51:30 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej
>
>Jeg kører med den sidste update 8.01 PL3 så jeg mener det skulle være i
>orden. Med hensyn til koden har jeg lavet den både i Borland og Mplab
>for at tjekke hvor fejlen var , og i Borland kommer det rigtige resultat,
>men i Mplab bliver ikke rigtig...?
>Her er mit lille test prg. :
>
>void main(void)
>{
> unsigned char a=56;
> unsigned char b=86;
> unsigned char c=76;
> unsigned char d=5;
>
> unsigned long int nr2;
> nr2=(a+(b<<8)+(c<<16)+(d<<24));
> printf("%lu",nr2);
> getch();
> }
Hvad sker der hvis du gør følgende:

void main(void)
{
unsigned long nr2;
nr2=88888888;
printf("%lu",nr2);
getch();
}

Husk at bruge "long" og ikke "long int". Hvad kommer der ud af det på
dit LCD?

/Thomas

TheBachelor (19-04-2003)
Kommentar
Fra : TheBachelor


Dato : 19-04-03 22:42

On Sat, 19 Apr 2003 22:51:30 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej
>
>I Borland skriver den : 88888888
>På mit LCD står der : 22153
>og det er med den samme kode...?
Hej igen, det lyder lidt mystisk det her. Jeg har regnet lidt på det
og er kommet frem til følgende:

22153 = 56 + (86<<8) + 76 + 5

Hmmm. sammenhæng?!?!?

Det kunne måske være din printf som ikke kan konverterer rigtigt til
decimal tal når du er ude over 16 bit størrelser. Det kunne derfor
være sjovt at se resultatet af det jeg foreslog i min andet indlæg.

/Thomas - Gaaab godnat.

-Uncle- (20-04-2003)
Kommentar
Fra : -Uncle-


Dato : 20-04-03 07:34

Hej

Det har jeg prøvet, og her skriver den det den skal 88888888 i displayet.

Jens

"TheBachelor" <thomas@in.dk> skrev i en meddelelse
news:t9g3avg3un825c47lbpchv9velidvcr0ke@4ax.com...
On Sat, 19 Apr 2003 22:51:30 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej
>
>I Borland skriver den : 88888888
>På mit LCD står der : 22153
>og det er med den samme kode...?
Hej igen, det lyder lidt mystisk det her. Jeg har regnet lidt på det
og er kommet frem til følgende:

22153 = 56 + (86<<8) + 76 + 5

Hmmm. sammenhæng?!?!?

Det kunne måske være din printf som ikke kan konverterer rigtigt til
decimal tal når du er ude over 16 bit størrelser. Det kunne derfor
være sjovt at se resultatet af det jeg foreslog i min andet indlæg.

/Thomas - Gaaab godnat.



TheBachelor (20-04-2003)
Kommentar
Fra : TheBachelor


Dato : 20-04-03 08:07

On Sun, 20 Apr 2003 08:34:25 +0200, "-Uncle-" <oz7aev@tdcadsl.dk>
wrote:

>Hej
>
>Det har jeg prøvet, og her skriver den det den skal 88888888 i displayet.
>
>Jens
Ja, så er det nok som Ivan siger: at din int på PIC'en er en 16 bit
størrelse og ikke 32 som på PC'en. Prøv så at caste dine chars før du
"skubber" bittene.

typedef unsigned long Int32;

nr2 = (Int32)a | ((Int32)b<<8) | ((Int32)c<<16) | ((Int32)d<<24);

/Thomas

Ivan Johansen (19-04-2003)
Kommentar
Fra : Ivan Johansen


Dato : 19-04-03 22:50

-Uncle- wrote:
> void main(void)
> {
> unsigned char a=56;
> unsigned char b=86;
> unsigned char c=76;
> unsigned char d=5;
>
> unsigned long int nr2;
> nr2=(a+(b<<8)+(c<<16)+(d<<24));
> printf("%lu",nr2);
> getch();
> }
>
> I Borland skriver den : 88888888
> På mit LCD står der : 22153
> og det er med den samme kode...?

Denne forskel skyldes at en int er 16 bit på den ene compiler og 32 bit
på den anden. Resultatet af dine bit shifts bliver unsigned int, da det
er unsigned char du shifter, men rent faktisk er det undefined behavior
at shifte mere end der er plads til.

Løsningen er derfor at shifte med unsigned long i stedet for unsigned
char, så resultatet bliver unsigned long:
void main(void)
{
unsigned long a=56;
unsigned long b=86;
unsigned long c=76;
unsigned long d=5;

unsigned long int nr2;
nr2=(a+(b<<8)+(c<<16)+(d<<24));
printf("%lu",nr2);
}

Ivan Johansen


-Uncle- (20-04-2003)
Kommentar
Fra : -Uncle-


Dato : 20-04-03 08:47

Hej

Det hjalp på det, nu skriver den det den skal.
Så fik jeg løst et af mine problemer, er der nogle der har et bud på det
andet. Her kommer en lille stump kode som igen virker fint i Borland, men
der kommer intet på mit display.

int main(void)
{
char string[10];
char *str1 = "abcdefghi";

strcpy(string, str1);
printf("%s\n", string);
getch();
return 0;
}

Jens

"Ivan Johansen" <NG2@Padowan.dk> skrev i en meddelelse
news:3EA1C4A0.4030104@Padowan.dk...
> -Uncle- wrote:
> > void main(void)
> > {
> > unsigned char a=56;
> > unsigned char b=86;
> > unsigned char c=76;
> > unsigned char d=5;
> >
> > unsigned long int nr2;
> > nr2=(a+(b<<8)+(c<<16)+(d<<24));
> > printf("%lu",nr2);
> > getch();
> > }
> >
> > I Borland skriver den : 88888888
> > På mit LCD står der : 22153
> > og det er med den samme kode...?
>
> Denne forskel skyldes at en int er 16 bit på den ene compiler og 32 bit
> på den anden. Resultatet af dine bit shifts bliver unsigned int, da det
> er unsigned char du shifter, men rent faktisk er det undefined behavior
> at shifte mere end der er plads til.
>
> Løsningen er derfor at shifte med unsigned long i stedet for unsigned
> char, så resultatet bliver unsigned long:
> void main(void)
> {
> unsigned long a=56;
> unsigned long b=86;
> unsigned long c=76;
> unsigned long d=5;
>
> unsigned long int nr2;
> nr2=(a+(b<<8)+(c<<16)+(d<<24));
> printf("%lu",nr2);
> }
>
> Ivan Johansen
>



Michael Lund (20-04-2003)
Kommentar
Fra : Michael Lund


Dato : 20-04-03 09:37

Hej,

> Det hjalp på det, nu skriver den det den skal.
> Så fik jeg løst et af mine problemer, er der nogle der har et bud på det
> andet. Her kommer en lille stump kode som igen virker fint i Borland, men
> der kommer intet på mit display.
>
> int main(void)
> {
> char string[10];
> char *str1 = "abcdefghi";
>
> strcpy(string, str1);
> printf("%s\n", string);

Er det fordi du har et linieskift her? Det har du ikke haft i dine andre
eksempler. (Hvor mange linier kan der stå på displayet?

mvh.
Michael




-Uncle- (20-04-2003)
Kommentar
Fra : -Uncle-


Dato : 20-04-03 09:59

Hej Michael

Det er et 2 * 16 lcd-display dvs 2 linier med 16 karakterer, den stump kode
jeg skrev før var bare en kopi fra Borland's hjælp, normalt bruger jeg ikke
linieskift, det var en jeg havde overset. Det ændre ikke på resultatet at
fjerne den, det er generelt at den ikke vil skrive strenge ud ?

Jens

"Michael Lund" <milund@kodehaj.dk> skrev i en meddelelse
news:3ea25c05$0$52089$edfadb0f@dread16.news.tele.dk...
> Hej,
>
> > Det hjalp på det, nu skriver den det den skal.
> > Så fik jeg løst et af mine problemer, er der nogle der har et bud på det
> > andet. Her kommer en lille stump kode som igen virker fint i Borland,
men
> > der kommer intet på mit display.
> >
> > int main(void)
> > {
> > char string[10];
> > char *str1 = "abcdefghi";
> >
> > strcpy(string, str1);
> > printf("%s\n", string);
>
> Er det fordi du har et linieskift her? Det har du ikke haft i dine andre
> eksempler. (Hvor mange linier kan der stå på displayet?
>
> mvh.
> Michael
>
>
>



Ove Kjeldgaard (19-04-2003)
Kommentar
Fra : Ove Kjeldgaard


Dato : 19-04-03 21:54

"-Uncle-" <oz7aev@tdcadsl.dk> wrote:

>Hej NG
>
>Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
>jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke det
>rigtige resultat. jeg har prøvet min kode i Borland og der virker det
>fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg har
>inkluderet -Lf i buildoptions )
>
>Mvh Jens
>

Jeg har nogle macroer til at "få fat i de enkelte char's" i både 16 og 32 bit's
variable, virker i HiTech's PICC og burde virke i alle ANSI C kompilere.

Macroerne virker på begge sider af lighedstegnet, og kompilerer til ren 8 bit's
flytning af data, uden udregninger før flytningen.

Problemet er bare at det er nogle kompakte "adresse til pointer og tilbage til
adresse" define's som jeg ikke lige kan huske nu. Oprindelsen er vist nok fra
HiTech's forum, dog kan jeg ikke finde det nu, og der var også en enkelt fejl i
det oprindelige.

Men hvis det kan vente til jeg har været på arbejde efter ferien så...


--
Med venlig hilsen, Ove Kjeldgaard
Natur og Friluftsliv: <http://hiker.dk>

-Uncle- (19-04-2003)
Kommentar
Fra : -Uncle-


Dato : 19-04-03 22:22

Hej Ove

Alt er velkommen lige nu, jeg er selv gået lidt i stå, men vente til efter
ferien
ved jeg ikke om jeg kan da softwaren er til et semesterprojekt som skal
afleveres i starten af maj, og der skal også skrives rapport , så jeg har
ikke meget tid at løbe på.....hu ha

Mvh Jens

"Ove Kjeldgaard" <ok@newmail.dk> skrev i en meddelelse
news:3ea1b378.7869253@dtext.news.tele.dk...
> "-Uncle-" <oz7aev@tdcadsl.dk> wrote:
>
> >Hej NG
> >
> >Jeg har også Problemer med at flette 4 char sammen til en long, der hvor
> >jeg flytter min char d << 24 ( se evt. tidligere indlæg ) får jeg ikke
det
> >rigtige resultat. jeg har prøvet min kode i Borland og der virker det
> >fint.Og jeg mener da at PIC'n skulle kunne arbejde med 32 bit.( og jeg
har
> >inkluderet -Lf i buildoptions )
> >
> >Mvh Jens
> >
>
> Jeg har nogle macroer til at "få fat i de enkelte char's" i både 16 og 32
bit's
> variable, virker i HiTech's PICC og burde virke i alle ANSI C kompilere.
>
> Macroerne virker på begge sider af lighedstegnet, og kompilerer til ren 8
bit's
> flytning af data, uden udregninger før flytningen.
>
> Problemet er bare at det er nogle kompakte "adresse til pointer og tilbage
til
> adresse" define's som jeg ikke lige kan huske nu. Oprindelsen er vist nok
fra
> HiTech's forum, dog kan jeg ikke finde det nu, og der var også en enkelt
fejl i
> det oprindelige.
>
> Men hvis det kan vente til jeg har været på arbejde efter ferien så...
>
>
> --
> Med venlig hilsen, Ove Kjeldgaard
> Natur og Friluftsliv: <http://hiker.dk>



Ove Kjeldgaard (19-04-2003)
Kommentar
Fra : Ove Kjeldgaard


Dato : 19-04-03 22:37

"-Uncle-" <oz7aev@tdcadsl.dk> wrote:

>Hej Ove
>
>Alt er velkommen lige nu, jeg er selv gået lidt i stå, men vente til efter
>ferien
>ved jeg ikke om jeg kan da softwaren er til et semesterprojekt som skal
>afleveres i starten af maj, og der skal også skrives rapport , så jeg har
>ikke meget tid at løbe på.....hu ha
>
>Mvh Jens
>

Hej Jens

Jeg kunne måske nok skrive noget der "ligner" de macroer, men jeg har ikke nogen
C-kompiler på denne PC.

Så jeg vil hellere vente til tirsdag, i stedet for at skrive noget kode der ikke
virker.

PS.: Det er som jeg antyder i forrige artikkel nogle små kompakte macroer, men
det er begrænset hvad jeg har haft med pointere at gøre i C.


--
Med venlig hilsen, Ove Kjeldgaard
Natur og Friluftsliv: <http://hiker.dk>

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408193
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste