Webserver STR91x with GCC: I need help!

Hi, this message is for everyone that are working to porting webserver demo on STR91x using GCC. This porting is a part of my thesis, and i must finish it within the month of November. Please i need some help. At this time i don’t understand if there are the startup file or the porting file that don’t work! When i compile the freertos .elf file and i load it into the board, the board it seems died! It is possible that i’m the only that is working to this porting? If there is someone that can help me, i can post my files here. Thanks!

Webserver STR91x with GCC: I need help!

Do you have a decent debugger?  If so can you say where the crash occurs. Where did you get the startup files from? You need to ensure the startup files: i/setup IRQ and supervisor stacks ii/handle interrupt entry and exit as per the iar example for the str9 iii/call main in supervisor mode are you doing all these things?

Webserver STR91x with GCC: I need help!

Hi, Actually i aven’t a decent debugger because the Ride Raisonance toolkit that i use doesn’t provide a rom debugger and the ram debugger is limited to 16k. What i must used? The startup file are provided by Raisonance and modified by me as follows: .extern main .extern exit .extern VIC0_BASE .extern VIC1_BASE .code 32 .align 0 .extern _sidata .extern _sdata .extern _edata .extern _sbss .extern _ebss ;/* Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs */ .set  Mode_USR, 0x10            ;/* User Mode */ .set  Mode_FIQ, 0x11            ;/* FIQ Mode */ .set  Mode_IRQ, 0x12            ;/* IRQ Mode */ .set  Mode_SVC, 0x13            ;/* Supervisor Mode */ .set  Mode_ABT, 0x17            ;/* Abort Mode */ .set  Mode_UND, 0x1B          ;/* Undefined Mode */ .set  Mode_SYS, 0x1F            ;/* System Mode */ .equ  I_Bit, 0x80               ;/* when I bit is set, IRQ is disabled */ .equ  F_Bit, 0x40               ;/* when F bit is set, FIQ is disabled */ /*; — System memory locations */ ;/* init value for the stack pointer. defined in linker script */ .extern _estack ;/* Stack Sizes. The default values are in the linker script, but they can be overriden. */ SRAM_Base = 0x04000000 SRAM_Limit= 0x04018000 .set    UND_Stack_Size, 0x00000004 .set    ABT_Stack_Size, 0x00000004 .set    FIQ_Stack_Size, 0x00000004 .set    IRQ_Stack_Size, 0x00000400 .set    SVC_Stack_Size, 0x00000400 /***************************************************************************************/ .section .flashtext .code 32 .align 0 .globl _start .globl _startup _startup: _start:         ldr     PC, Reset_Addr         ldr     PC, Undefined_Addr         ldr     PC, SWI_Addr         ldr     PC, Prefetch_Addr         ldr     PC, Abort_Addr         nop                          /*; Reserved vector*/         ldr     pc, [pc,#-0xFF0]     /*; IRQ Handler ***I use this but i think that isn’t correct ***     ldr      PC, Fiq_Addr         Reset_Addr      : .long     Reset_Handler Undefined_Addr  : .long     UndefinedHandler SWI_Addr        : .long        vPortYieldProcessor Prefetch_Addr   : .long     PrefetchAbortHandler Abort_Addr      : .long     DataAbortHandler Fiq_Addr        : .long        FIQHandler                   .long 0      /*; Reserved vector*/ UndefinedHandler         : b     .                         /* undefined                */ PrefetchAbortHandler    : b     .                         /* program abort            */ DataAbortHandler        : b     .                         /* data abort                */ FIQHandler                : b     .                         /* FIQ                        */ Reset_Handler:    /* Setup a stack for each mode – note that this only sets up a usable stack     for system/user, SWI and IRQ modes.   Also each mode is setup with     interrupts initially disabled. */     ldr r0, =_estack     msr    CPSR_c, #Mode_FIQ|I_Bit|F_Bit     ldr    SP,    =FIQ_Stack_Size         msr    CPSR_c, #Mode_IRQ|I_Bit|F_Bit     ldr    SP,    =IRQ_Stack_Size         msr    CPSR_c, #Mode_ABT|I_Bit|F_Bit     ldr    SP,    =ABT_Stack_Size         msr    CPSR_c, #Mode_UND|I_Bit|F_Bit     ldr    SP,    =UND_Stack_Size         msr    CPSR_c, #Mode_SVC|I_Bit|F_Bit     ldr    SP,    =SVC_Stack_Size         msr    CPSR_c, #Mode_SYS|I_Bit|F_Bit             /* We want to start in supervisor mode.  Operation will switch to system     mode when the first task starts. */     msr   CPSR_c, #Mode_SVC|I_Bit|F_Bit     ;/* copy the initial values for .data section from FLASH to RAM */     ldr    R1, =_sidata     ldr    R2, =_sdata     ldr    R3, =_edata         _reset_inidata_loop:     cmp    R2, R3     ldrlO    R0, [R1], #4     strlO    R0, [R2], #4     blO    _reset_inidata_loop ;/* Clear the .bss section */     mov   r0,#0                        ;/* get a zero */     ldr   r1,=_sbss                ;/* point to bss start */     ldr   r2,=_ebss                ;/* point to bss end */         _reset_inibss_loop:     cmp   r1,r2                        ;/* check if some data remains to clear */     strlo r0,[r1],#4                ;/* clear 4 bytes */     blo   _reset_inibss_loop    ;/* loop until done */        /************************************************************************************************/ /*; — Now enter the C code */ /*             ldr    PC, ___main     ___main      : .long     main*/ b    main              The only problem is to handle the interrupt entry and exit. IAR use the IRQ_Handler function in 91x_vect.c and the portSAVE_Context and portRESTORE_Context are in the ISR_Support.h file. In gcc port this file doesn’t exist and the fuctions are included in portmacro.h as #define. if i use the IRQ_Handler on my startup file i obtain undefined reference error to portSAVE and portRESTORE from the compiler. For the rest, the file seems to be correct. Please take a look to the file. It’s most important to me to know that is correct. Thanks!

Webserver STR91x with GCC: I need help!

>ldr pc, [pc,#-0xFF0] /*; IRQ Handler ***I use this but i think that isn’t correct ***  This is not how the IAR example does it as you say and it might be that the -0xff0 is incorrect for the str9.  The IAR demo uses: LDR        PC, IRQ_Addr then defines IRQ_Addr to save the context, call the switch function, then restore the context.  You can copy the actual IRQ_Addr function from 91x_vect_IAR.s in the FreeRTOS download.  The missing portSAVE_CONTEXT and portRESTORE_CONTEXT functions are defined in ISR_Support.h which is included at the top of 91x_vect_IAR.s.  They are assembly macros that use the IAR syntax, I think you can simply change to use GAS (GNU assembler) syntax which is a bit simpler anyway.