Zitat 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 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