mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-01-19 03:23:32 +08:00
[bsp][bluetrum] update link.lds
This commit is contained in:
parent
08aa4e5462
commit
7741df50ab
@ -380,6 +380,7 @@ CONFIG_RT_USING_LIBC=y
|
|||||||
# CONFIG_PKG_USING_UC_COMMON is not set
|
# CONFIG_PKG_USING_UC_COMMON is not set
|
||||||
# CONFIG_PKG_USING_UC_MODBUS is not set
|
# CONFIG_PKG_USING_UC_MODBUS is not set
|
||||||
# CONFIG_PKG_USING_PPOOL is not set
|
# CONFIG_PKG_USING_PPOOL is not set
|
||||||
|
# CONFIG_PKG_USING_OPENAMP is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# peripheral libraries and drivers
|
# peripheral libraries and drivers
|
||||||
|
@ -60,15 +60,10 @@ SECTIONS
|
|||||||
} > ram1 AT > flash
|
} > ram1 AT > flash
|
||||||
|
|
||||||
.comm : {
|
.comm : {
|
||||||
KEEP (*(.vector))
|
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*)
|
EXCLUDE_FILE(*components*finsh**.o *components*libc**.o *romfs.o *lib_a**.o) *(.text*)
|
||||||
*idle.o (.text*)
|
*finsh*shell.o (.text*)
|
||||||
*ipc.o (.text*)
|
EXCLUDE_FILE (*components*libc**.o *romfs.o *lib_a**.o) *(.rodata*)
|
||||||
*irq.o (.text*)
|
|
||||||
*scheduler.o (.text*)
|
|
||||||
*timer.o (.text*)
|
|
||||||
*kservice.o (.text*)
|
|
||||||
EXCLUDE_FILE (*romfs.o *lib_a**.o) *(.rodata*)
|
|
||||||
*(.srodata*)
|
*(.srodata*)
|
||||||
*(.rela*)
|
*(.rela*)
|
||||||
*(.data*)
|
*(.data*)
|
||||||
|
13
bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets
Normal file
13
bsp/bluetrum/ab32vg1-ab-prougen/makefile.targets
Normal file
@ -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)
|
4
bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh
Normal file
4
bsp/bluetrum/ab32vg1-ab-prougen/pre_build.sh
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
cp ../riscv32-elf-xmaker.exe .
|
||||||
|
cp ../header.bin .
|
||||||
|
cp ../rtthread.xm .
|
||||||
|
cp ../download.xm .
|
@ -13,7 +13,7 @@
|
|||||||
.global rt_interrupt_from_thread
|
.global rt_interrupt_from_thread
|
||||||
.global rt_interrupt_to_thread
|
.global rt_interrupt_to_thread
|
||||||
.global rt_cur_thread_sp
|
.global rt_cur_thread_sp
|
||||||
.global rt_switch_flag
|
.global rt_thread_switch_interrupt_flag
|
||||||
.global rt_interrupt_nest
|
.global rt_interrupt_nest
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -77,12 +77,12 @@ enable_int_ret:
|
|||||||
sw x30, 108(sp)
|
sw x30, 108(sp)
|
||||||
sw x31, 112(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)
|
sw a5, 116(sp)
|
||||||
lw a5, EPICCON(zero)
|
lw a5, EPICCON(zero)
|
||||||
sw a5, 120(sp)
|
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
|
.endm
|
||||||
|
|
||||||
|
|
||||||
@ -90,7 +90,7 @@ enable_int_ret:
|
|||||||
.macro restore_context
|
.macro restore_context
|
||||||
|
|
||||||
la a5, rt_cur_thread_sp
|
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*/
|
/* Load task program counter EPC*/
|
||||||
lw a5, 116(sp)
|
lw a5, 116(sp)
|
||||||
@ -140,16 +140,16 @@ enable_int_ret:
|
|||||||
*/
|
*/
|
||||||
.globl rt_hw_context_switch_to
|
.globl rt_hw_context_switch_to
|
||||||
rt_hw_context_switch_to:
|
rt_hw_context_switch_to:
|
||||||
sw zero, rt_interrupt_from_thread, a4 /*set from thread to 0*/
|
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 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
|
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*/
|
SWINT /*kick soft interrupt*/
|
||||||
lw a5, PICCON(zero) /*enable interrupt*/
|
lw a5, PICCON(zero) /*enable interrupt*/
|
||||||
ori a5, a5, 1
|
ori a5, a5, 1
|
||||||
sw a5, PICCON(zero)
|
sw a5, PICCON(zero)
|
||||||
ret
|
ret
|
||||||
@ -161,10 +161,10 @@ rt_hw_context_switch_to:
|
|||||||
*/
|
*/
|
||||||
.globl rt_hw_context_switch
|
.globl rt_hw_context_switch
|
||||||
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*/
|
sw a1, rt_interrupt_to_thread, a4 /*set rt_interrupt_to_thread*/
|
||||||
li a5, 1
|
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*/
|
SWINT /*kick soft interrupt*/
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -190,37 +190,37 @@ rt_switch_to_thread:
|
|||||||
*/
|
*/
|
||||||
.global rt_hw_context_switch_interrupt
|
.global rt_hw_context_switch_interrupt
|
||||||
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
|
bnez a5, _reswitch
|
||||||
li a5, 0x01
|
li a5, 0x01
|
||||||
sw a5, rt_switch_flag, a4
|
sw a5, rt_thread_switch_interrupt_flag, a4
|
||||||
sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
|
sw a0, rt_interrupt_from_thread, a4 /*set rt_interrupt_from_thread*/
|
||||||
_reswitch:
|
_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
|
ret
|
||||||
|
|
||||||
//软中断服务
|
//软中断服务
|
||||||
.global rt_soft_isr
|
.global rt_soft_isr
|
||||||
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)
|
sw a5, PICPND(zero)
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.globl low_prio_irq
|
.globl low_prio_irq
|
||||||
low_prio_irq:
|
low_prio_irq:
|
||||||
save_context
|
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
|
lw a5, cpu_irq_comm_hook
|
||||||
jalr a5
|
jalr a5
|
||||||
|
|
||||||
lw a5, rt_switch_flag
|
lw a5, rt_thread_switch_interrupt_flag
|
||||||
beqz a5, _low_prio_irq_exit // if (rt_switch_flag)
|
beqz a5, _low_prio_irq_exit // if (rt_thread_switch_interrupt_flag)
|
||||||
jal rt_switch_to_thread
|
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:
|
_low_prio_irq_exit:
|
||||||
sb zero, rt_interrupt_nest, a4 // rt_interrupt_nest = 0;
|
|
||||||
restore_context
|
restore_context
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@
|
|||||||
volatile rt_ubase_t rt_interrupt_from_thread = 0;
|
volatile rt_ubase_t rt_interrupt_from_thread = 0;
|
||||||
volatile rt_ubase_t rt_interrupt_to_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_thread_switch_interrupt_flag = 0;
|
||||||
volatile rt_uint32_t rt_switch_flag = 0;
|
|
||||||
rt_uint32_t rt_cur_thread_sp = 0;
|
rt_uint32_t rt_cur_thread_sp = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,13 +41,13 @@ rt_uint8_t *rt_hw_stack_init(void *tentry,
|
|||||||
stk--;
|
stk--;
|
||||||
*stk = (rt_uint32_t)0x10003; /* Start address */
|
*stk = (rt_uint32_t)0x10003; /* Start address */
|
||||||
stk--;
|
stk--;
|
||||||
*stk = (rt_uint32_t)tentry; /* Start address */
|
*stk = (rt_uint32_t)tentry; /* Start address */
|
||||||
stk -= 22;
|
stk -= 22;
|
||||||
*stk = (rt_uint32_t)parameter; /* Register a0 parameter*/
|
*stk = (rt_uint32_t)parameter; /* Register a0 parameter*/
|
||||||
stk -= 6;
|
stk -= 6;
|
||||||
*stk = (rt_uint32_t)tp; /* Register thread pointer */
|
*stk = (rt_uint32_t)tp; /* Register thread pointer */
|
||||||
stk --;
|
stk --;
|
||||||
*stk = (rt_uint32_t)texit; /* Register ra texit*/
|
*stk = (rt_uint32_t)texit; /* Register ra texit*/
|
||||||
|
|
||||||
/* return task's current stack address */
|
/* return task's current stack address */
|
||||||
return (rt_uint8_t *)stk;
|
return (rt_uint8_t *)stk;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user