Gast
#1797879
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.