Browse Source

Merge pull request #4193 from greedyhao/bluetrum

[bsp][bluetrum] fix context switch error
Bernard Xiong 4 years ago
parent
commit
d22fde635b

+ 5 - 2
bsp/bluetrum/ab32vg1-ab-prougen/.config

@@ -288,6 +288,7 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_PDULIB is not set
 # CONFIG_PKG_USING_BTSTACK is not set
 # CONFIG_PKG_USING_LORAWAN_ED_STACK is not set
+# CONFIG_PKG_USING_WAYZ_IOTKIT is not set
 
 #
 # security packages
@@ -437,6 +438,8 @@ CONFIG_RT_USING_LIBC=y
 # CONFIG_PKG_USING_QKEY is not set
 # CONFIG_PKG_USING_RS485 is not set
 # CONFIG_PKG_USING_NES is not set
+# CONFIG_PKG_USING_VIRTUAL_SENSOR is not set
+# CONFIG_PKG_USING_VDEVICE is not set
 
 #
 # miscellaneous packages
@@ -495,13 +498,13 @@ CONFIG_RT_USING_LIBC=y
 # Onboard Peripheral Drivers
 #
 CONFIG_BSP_USING_USB_TO_USART=y
+CONFIG_BSP_USING_AUDIO=y
+CONFIG_BSP_USING_AUDIO_PLAY=y
 
 #
 # On-chip Peripheral Drivers
 #
 CONFIG_BSP_USING_UART0=y
-CONFIG_BSP_USING_AUDIO=y
-CONFIG_BSP_USING_AUDIO_PLAY=y
 
 #
 # Board extended module Drivers

+ 19 - 18
bsp/bluetrum/ab32vg1-ab-prougen/link.lds

@@ -1,9 +1,9 @@
 /* Define the flash max size */
-__max_flash_size = 768k;
+__max_flash_size = 1024k;
 
-__data_ram_size = 5k;
+__data_ram_size = 8k;
 __stack_ram_size = 4k;
-__comm_ram_size = 86k;
+__comm_ram_size = 83k;
 __heap_ram_size = 29k;
 
 __base = 0x10000000;
@@ -34,13 +34,8 @@ SECTIONS
     } > init
 
     .ram1 __ram1_vma : {
-        *hal_drivers**.o(.text*)
-        *hal_libraries*ab32vg1_hal**.o(.text*)
         *components*drivers**.o(.text* .rodata*)
-        *components*libc**.o(.text*)
-        *ab32vg1_hal_msp.o(.text*)
-        *components.o(.text* .rodata*)
-        *ipc.o(.text* .rodata*)
+        *device.o(.text*)
         . = ALIGN(32);
     } > ram1 AT > flash
 
@@ -65,8 +60,14 @@ SECTIONS
     } > ram1 AT > flash
 
     .comm : {
-        KEEP(*(.vector))
-        EXCLUDE_FILE (*romfs.o *lib_a**.o) *(.text*)
+        KEEP (*(.vector))
+        EXCLUDE_FILE (*hal_drivers**.o *ab32vg1_hal**.o *components*finsh**.o *components*libc**.o *rt-thread*src**.o *kernel*src**.o *romfs.o *lib_a**.o) *(.text*)
+        *idle.o (.text*)
+        *ipc.o (.text*)
+        *irq.o (.text*)
+        *scheduler.o (.text*)
+        *timer.o (.text*)
+        *kservice.o (.text*)
         EXCLUDE_FILE (*romfs.o *lib_a**.o) *(.rodata*)
         *(.srodata*)
         *(.rela*)
@@ -75,12 +76,6 @@ SECTIONS
         . = ALIGN(512);
     } > comm AT > flash
 
-    .flash : {
-        *romfs.o *(.text* .rodata*)
-        *lib_a**.o *(.text* .rodata*)
-        . = ALIGN(512);
-    } > flash
-
     .bss (NOLOAD):
     {
         __bss_start = .;
@@ -99,11 +94,17 @@ SECTIONS
     } > stack
     __irq_stack_size = __irq_stack - __irq_stack_start;
 
-    .heap : {
+    .heap (NOLOAD) : {
         __heap_start = .;
         . = __heap_ram_size;
         __heap_end = .;
     } > heap
+
+    .flash : {
+        *(.text*)
+        *(.rodata*)
+        . = ALIGN(512);
+    } > flash
 }
 
 /* Calc the lma */

+ 2 - 2
bsp/bluetrum/ab32vg1-ab-prougen/rtconfig.h

@@ -169,12 +169,12 @@
 /* Onboard Peripheral Drivers */
 
 #define BSP_USING_USB_TO_USART
+#define BSP_USING_AUDIO
+#define BSP_USING_AUDIO_PLAY
 
 /* On-chip Peripheral Drivers */
 
 #define BSP_USING_UART0
-#define BSP_USING_AUDIO
-#define BSP_USING_AUDIO_PLAY
 
 /* Board extended module Drivers */
 

+ 6 - 2
bsp/bluetrum/libcpu/cpu/context_gcc.S

@@ -44,7 +44,7 @@ enable_int_ret:
 
 /* Macro for saving task context */
 .macro save_context
-    addi    sp, sp, -120
+    addi    sp, sp, -124
 
     /* Save Context */
     sw      x1, 0(sp)
@@ -79,6 +79,8 @@ enable_int_ret:
 
     lw      a5, EPC(zero)                  //Saves current program counter (EPC) as task program counter
     sw      a5, 116(sp)
+    lw      a5, EPICCON(zero)
+    sw      a5, 120(sp)
 
     sw      sp, rt_cur_thread_sp, a4                       //store sp in preempted tasks tcb
     .endm
@@ -93,6 +95,8 @@ enable_int_ret:
     /* Load task program counter  EPC*/
     lw      a5, 116(sp)
     sw      a5, EPC(zero)
+    lw      a5, 120(sp)
+    sw      a5, EPICCON(zero)
 
     /* Restore registers,
        Skip global pointer because that does not change */
@@ -126,7 +130,7 @@ enable_int_ret:
     lw      x30, 108(sp)
     lw      x31, 112(sp)
 
-    addi    sp, sp, 120
+    addi    sp, sp, 124
     mret
     .endm
 

+ 2 - 0
bsp/bluetrum/libcpu/cpu/cpuport.c

@@ -39,6 +39,8 @@ rt_uint8_t *rt_hw_stack_init(void       *tentry,
     stack_addr  = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8);
     stk  = (rt_uint32_t *)stack_addr;
 
+    stk--;
+    *stk = (rt_uint32_t)0x10003;         /* Start address */
     stk--;
 	*stk = (rt_uint32_t)tentry;			/* Start address */
 	stk -= 22;