Hallo, ich würde gerne nur eine Funktion zum Initalisieren meines Mikrokontrollers schreiben. Da die UARTS 0-6 die selben Register haben (mit Ausnahme der Zahl... z.B.: u0c0 u1c0 u2c0...). Der Funktion würde ich folgende Parameter übergeben UART_Init(UART-Nr., BAUDRATE); Wie könnte man so etwas realisieren? Ich hätte nur die Idee, einen Switch in der Funktion zu verwenden. Ich würde mir gerne Code sparen und dies besser lösen. Für Vorschläge wäre ich sehr dankbar! Mit freundlichen Grüßen Dominik
der name ist egal, wenn es register sind und dise im gleichen abstand im Speicher sind. Dann kann man sich einfach die Adresse ausrechnen.
Welcher uC? Jedenfalls, wenn der uC memory mapped I/O hat, wie die AVRs in Bezug auf viele der Peripherieregister, dann einfach die Adresse(n) entsprechend umschalten. Oder per Preprozessor ##-Operator.
Es ist ein uC von der Renesas R32C111-Reihe. Den Tipp mit den Adressen find ich ganz gut, danke! Allerdings sehe ich da bei diesem Datenblatt keinen Zusammenhang (vl ist das bei Renesas anders). z.B.: u0mr = 000368h u1mr = 0002E8h u2mr = 000338h Danke für eure Antworten mfg Dominik
und wenn du der init funktion die basis adresse übergibst - sind die anderen register im bezug zur basis adresse immer gleich?
Wie wäre es mit einem Array?
1 | typedef struct { |
2 | int *uxc0; |
3 | int *uxm0; |
4 | ...
|
5 | } uart_info_t; |
6 | |
7 | uart_info_t uart_info[6] = {{ &u0c0, &u0m0 ... }, |
8 | { &u1c0, &u1m0 ... }, .. }; |
9 | uart_info[3].uxc0 = 0xdd; |
Hallo, Ich denke, dass ich es so, wie Klaus Falser mir es vorschlägt, machen werde. Finde, dass dies auch eine schöne Lösung ist. Besser als die Switch-Lösung auf jeden Fall ;-) Ich hab mir nochmals die Adressen angesehen und kann einfach keinen Zusammenhang finden. Es könnte aber trotzdem auch so funktionieren beim Renesas uC. Da fehlt mir die Erfahrung. Vielen Dank für eure Hilfe mfg Dominik
Alternative ist ein switc/case, aber nicht als Funktion in einem Modul, sondern als inline-Funktion. Ein optimierender Compiler wirft dann die nicht benötigten Fällt in die Tonne. Mit einem Array sollen die Typen wohl "int volatile*" sein anstatt "int*"?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.