
Zitat von
Frank
Es mag einzelne Libary Funktionen geben die man besser oder optimierter anlegen könnte, aber das ist bei
GCC auch der Fall. Bis man ein mittelgroßes Projekt mit
GCC realisiert hat, hat man in der Regel bereits zwei in
Bascom entwickelt. Vorausgesetzt man hat sich etwas in die Sprache eingearbeitet.
Kommt immer auf das Projekt an. Ein Hello World hat man mit Bascom vermutlich schneller programmiert, sobald aber es aber darum geht eine komplexe Daten Ein-/Ausgabe mit mehreren Ringpuffer usw. zu realisieren ist man mit C schneller.
Außerdem kann man C mehr optimieren, da man sich mal eben den Assemblercode zu seinen C Quelltext anschauen kann. So kann man sehr schön sehen was schnell geht und was viel Platz verbraucht und es entsprechend umgestalten.
Beispiel:
Code:
void uart_put_hex(uint8_t data)
{
786: cf 93 push r28
788: 98 2f mov r25, r24
uint8_t hi, low;
/* Obere 4-bit */
hi = data & 0xf0;
hi >>= 4;
78a: 82 95 swap r24
78c: 8f 70 andi r24, 0x0F ; 15
hi += '0';
78e: 80 5d subi r24, 0xD0 ; 208
if ( hi > '9')
790: 8a 33 cpi r24, 0x3A ; 58
792: 08 f0 brcs .+2 ; 0x796
hi += 7; // A..F
794: 89 5f subi r24, 0xF9 ; 249
/* Untere 4-bit */
low = ( data & 0x0f ) + '0';
796: 9f 70 andi r25, 0x0F ; 15
798: c9 2f mov r28, r25
79a: c0 5d subi r28, 0xD0 ; 208
if (low > '9')
79c: ca 33 cpi r28, 0x3A ; 58
79e: 08 f0 brcs .+2 ; 0x7a2
low += 7; // A..F
7a0: c9 5f subi r28, 0xF9 ; 249
uart_putc(hi);
7a2: 0e 94 36 03 call 0x66c
uart_putc(low);
7a6: 8c 2f mov r24, r28
7a8: 0e 94 36 03 call 0x66c
7ac: cf 91 pop r28
7ae: 08 95 ret

Zitat von
Frank
Das schöne an
Bascom ist auch das
Projekte in eier einzigen BAS Datei realisiert werden. Schaut Euch mal dagegen ein C-Projekt an, viele Header-Dateien,C-Files, Projektdateien müssen angelegt werden. Sowas ist bei Mamut PC-Projekten ja manchmal ganz nett, aber bei einem kleinen Controllerprogramm nervt es mich doch erheblich.
Es spricht ja nichts dagegen das bei C auch zu tun. Aber wenn man eine einzige Datei mit über 2000 Zeile Code habe verliert man vollkommen die Übersicht.
Da ist es wesentlich angenehmer das Ganze aufzusplitten in verschiedene Dateien in denen jeweils zusammenhängender Code groupiert wird. Diese Dateien stellen dann bestimmt Funktionen als Schnittstelle zur Verfügung mit denen man den Ganzen Code nutzten kann ohne direkt verstehen zu müssen wie er im Einzelnen funktioniert 
Wenn man einmal das Prinzip dahinter verstanden hat und diese Feature sinnvoll nutzt lässt sich damit sehr gut programmieren...
MfG Kjion
PS: Um auch nochmal auf die ursprüngliche Frage einzugehen :
Code:
red0 = (boden_value_red0[2*i]*256 | boden_value_red0[2*i + 1]) >> 2;
In C ist sowas kein Problem
Lesezeichen