R8C/13-Rechenleistung??
Der C-Compiler rechnet auch mit Realzahlen. Gerade mal probiert:
#include "math.h"
float x;
float y;
...
x = sin (y);
Es wird ohne Fehlermeldung übersetzt. Das Programm wird dadurch natürlich größer, aber 16 KB reichen trotzdem sehr weit.
Burkhard
R8C/13 Speicherbelegung
Wenn Du dich mal fragst, wo dein Speicher geblieben ist dann kannst Du das nachschauen. Es gibt in den Verzeichnissen Debug und Release eine Datei mit dem Namen deines Projekts und der Endung .map. Darin steht genau wo jedes einzelne Byte geblieben ist.
Du kannst dort z.B einen Bereich HEAP sehen. Den fragt die Oberfläche bei der Erstellung eines neuen Projekts ab und gibt 0x300 vor. Wenn man das übernimmt dann ist fast dein gesamter Speicher nur Heap. Nun brauchen wir aber bei unseren Programmen eigentlich keinen Heap. Der ist nur für malloc gedacht. Also am besten wieder verkleinern. Das muss man in den Einstellungen für Debug und Release getrennt vornehmen!
Olaf
R8C I/O Definition
Nach einem Reset sind alle Ports Eingänge. Dann kann man einfach schreiben:
xx = p1
Damit hat man dann alle acht Bits zusammen in der Byte-Variable xx.
Oder man macht gleich eine Abfrage eines einzelnen Bits:
if p1_7 == 1
{
dann tu was ...
}
R8C/13 und Assembler?
Kein Problem, man kann z.B. in der HEW (Dort wo man in C programmiert) auch in Assembler schreiben.
Alex
Zufallszahlen
Es gibt zwei Möglichkeiten, die der R8C unterstützen sollte.
Genau findet man das, im "C compiler user's manual" ( Win Start -> Programme - dann Renesas oder Renesas Tools unter High-performance....-> Manual Navigator!) Dort sind alle Befehle beschrieben, die der R8C bzw. der Compiler unterstützt.
Hier ein Ausschnitt der zwei Funktionen
rand:
[Function] Generates a pseudo-random number.
[Format] #include
int rand( void );
[Method] function
[Argument] No argument used.
[Returnvalue] Returns the seed random number series specified in srand.
The generated random number is a value between 0 and
RAND_MAX.
srand:
[Function] Imparts seed to a pseudo-random number generating routine.
[Format] #include
void srand( seed );
[Method] function
[Argument] unsigned int seed; Series value of random number
[ReturnValue] No value is returned.
[Description] Initializes (seeds) the pseudo random number series produced by rand using seed.
Alex
Wie werden die Analogeingänge abgefragt?
In Kurzform:
unsigned int ad_in(unsigned char ch)
{
/* Set A/D control registers */
adcon0 = 0x94 + ch; //ADN8...AN11 an P1_0...P1_3
adcon1 = 0x28; /* 10-bit mode */
adst = 1; /* Conversion start */
while(adst == 1){} /* Wait A/D conversion */
return ad; /* return AD value */
}
Wert = ad_in(0) misst dann die Spannung an Pin 15.
Burkhard
Dateien des Compilers
Die sect30.inc Datei ist eine Include-Datei für das Assembler File ncrt0.a30. Also eine Definitionsdatei die ähnlich wie eine *.h-Datei für eine C-Quelle funktioniert. In der sect0.inc werden alle Speicherbereiche für den R8C festgelegt. D.h. es wird definiert, wo Variablen und Code im fertigen Programm abgelegt werden. Weiterhin werden hier auch die Interrupt-Vektoren festgelegt. Die ncrt0.a30-Datei stellt den Startup-Code dar. Das bedeutet, dass diese Assembler-Datei den Einsprungpunkt für das spätere Programm darstellt. Hier werden z.B. bestimmte Variablenbereiche genullt und andere mit den Initialisierungswerten belegt. Zu guter Letzt ruft diese Datei die main()-Funktion auf.
Ralf
In r8csm_rev100.pdf findest Du eine Menge Befehle.
Oder zu C: rej10j0820_m16ccompiler_s.pdf und nc30wane.pdf auch auf der CD, was aber keine Kenntnisse in C ersetzt. Über die HEW bekommt man auch noch ne Menge zu lesen.
M16C-User
Begrenzte ROM-Speichergröße
In der Grundeinstellung verwendet der Compiler die Einstellungen für den kleinsten Chip mit nur 8 K. Um den vollen Speicher von 16 K nutzen zu können, muss man in sect30.inc (weit unten in Zeile 609) eine kleine Änderung machen:
;---------------------------------------------------------------
; Near ROM data area
;---------------------------------------------------------------
.section rom_NE,ROMDATA
.org 0c800H //war 0e000H
rom_NE_top:
Theoretisch könnte man runter bis 0c00oH, aber unten tummelt sich die Firmware für den KD30, deshalb lasse ich zur Sicherheit etwas mehr Platz.
Burkhard
