Forum: Mikrocontroller und Digitale Elektronik C-Code HP03 Veständnissproblem


von Humix (Gast)


Lesenswert?

Hallo Habe folgenden C-Code für den Drucksensor HP03 gefunden und möchte
ihn in Basic(Bascom) übersetzen.

http://www.hoperf.com/pdf/hp03_code.pdf

Da meine C-Kentnisse gegen Null gehen verstehe  ich die folgenden 
Funktion nicht.

   //function: calculate power for 2
   //*************************************
   long int Get2_x(unsigned char i)
   {
            uiData=2;
            i=i-1;
            while(i)
                {
                   uiData<<=1;
                      i--;
                    }
    return uiData;
   }
   //****************************************
Kann mir das jemand in Basic übersetzen oder den Inhalt erklären.
Vielen Danck Humix

von Hans J. (hjm)


Lesenswert?

Hallo Humix,

da hast Du uns auch was unterschlagen, die Variable uiData muß noch 
deklariert sein als long int.

Aber ansosten macht dies Routine nichts anders dir den Wert als 2 hoch 
Var zurückzugeben. Will heißen:

Get2_x(4) ist 16,
Get2_x(1) ist 2,

Get2_x(0) wird falsch berechnet, sollte nämlich 1 sein.

In Basic sähe es so aus:

Im Hauptprogramm
var = 1              ' ist der Exponent
Gosub Get2_x         ' Ergebnis steht in nachher in der Variablen erg

...
...

'Unterprogramm
Get2_x:
  erg = 1
  i = 0
  while i < var
   erg = erg * 2
   i=i+1
  wend
return

Hoffe mein Basic ist nicht eingerostet.

Grüße
Hans-Josef

von Karl H. (kbuchegg)


Lesenswert?

Humix wrote:
> Hallo Habe folgenden C-Code für den Drucksensor HP03 gefunden und möchte
> ihn in Basic(Bascom) übersetzen.
>
> http://www.hoperf.com/pdf/hp03_code.pdf
>
> Da meine C-Kentnisse gegen Null gehen

Nicht nur die. Was denkst du was CodeSAMMLUNG bedeuten könnte?

Thread verschoben

> verstehe  ich die folgenden
> Funktion nicht.
>
>    //function: calculate power for 2

Hmm. Was könnte wohl 'power for 2' heissen?
Eventuell das Berechnen einer 2-er Potenz. Du weist
schon: 2 hoch 2 ist 4, 2 hoch 3 ist 8, 2 hoch 4 ist 16 etc.

>    //*************************************
>    long int Get2_x(unsigned char i)
>    {
>             uiData=2;
>             i=i-1;
>             while(i)
>                 {
>                    uiData<<=1;
>                       i--;
>                     }
>     return uiData;
>    }

Jep. Das ist genau das was die Funktion macht. Sie
berechnet 2 zur i-ten Potenz, wobei i in die Funktion
hineingeht.
NB: Hat die Funktion einen Fehler. 2 hoch 0 kann sie nicht
berechnen.
NB2: Dem original Autor sollte man einen Ausdruck der
Funktion so lange um die Ohren schlagen bis er 100 mal
geschrieben hat: Ich soll keine globalen Variablen benutzen
solange es nicht unbedingt notwendig ist.

von Hans J. (hjm)


Lesenswert?

@Karl Heinz

ätsch war schneller. :-)))

Karl heinz Buchegger wrote:
> NB: Hat die Funktion einen Fehler. 2 hoch 0 kann sie nicht
> berechnen.
> NB2: Dem original Autor sollte man einen Ausdruck der
> Funktion so lange um die Ohren schlagen bis er 100 mal
> geschrieben hat: Ich soll keine globalen Variablen benutzen
> solange es nicht unbedingt notwendig ist.


Ne die Variable ist nicht Global, wie oben beschrieben fehlt die 
Deklaration.

Im Orginal-Source stehts richtig drin.



Grüße
Hans-Josef

von Humix (Gast)


Lesenswert?

Danke für die schnelle Hilfe,werd mich gleich an die Arbeit machen.

von Peter D. (peda)


Lesenswert?

Humix wrote:

>    //function: calculate power for 2
>    //*************************************
>    long int Get2_x(unsigned char i)
>    {
>             uiData=2;
>             i=i-1;
>             while(i)
>                 {
>                    uiData<<=1;
>                       i--;
>                     }
>     return uiData;
>    }

Das kann aber kein C-Programmierer geschrieben haben.

Ein C-Programmierer würde es (ohne den Fehler bei 0) so schreiben:
1
#define Get2_x(x) (1L<<x)


Peter

von Humix (Gast)


Lesenswert?

Sehr interessant ist das Datum

Titl                          HP03 simple example based on 8051 C
Current version:              v1.0
Function:                     Calcul
Processor                     STC12LE5410AD(8051 core)
Clock:                        11.0592MHz Crystal
Author:                       Merrick
Company:                      Hope mi
Contact:                      +86-0755-86106557
E-MAIL:                       hopefsk@hoperf.com
Date:                         2007-10-24

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.