von bascom nach c

OP #4101903
Lesenswert?
• ▲
▼
Hallo zusammen,
zurzeit habe ich die Aufgabe ein Programm eines 3 stufigen 
HF-Verstärkers  von Bascom nach C umzuschreiben. Gesteuert wird der 
verstärker von eimen atmega128. Leider habe ich bisher nicht mit bascom 
gearbeitet und komme einfach nicht mehr weiter..
die erste frage wäre wie ich am besten die variablen mit dem zusatz "at 
overlay" umschreibe (ist das für byteweises lesen/schreiben??)


1
'Read_DC misst die Augenblickliche Spannung an dem in 'Channel' selektiertem
2
'Kanal
3

4
Function Read_dc(byval Channel As Word)as Word
5
   Dim D_out As Word
6
   Dim D_out_lo As Byte At D_out Overlay
7
   Dim D_out_hi As Byte At D_out + 1 Overlay
8
   Dim D_in As Word
9
   Dim D_in_lo As Byte At D_in Overlay
10
   Dim D_in_hi As Byte At D_in + 1 Overlay
11
   D_out = Channel
12
   Cs_adc7491 = 0                                           'start
13
   D_in_hi = Spimove(d_out_hi)
14
   D_in_lo = Spimove(d_out_lo)
15
   Cs_adc7491 = 1                                           'ende
16
   D_in = D_in And &H0FFF                                   '
17
   Read_dc = D_in
18
End Function
Persönliche Seite #4101909
Lesenswert?
• ▲
▼
JA, mit Overlay kann eine Variable über eine Andere (auf gleichen 
Speicherplatz gelegt werden, somit lässt sich komfortabel und schnell 
Konvertieren.
In C musst du dafür umständlich mit Pointern fummeln.

Zwei 8 Bit Werte in einem Array auf einen 16 Bit Wert mappen:
uint8_t  SDOS_6200_Data[2];
uint16_t *SDO6200 = (uint16_t*)&SDOS_6200_Data[0];

Christian_RX7
Gast #4101920
Lesenswert?
• ▲
▼
Christian Kreuzer schrieb:
> In C musst du dafür umständlich mit Pointern fummeln.
>
> Zwei 8 Bit Werte in einem Array auf einen 16 Bit Wert mappen:
> uint8_t  SDOS_6200_Data[2];
> uint16_t *SDO6200 = (uint16_t*)&SDOS_6200_Data[0];
Und wo fummelst du da umständlich mit Pointern? Das einzige 
umständliche das ich sehe ist das &SDOS_6200_Data[0], SDOS_6200_Data 
würde reichen.
Gast #4101929
Lesenswert?
• ▲
▼
D_in_hi = Spimove(d_out_hi)
   D_in_lo = Spimove(d_out_lo)

wenn man D_in als int definiert, kann man die Sache in C auch so lösen:
1
   D_in = (Spimove(d_out_hi) << 8) | Spimove(d_out_lo);

und die SPI-Adresse/-Daten, die ja offensichtlich  d_out_hi und d_out_lo 
steht/-en, kann man auch einfach der Funktion einen weiteren Parameter 
bzw. übergeben.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.