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

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