diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/.config b/bsp/bluetrum/ab32vg1-ab-prougen/.config index d6b19f6f8b8c81c347333966ab1ac5669f6c5c73..6dea3429e3c5da58c83de2679eaa9f23895ba78d 100644 --- a/bsp/bluetrum/ab32vg1-ab-prougen/.config +++ b/bsp/bluetrum/ab32vg1-ab-prougen/.config @@ -380,6 +380,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_UC_COMMON is not set # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_PPOOL is not set +# CONFIG_PKG_USING_OPENAMP is not set # # peripheral libraries and drivers diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds index 10d5b3b5901741028a9be0953435b2dfd7b03570..fa847c2400fa7a6909ce414699f7507209ec62ad 100644 --- a/bsp/bluetrum/ab32vg1-ab-prougen/link.lds +++ b/bsp/bluetrum/ab32vg1-ab-prougen/link.lds @@ -60,15 +60,10 @@ SECTIONS } > ram1 AT > flash .comm : { - 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*) + KEEP(*(.vector)) + EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *romfs.o *lib_a**.o) *(.text*) + *finsh*shell.o (.text*) + EXCLUDE_FILE (*components*libc**.o *romfs.o *lib_a**.o) *(.rodata*) *(.srodata*) *(.rela*) *(.data*) diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets b/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets new file mode 100644 index 0000000000000000000000000000000000000000..796588852bce39f2253a5aed5bf9e1e32eaa9e0f --- /dev/null +++ b/bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets @@ -0,0 +1,13 @@ +rtthread.siz: + riscv64-unknown-elf-size --format=berkeley "rtthread.elf" + sh ../pre_build.sh + riscv32-elf-xmaker -b rtthread.xm + riscv32-elf-xmaker -b download.xm + +clean2: + -$(RM) $(CC_DEPS)$(C++_DEPS)$(C_UPPER_DEPS)$(CXX_DEPS)$(SECONDARY_FLASH)$(SECONDARY_SIZE)$(ASM_DEPS)$(S_UPPER_DEPS)$(C_DEPS)$(CPP_DEPS) + -$(RM) $(OBJS) *.elf + -@echo ' ' + + +*.elf: $(wildcard D:/Softwares/RT-ThreadStudio/workspace/ab32vg1/link.lds) diff --git a/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh b/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh new file mode 100644 index 0000000000000000000000000000000000000000..d5bf03f49d2b6e4818fa13afd6073cdcb747cea3 --- /dev/null +++ b/bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh @@ -0,0 +1,4 @@ +cp ../riscv32-elf-xmaker.exe . +cp ../header.bin . +cp ../rtthread.xm . +cp ../download.xm . diff --git a/bsp/bluetrum/libcpu/cpu/context_gcc.S b/bsp/bluetrum/libcpu/cpu/context_gcc.S index e9a6cc28e3d03d8e2ce9fdd604154515e352c299..639b88573a8833bb3b1728f858cfee0a8413d8aa 100644 --- a/bsp/bluetrum/libcpu/cpu/context_gcc.S +++ b/bsp/bluetrum/libcpu/cpu/context_gcc.S @@ -13,7 +13,7 @@ .global rt_interrupt_from_thread .global rt_interrupt_to_thread .global rt_cur_thread_sp -.global rt_switch_flag +.global rt_thread_switch_interrupt_flag .global rt_interrupt_nest /* @@ -77,12 +77,12 @@ enable_int_ret: sw x30, 108(sp) sw x31, 112(sp) - lw a5, EPC(zero) //Saves current program counter (EPC) as task program counter + 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 + sw sp, rt_cur_thread_sp, a4 //store sp in preempted tasks tcb .endm @@ -90,7 +90,7 @@ enable_int_ret: .macro restore_context la a5, rt_cur_thread_sp - lw sp, 0(a5) //get new task stack pointer + lw sp, 0(a5) //get new task stack pointer /* Load task program counter EPC*/ lw a5, 116(sp) @@ -140,16 +140,16 @@ enable_int_ret: */ .globl rt_hw_context_switch_to rt_hw_context_switch_to: - sw zero, rt_interrupt_from_thread, a4 /*set from thread to 0*/ - sw a0, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/ + sw zero, rt_interrupt_from_thread, a4 /*set from thread to 0*/ + sw a0, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/ - sb zero, rt_interrupt_nest, a4 /*rt_interrupt_nest = 0*/ + sb zero, rt_interrupt_nest, a4 /*rt_interrupt_nest = 0*/ li a5, 1 - sw a5, rt_switch_flag, a4 // rt_switch_flag = 1; + sw a5, rt_thread_switch_interrupt_flag, a4 // rt_thread_switch_interrupt_flag = 1; SWINT /*kick soft interrupt*/ - lw a5, PICCON(zero) /*enable interrupt*/ + lw a5, PICCON(zero) /*enable interrupt*/ ori a5, a5, 1 sw a5, PICCON(zero) ret @@ -161,10 +161,10 @@ rt_hw_context_switch_to: */ .globl rt_hw_context_switch rt_hw_context_switch: - sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/ + sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/ sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/ li a5, 1 - sw a5, rt_switch_flag, a4 // rt_switch_flag = 1; + sw a5, rt_thread_switch_interrupt_flag, a4 /*rt_thread_switch_interrupt_flag = 1*/ SWINT /*kick soft interrupt*/ ret @@ -190,37 +190,37 @@ rt_switch_to_thread: */ .global rt_hw_context_switch_interrupt rt_hw_context_switch_interrupt: - lw a5, rt_switch_flag + lw a5, rt_thread_switch_interrupt_flag bnez a5, _reswitch li a5, 0x01 - sw a5, rt_switch_flag, a4 - sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/ + sw a5, rt_thread_switch_interrupt_flag, a4 + sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/ _reswitch: - sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/ + sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/ ret //软中断服务 .global rt_soft_isr rt_soft_isr: - li a5, 0x4 // PICPND = BIT(IRQ_SW_VECTOR); 清软中断Pending + li a5, 0x4 // PICPND = BIT(IRQ_SW_VECTOR); 清软中断Pending sw a5, PICPND(zero) ret .globl low_prio_irq low_prio_irq: save_context - li a5, 1 - sb a5, rt_interrupt_nest, a4 // rt_interrupt_nest = 1; + + lw a5, rt_interrupt_nest + bnez a5, _low_prio_irq_exit lw a5, cpu_irq_comm_hook jalr a5 - lw a5, rt_switch_flag - beqz a5, _low_prio_irq_exit // if (rt_switch_flag) + lw a5, rt_thread_switch_interrupt_flag + beqz a5, _low_prio_irq_exit // if (rt_thread_switch_interrupt_flag) jal rt_switch_to_thread - sw zero, rt_switch_flag, a4 // rt_switch_flag = 0; + sw zero, rt_thread_switch_interrupt_flag, a4 // rt_thread_switch_interrupt_flag = 0; _low_prio_irq_exit: - sb zero, rt_interrupt_nest, a4 // rt_interrupt_nest = 0; restore_context diff --git a/bsp/bluetrum/libcpu/cpu/cpuport.c b/bsp/bluetrum/libcpu/cpu/cpuport.c index 7689018a519bea358cdabcc880f6151823887551..ec3f9cdbc9e4bfda451aa4dd43e72585a2fee2e1 100644 --- a/bsp/bluetrum/libcpu/cpu/cpuport.c +++ b/bsp/bluetrum/libcpu/cpu/cpuport.c @@ -14,7 +14,6 @@ volatile rt_ubase_t rt_interrupt_from_thread = 0; volatile rt_ubase_t rt_interrupt_to_thread = 0; volatile rt_uint32_t rt_thread_switch_interrupt_flag = 0; -volatile rt_uint32_t rt_switch_flag = 0; rt_uint32_t rt_cur_thread_sp = 0; /** @@ -42,13 +41,13 @@ rt_uint8_t *rt_hw_stack_init(void *tentry, stk--; *stk = (rt_uint32_t)0x10003; /* Start address */ stk--; - *stk = (rt_uint32_t)tentry; /* Start address */ - stk -= 22; - *stk = (rt_uint32_t)parameter; /* Register a0 parameter*/ - stk -= 6; - *stk = (rt_uint32_t)tp; /* Register thread pointer */ - stk --; - *stk = (rt_uint32_t)texit; /* Register ra texit*/ + *stk = (rt_uint32_t)tentry; /* Start address */ + stk -= 22; + *stk = (rt_uint32_t)parameter; /* Register a0 parameter*/ + stk -= 6; + *stk = (rt_uint32_t)tp; /* Register thread pointer */ + stk --; + *stk = (rt_uint32_t)texit; /* Register ra texit*/ /* return task's current stack address */ return (rt_uint8_t *)stk;