C-Code HP03 Veständnissproblem

Gast #680463
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
#680659
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
#680660
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.
#680663
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
#680781
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
Gast #680817
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren