Hallo zusammen, ich versuche mit dem IAR 8051 im C-Programm Funktionen eines vorkompilierten Bootloaders zu verwenden. Das ganze ist mit Keil kein Problem, da habe ich ein laufendes Beispiel. Ich bin aber leider gezwungen den IAR zu verwenden und da bekomme ich es nicht hin. Im Keil-Projekt findet sich folgender Code im Startup-Script(Auszug): ;----------------------------------------------------------------------- ------- ; The following define the entry points of the Bootloader functions ; and is used by the app to call the bootloader PUBLIC BOOTLOAD_REQ PUBLIC _BLOCK_WRITE PUBLIC _BLOCK_READ PUBLIC USB_SUSPEND PUBLIC USB_DISABLE PUBLIC USB_INT_ENABLE PUBLIC GET_INTERRUPT_SOURCE PUBLIC USB_INT_DISABLE PUBLIC USB_BL_USB_DESCRIPTOR PUBLIC _USB_INIT PUBLIC USB_CLOCK_START PUBLIC USB_GET_LIBRARY_VERSION BOOTLOAD_REQ EQU 0FFFFh _BLOCK_WRITE EQU 041Ah _BLOCK_READ EQU 05F8h USB_SUSPEND EQU 07CCh USB_DISABLE EQU 09CFh USB_INT_ENABLE EQU 0A53h GET_INTERRUPT_SOURCE EQU 0A80h USB_INT_DISABLE EQU 0A8Eh USB_BL_USB_DESCRIPTOR EQU 0A96h _USB_INIT EQU 0FA00h USB_CLOCK_START EQU 0FB37h USB_GET_LIBRARY_VERSION EQU 0FB7Bh Die dazugehörige Headerdatei(Auszug) schaut so aus: void USB_Clock_Start(void) large; void USB_Init(UINT,UINT,BYTE*,BYTE*,BYTE*,BYTE,BYTE,UINT) large; UINT Block_Write(BYTE*, UINT); BYTE Block_Read(BYTE*, BYTE) large; BYTE Get_Interrupt_Source(void) large; void USB_Int_Enable(void) large; void USB_Int_Disable(void) large; void USB_Disable(void) large; void USB_Suspend(void) large; UINT USB_Get_Library_Version(void) large; INTERRUPT_PROTO(USBXcore_USB_ISR, INTERRUPT_USB0); Was ich nicht verstehe ist, warum die Funktionsnamen nicht wirklich übereinstimmen (Groß/Klein und Unterstriche) aber das ganze trotzdem unter Keil funktioniert. Übertrage ich den Assembler-Code in die cstartup.s51 für den IAR, so meckert er schon mal wegen der unterschiedlichen Schreibweisen. Wenn ich die Funktionsnamen anpasse kommt dann immernoch folgende Warnung: Warning[w46]: External function "Block_Read" in module Interrupts has no global definition ... Kompilieren tut er, aber funktionieren tut das Programm leider nicht. Die Funktionen werden also vermutlich nie richtig aufgerufen. Ist die cstartup.s51 überhaupt die richtige Stelle dafür, bzw. wo genau in diesem file muss ich die Definitionen einfügen? Hat jemand einen Rat für mich, ich bin noch relativ neu in Sachen Assembler und Compiler.
zur Namensgebung: das Startup File ist ein Assembler File da spielt Groß Kleischrift keine Rolle. Der Unterstrich kommt immer dann hinzu, wenn eine C Funktion Parameter hat (nicht Rückgabewert) Das Ganze ist zum einen die Keil Namenskonventionen wie Keil das Interface zwischen C und ASM handhabt, zum andern ist das historisch bedingt. In der ursprünglich verwendeten OMF51 Spec von Intel war das so spezifiziert. Wie das bei IAR aussieht, mußt du dort nachlesen, da kenne ich mich nicht aus Thomas
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.