port TencentOS tiny to RISC-V
This commit is contained in:
1368
arch/risc-v/common/riscv_encoding.h
Normal file
1368
arch/risc-v/common/riscv_encoding.h
Normal file
File diff suppressed because it is too large
Load Diff
190
arch/risc-v/common/tos_cpu.c
Normal file
190
arch/risc-v/common/tos_cpu.c
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
* tos_cpu.c
|
||||||
|
*
|
||||||
|
* Created on: Sep 8, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
#include <tos.h>
|
||||||
|
#include <riscv_encoding.h>
|
||||||
|
|
||||||
|
// soc code shoud not put here
|
||||||
|
#define __SYSTEM_CLOCK_108M_PLL_HXTAL (uint32_t)(108000000)
|
||||||
|
uint32_t SystemCoreClock = __SYSTEM_CLOCK_108M_PLL_HXTAL;
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_init(k_cycle_t cycle_per_tick)
|
||||||
|
{
|
||||||
|
port_systick_priority_set(TOS_CFG_CPU_SYSTICK_PRIO);
|
||||||
|
port_systick_config(cycle_per_tick);
|
||||||
|
}
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_init(void) {
|
||||||
|
k_cpu_cycle_per_tick = TOS_CFG_CPU_CLOCK / k_cpu_tick_per_second;
|
||||||
|
cpu_systick_init(k_cpu_cycle_per_tick);
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
__API__ cpu_cpsr_t tos_cpu_cpsr_save(void)
|
||||||
|
{
|
||||||
|
return port_cpsr_save();
|
||||||
|
}
|
||||||
|
|
||||||
|
__API__ void tos_cpu_cpsr_restore(cpu_cpsr_t cpsr)
|
||||||
|
{
|
||||||
|
port_cpsr_restore(cpsr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_context_switch(void)
|
||||||
|
{
|
||||||
|
port_context_switch();
|
||||||
|
}
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_irq_context_switch(void)
|
||||||
|
{
|
||||||
|
port_irq_context_switch();
|
||||||
|
}
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_sched_start(void)
|
||||||
|
{
|
||||||
|
port_sched_start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
Inx Offset Register
|
||||||
|
31 124 x31 t6
|
||||||
|
32 120 x30 t5
|
||||||
|
29 116 x29 t4
|
||||||
|
28 112 x28 t3
|
||||||
|
27 108 x27 s11
|
||||||
|
26 104 x26 s10
|
||||||
|
25 100 x25 s9
|
||||||
|
24 096 x24 s8
|
||||||
|
23 092 x23 s7
|
||||||
|
22 088 x22 s6
|
||||||
|
21 084 x21 s5
|
||||||
|
20 080 x20 s4
|
||||||
|
19 076 x19 s3
|
||||||
|
18 072 x18 s2
|
||||||
|
17 068 x17 a7
|
||||||
|
16 064 x16 a6
|
||||||
|
15 060 x15 a5
|
||||||
|
14 056 x14 a4
|
||||||
|
13 052 x13 a3
|
||||||
|
12 048 x12 a2
|
||||||
|
11 044 x11 a1
|
||||||
|
10 040 x10 a0
|
||||||
|
09 036 x9 s1
|
||||||
|
08 032 x8 s0/fp
|
||||||
|
07 028 x7 t2
|
||||||
|
06 024 x6 t1
|
||||||
|
05 020 x5 t0
|
||||||
|
04 016 x4 tp
|
||||||
|
03 012 x3 gp
|
||||||
|
02 008 x1 ra
|
||||||
|
01 004 mstatus
|
||||||
|
00 000 epc
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
__KERNEL__ k_stack_t *cpu_task_stk_init(void *entry,
|
||||||
|
void *arg,
|
||||||
|
void *exit,
|
||||||
|
k_stack_t *stk_base,
|
||||||
|
size_t stk_size)
|
||||||
|
{
|
||||||
|
cpu_data_t *sp = 0;
|
||||||
|
cpu_context_t *regs = 0;
|
||||||
|
|
||||||
|
sp = (cpu_data_t *)&stk_base[stk_size];
|
||||||
|
sp = (cpu_data_t *)((cpu_addr_t)(sp) & 0xFFFFFFF8);
|
||||||
|
|
||||||
|
sp -= (sizeof(cpu_context_t)/sizeof(cpu_data_t));
|
||||||
|
|
||||||
|
regs = (cpu_context_t*) sp;
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
for(int i=0; i<(sizeof(cpu_context_t)/sizeof(cpu_data_t)); i++) {
|
||||||
|
#define _V(v) ((unsigned int)((v/10) << 4 | (v % 10)))
|
||||||
|
*(sp + i) = (_V(i) << 24) | (_V(i) << 16) | (_V(i) << 8) | _V(i);
|
||||||
|
#undef _V
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
regs->a0 = (cpu_data_t)arg; // a0: argument
|
||||||
|
regs->ra = (cpu_data_t)0xACE00ACE; // ra: return address
|
||||||
|
regs->mstatus = (cpu_data_t)(MSTATUS_MPP | MSTATUS_MPIE); // return to machine mode and enable interrupt
|
||||||
|
regs->epc = (cpu_data_t)entry;
|
||||||
|
|
||||||
|
|
||||||
|
return (k_stack_t*)sp;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cpu_trap_entry(cpu_data_t cause, cpu_context_t *regs)
|
||||||
|
{
|
||||||
|
int ddd = cause;
|
||||||
|
while(1) {
|
||||||
|
ddd++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SysTick_IRQHandler() {
|
||||||
|
//asm("csrs mip, %0"::"r"(MIP_MTIP));
|
||||||
|
|
||||||
|
port_systick_config(k_cpu_cycle_per_tick);
|
||||||
|
#if 1
|
||||||
|
if(tos_knl_is_running()) {
|
||||||
|
tos_knl_irq_enter();
|
||||||
|
tos_tick_handler();
|
||||||
|
tos_knl_irq_leave();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void cpu_irq_entry(cpu_data_t irq, cpu_context_t *regs)
|
||||||
|
{
|
||||||
|
void (*irq_handler)();
|
||||||
|
extern void (*handler_vector_table[])();
|
||||||
|
|
||||||
|
irq_handler = handler_vector_table[irq];
|
||||||
|
if((*irq_handler) == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
(*irq_handler)();
|
||||||
|
}
|
||||||
|
|
||||||
|
__API__ uint32_t tos_cpu_clz(uint32_t val)
|
||||||
|
{
|
||||||
|
uint32_t nbr_lead_zeros = 0;
|
||||||
|
|
||||||
|
if (!(val & 0XFFFF0000)) {
|
||||||
|
val <<= 16;
|
||||||
|
nbr_lead_zeros += 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & 0XFF000000)) {
|
||||||
|
val <<= 8;
|
||||||
|
nbr_lead_zeros += 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & 0XF0000000)) {
|
||||||
|
val <<= 4;
|
||||||
|
nbr_lead_zeros += 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & 0XC0000000)) {
|
||||||
|
val <<= 2;
|
||||||
|
nbr_lead_zeros += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(val & 0X80000000)) {
|
||||||
|
nbr_lead_zeros += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!val) {
|
||||||
|
nbr_lead_zeros += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (nbr_lead_zeros);
|
||||||
|
}
|
118
arch/risc-v/common/tos_cpu.h
Normal file
118
arch/risc-v/common/tos_cpu.h
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
#ifndef _TOS_CPU_H_
|
||||||
|
#define _TOS_CPU_H_
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct cpu_context_st {
|
||||||
|
cpu_data_t epc;
|
||||||
|
cpu_data_t mstatus;
|
||||||
|
union { cpu_data_t x1, ra; };
|
||||||
|
union { cpu_data_t x3, gp; };
|
||||||
|
union { cpu_data_t x4, tp; };
|
||||||
|
union { cpu_data_t x5, t0; };
|
||||||
|
union { cpu_data_t x6, t1; };
|
||||||
|
union { cpu_data_t x7, t2; };
|
||||||
|
union { cpu_data_t x8, s0, fp; };
|
||||||
|
union { cpu_data_t x9, s1; };
|
||||||
|
union { cpu_data_t x10, a0; };
|
||||||
|
union { cpu_data_t x11, a1; };
|
||||||
|
union { cpu_data_t x12, a2; };
|
||||||
|
union { cpu_data_t x13, a3; };
|
||||||
|
union { cpu_data_t x14, a4; };
|
||||||
|
union { cpu_data_t x15, a5; };
|
||||||
|
union { cpu_data_t x16, a6; };
|
||||||
|
union { cpu_data_t x17, a7; };
|
||||||
|
union { cpu_data_t x18, s2; };
|
||||||
|
union { cpu_data_t x19, s3; };
|
||||||
|
union { cpu_data_t x20, s4; };
|
||||||
|
union { cpu_data_t x21, s5; };
|
||||||
|
union { cpu_data_t x22, s6; };
|
||||||
|
union { cpu_data_t x23, s7; };
|
||||||
|
union { cpu_data_t x24, s8; };
|
||||||
|
union { cpu_data_t x25, s9; };
|
||||||
|
union { cpu_data_t x26, s10; };
|
||||||
|
union { cpu_data_t x27, s11; };
|
||||||
|
union { cpu_data_t x28, t3; };
|
||||||
|
union { cpu_data_t x29, t4; };
|
||||||
|
union { cpu_data_t x30, t5; };
|
||||||
|
union { cpu_data_t x31, t6; };
|
||||||
|
} cpu_context_t;
|
||||||
|
|
||||||
|
__API__ uint32_t tos_cpu_clz(uint32_t val);
|
||||||
|
|
||||||
|
__API__ void tos_cpu_int_disable(void);
|
||||||
|
|
||||||
|
__API__ void tos_cpu_int_enable(void);
|
||||||
|
|
||||||
|
__API__ cpu_cpsr_t tos_cpu_cpsr_save(void);
|
||||||
|
|
||||||
|
__API__ void tos_cpu_cpsr_restore(cpu_cpsr_t cpsr);
|
||||||
|
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_init(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_reset(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_init(k_cycle_t cycle_per_tick);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_sched_start(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_context_switch(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_irq_context_switch(void);
|
||||||
|
|
||||||
|
__KERNEL__ k_stack_t *cpu_task_stk_init(void *entry,
|
||||||
|
void *arg,
|
||||||
|
void *exit,
|
||||||
|
k_stack_t *stk_base,
|
||||||
|
size_t stk_size);
|
||||||
|
|
||||||
|
#if TOS_CFG_TICKLESS_EN > 0u
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_resume(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_suspend(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_reload_reset(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_pending_reset(void);
|
||||||
|
|
||||||
|
__KERNEL__ k_time_t cpu_systick_max_delay_millisecond(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_expires_set(k_time_t millisecond);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_systick_reset(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TOS_CFG_PWR_MGR_EN > 0u
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_sleep_mode_enter(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_stop_mode_enter(void);
|
||||||
|
|
||||||
|
__KERNEL__ void cpu_standby_mode_enter(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
|
||||||
|
|
||||||
|
#error "unsupport now"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Allocates CPU status register word. */
|
||||||
|
#define TOS_CPU_CPSR_ALLOC() cpu_cpsr_t cpu_cpsr = (cpu_cpsr_t)0u
|
||||||
|
|
||||||
|
/* Save CPU status word & disable interrupts.*/
|
||||||
|
#define TOS_CPU_INT_DISABLE() \
|
||||||
|
do { \
|
||||||
|
cpu_cpsr = tos_cpu_cpsr_save(); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
/* Restore CPU status word. */
|
||||||
|
#define TOS_CPU_INT_ENABLE() \
|
||||||
|
do { \
|
||||||
|
tos_cpu_cpsr_restore(cpu_cpsr); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#endif /* _TOS_CPU_H_ */
|
23
arch/risc-v/common/tos_cpu_def.h
Normal file
23
arch/risc-v/common/tos_cpu_def.h
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* tos_cpu_def.h
|
||||||
|
*
|
||||||
|
* Created on: Sep 7, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TOS_CPU_DEF_H_
|
||||||
|
#define _TOS_CPU_DEF_H_
|
||||||
|
|
||||||
|
enum CPU_WORD_SIZE {
|
||||||
|
CPU_WORD_SIZE_08,
|
||||||
|
CPU_WORD_SIZE_16,
|
||||||
|
CPU_WORD_SIZE_32,
|
||||||
|
CPU_WORD_SIZE_64,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum CPU_STK_GROWTH {
|
||||||
|
CPU_STK_GROWTH_ASCENDING,
|
||||||
|
CPU_STK_GROWTH_DESCENDING,
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _TOS_CPU_DEF_H_ */
|
46
arch/risc-v/common/tos_cpu_types.h
Normal file
46
arch/risc-v/common/tos_cpu_types.h
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* tos_cpu_types.h
|
||||||
|
*
|
||||||
|
* Created on: Sep 7, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _TOS_CPU_TYPES_H_
|
||||||
|
#define _TOS_CPU_TYPES_H_
|
||||||
|
|
||||||
|
/* CPU address type based on address bus size. */
|
||||||
|
#if (TOS_CFG_CPU_ADDR_SIZE == CPU_WORD_SIZE_32)
|
||||||
|
typedef uint32_t cpu_addr_t;
|
||||||
|
#elif (TOS_CFG_CPU_ADDR_SIZE == CPU_WORD_SIZE_16)
|
||||||
|
typedef uint16_t cpu_addr_t;
|
||||||
|
#else
|
||||||
|
typedef uint8_t cpu_addr_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* CPU data type based on data bus size. */
|
||||||
|
#if (TOS_CFG_CPU_DATA_SIZE == CPU_WORD_SIZE_32)
|
||||||
|
typedef uint32_t cpu_data_t;
|
||||||
|
#elif (TOS_CFG_CPU_DATA_SIZE == CPU_WORD_SIZE_16)
|
||||||
|
typedef uint16_t cpu_data_t;
|
||||||
|
#else
|
||||||
|
typedef uint8_t cpu_data_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (TOS_CFG_CPU_HRTIMER_EN > 0)
|
||||||
|
#if (TOS_CFG_CPU_HRTIMER_SIZE == CPU_WORD_SIZE_08)
|
||||||
|
typedef uint8_t cpu_hrtimer_t;
|
||||||
|
#elif (TOS_CFG_CPU_HRTIMER_SIZE == CPU_WORD_SIZE_16)
|
||||||
|
typedef uint16_t cpu_hrtimer_t;
|
||||||
|
#elif (TOS_CFG_CPU_HRTIMER_SIZE == CPU_WORD_SIZE_64)
|
||||||
|
typedef uint64_t cpu_hrtimer_t;
|
||||||
|
#else
|
||||||
|
typedef uint32_t cpu_hrtimer_t;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
typedef uint32_t cpu_hrtimer_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//typedef cpu_addr_t size_t;
|
||||||
|
typedef cpu_addr_t cpu_cpsr_t;
|
||||||
|
|
||||||
|
#endif
|
10
arch/risc-v/common/tos_fault.h
Normal file
10
arch/risc-v/common/tos_fault.h
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
#ifndef _TOS_FAULT_H_
|
||||||
|
#define _TOS_FAULT_H_
|
||||||
|
|
||||||
|
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
|
||||||
|
|
||||||
|
#error "unsupport now"
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _TOS_FAULT_H_ */
|
72
arch/risc-v/rv32i/port.h
Normal file
72
arch/risc-v/rv32i/port.h
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Tencent is pleased to support the open source community by making TencentOS
|
||||||
|
* available.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||||
|
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||||
|
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||||
|
*
|
||||||
|
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||||
|
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||||
|
* License, except for the third-party components listed below which are
|
||||||
|
* subject to different license terms. Your integration of TencentOS into your
|
||||||
|
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||||
|
* as the other licenses applicable to the third-party components included
|
||||||
|
* within TencentOS.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _PORT_H_
|
||||||
|
#define _PORT_H_
|
||||||
|
|
||||||
|
__PORT__ void port_int_disable(void);
|
||||||
|
|
||||||
|
__PORT__ void port_int_enable(void);
|
||||||
|
|
||||||
|
__PORT__ cpu_cpsr_t port_cpsr_save(void);
|
||||||
|
|
||||||
|
__PORT__ void port_cpsr_restore(cpu_cpsr_t cpsr);
|
||||||
|
|
||||||
|
__PORT__ void port_cpu_reset(void);
|
||||||
|
|
||||||
|
__PORT__ void port_sched_start(void) __NO_RETURN__;
|
||||||
|
|
||||||
|
__PORT__ void port_context_switch(void);
|
||||||
|
|
||||||
|
__PORT__ void port_irq_context_switch(void);
|
||||||
|
|
||||||
|
__PORT__ void port_systick_config(uint32_t cycle_per_tick);
|
||||||
|
|
||||||
|
__PORT__ void port_systick_priority_set(uint32_t prio);
|
||||||
|
|
||||||
|
#if TOS_CFG_TICKLESS_EN > 0u
|
||||||
|
|
||||||
|
__PORT__ void port_systick_resume(void);
|
||||||
|
|
||||||
|
__PORT__ void port_systick_suspend(void);
|
||||||
|
|
||||||
|
__PORT__ void port_systick_reload(uint32_t cycle_per_tick);
|
||||||
|
|
||||||
|
__PORT__ void port_systick_pending_reset(void);
|
||||||
|
|
||||||
|
__PORT__ k_time_t port_systick_max_delay_millisecond(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if TOS_CFG_PWR_MGR_EN > 0u
|
||||||
|
|
||||||
|
__PORT__ void port_sleep_mode_enter(void);
|
||||||
|
|
||||||
|
__PORT__ void port_stop_mode_enter(void);
|
||||||
|
|
||||||
|
__PORT__ void port_standby_mode_enter(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#if TOS_CFG_FAULT_BACKTRACE_EN > 0u
|
||||||
|
__PORT__ void HardFault_Handler(void);
|
||||||
|
|
||||||
|
__PORT__ void port_fault_diagnosis(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _PORT_H_ */
|
148
arch/risc-v/rv32i/port_c.c
Normal file
148
arch/risc-v/rv32i/port_c.c
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
/*
|
||||||
|
* port_c.c
|
||||||
|
*
|
||||||
|
* Created on: Sep 9, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
#include "riscv_encoding.h"
|
||||||
|
#include <tos.h>
|
||||||
|
#define CLINT_CTRL_ADDR 0x2000000
|
||||||
|
#define CLINT_MSIP 0x0000
|
||||||
|
#define CLINT_MTIMECMP 0x4000
|
||||||
|
#define CLINT_MTIME 0xBFF8
|
||||||
|
|
||||||
|
|
||||||
|
static uint32_t mtime_lo(void)
|
||||||
|
{
|
||||||
|
return *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static uint32_t mtime_hi(void)
|
||||||
|
{
|
||||||
|
return *(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIME + 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint64_t get_mtime_val()
|
||||||
|
{
|
||||||
|
while (1) {
|
||||||
|
uint32_t hi = mtime_hi();
|
||||||
|
uint32_t lo = mtime_lo();
|
||||||
|
uint32_t nhi = mtime_hi();
|
||||||
|
if (hi == nhi) {
|
||||||
|
return (((uint64_t)hi) << 32) | lo;
|
||||||
|
} {
|
||||||
|
uint32_t a = hi;
|
||||||
|
uint32_t b = nhi;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_mtimecmp_lo(uint32_t v)
|
||||||
|
{
|
||||||
|
*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP) = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_mtimecmp_hi(uint32_t v)
|
||||||
|
{
|
||||||
|
*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 4) = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
void set_mtimecmp_val(uint64_t v)
|
||||||
|
{
|
||||||
|
uint32_t hi = (v >> 32) & 0xFFFFFFFF;
|
||||||
|
uint32_t lo = (v >> 0) & 0xFFFFFFFF;
|
||||||
|
set_mtimecmp_lo(0xFFFFFFFF); // No smaller than old value.
|
||||||
|
set_mtimecmp_hi(hi); // No smaller than new value.
|
||||||
|
set_mtimecmp_lo(lo); // New value.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
__PORT__ void port_systick_config(uint32_t cycle_per_tick)
|
||||||
|
{
|
||||||
|
#if 0
|
||||||
|
asm("csrc mie, %0"::"r"(MIP_MTIP));
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
uint64_t mtime = get_mtime_val();
|
||||||
|
#else
|
||||||
|
static uint64_t last_mtime = 0;
|
||||||
|
if(last_mtime == 0) {
|
||||||
|
last_mtime = get_mtime_val();
|
||||||
|
}
|
||||||
|
uint64_t mtime = get_mtime_val();
|
||||||
|
if((mtime - last_mtime)/cycle_per_tick >= 4) {
|
||||||
|
mtime = last_mtime+2*cycle_per_tick;
|
||||||
|
}
|
||||||
|
last_mtime = mtime;
|
||||||
|
#endif
|
||||||
|
uint64_t mtimecmp;
|
||||||
|
do {
|
||||||
|
tick_inc();
|
||||||
|
mtimecmp = ((uint64_t)tos_get_tick())* cycle_per_tick;
|
||||||
|
} while(mtimecmp <= mtime);
|
||||||
|
|
||||||
|
set_mtimecmp_val(mtimecmp);
|
||||||
|
|
||||||
|
asm("csrs mie, %0"::"r"(MIP_MTIP));
|
||||||
|
#endif
|
||||||
|
#if 0
|
||||||
|
clear_csr(mie, MIP_MTIP);
|
||||||
|
static uint64_t then = 0;
|
||||||
|
|
||||||
|
volatile uint64_t * mtime = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIME);
|
||||||
|
volatile uint64_t * mtimecmp = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIMECMP);
|
||||||
|
if(then != 0) {
|
||||||
|
//next timer irq is 1 second from previous
|
||||||
|
then += 1*cycle_per_tick;
|
||||||
|
} else{ //first time setting the timer
|
||||||
|
uint64_t now = *mtime;
|
||||||
|
then = now + 1*cycle_per_tick;
|
||||||
|
}
|
||||||
|
*mtimecmp = then;
|
||||||
|
|
||||||
|
set_csr(mie, MIP_MTIP);
|
||||||
|
#endif
|
||||||
|
//asm("csrc mie, %0"::"r"(MIP_MTIP));
|
||||||
|
#if 0
|
||||||
|
uint64_t next_tick = get_mtime_val();
|
||||||
|
next_tick += cycle_per_tick;
|
||||||
|
set_mtimecmp_val(next_tick);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
uint64_t new_tick = get_mtime_val() + cycle_per_tick;
|
||||||
|
uint64_t tick = 0;
|
||||||
|
if(new_tick - next_tick > 50000) {
|
||||||
|
tick = get_mtime_val() + cycle_per_tick;
|
||||||
|
}
|
||||||
|
next_tick = new_tick;
|
||||||
|
set_mtimecmp_val(next_tick);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
// this is illegal in ricsv-32
|
||||||
|
// it cost cpu read two times, first mtime_lo and then mtime_hi
|
||||||
|
// if mtime_lo == 0xFFFFFFFF and mtime_hi = 0 at first read
|
||||||
|
// then mtime_lo == 0 and mtime_hi = 1 at next read
|
||||||
|
// the result will be 0x1FFFFFFFF, not 0x100000000
|
||||||
|
//*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 4) = 0xFFFFFFFF;
|
||||||
|
//*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 0) = 0xFFFFFFFF;
|
||||||
|
|
||||||
|
uint64_t mtime = *(volatile uint64_t *)(CLINT_CTRL_ADDR + CLINT_MTIME);
|
||||||
|
|
||||||
|
mtime += cycle_per_tick;
|
||||||
|
|
||||||
|
*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 4) = (mtime >> 32) & 0xFFFFFFFF;
|
||||||
|
asm("csrc mip, %0"::"r"(MIP_MTIP));
|
||||||
|
*(volatile uint32_t *)(CLINT_CTRL_ADDR + CLINT_MTIMECMP + 0) = (mtime >> 0) & 0xFFFFFFFF;
|
||||||
|
//asm("csrc mip, %0"::"r"(MIP_MTIP));
|
||||||
|
#endif
|
||||||
|
//asm("csrs mie, %0"::"r"(MIP_MTIP));
|
||||||
|
}
|
||||||
|
|
||||||
|
__PORT__ void port_systick_priority_set(uint32_t prio)
|
||||||
|
{
|
||||||
|
//NVIC_SetPriority(SysTick_IRQn, prio);
|
||||||
|
}
|
27
arch/risc-v/rv32i/port_config.h
Normal file
27
arch/risc-v/rv32i/port_config.h
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
/*----------------------------------------------------------------------------
|
||||||
|
* Tencent is pleased to support the open source community by making TencentOS
|
||||||
|
* available.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2019 THL A29 Limited, a Tencent company. All rights reserved.
|
||||||
|
* If you have downloaded a copy of the TencentOS binary from Tencent, please
|
||||||
|
* note that the TencentOS binary is licensed under the BSD 3-Clause License.
|
||||||
|
*
|
||||||
|
* If you have downloaded a copy of the TencentOS source code from Tencent,
|
||||||
|
* please note that TencentOS source code is licensed under the BSD 3-Clause
|
||||||
|
* License, except for the third-party components listed below which are
|
||||||
|
* subject to different license terms. Your integration of TencentOS into your
|
||||||
|
* own projects may require compliance with the BSD 3-Clause License, as well
|
||||||
|
* as the other licenses applicable to the third-party components included
|
||||||
|
* within TencentOS.
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _PORT_CONFIG_H_
|
||||||
|
#define _PORT_CONFIG_H_
|
||||||
|
|
||||||
|
#define TOS_CFG_CPU_ADDR_SIZE CPU_WORD_SIZE_32
|
||||||
|
#define TOS_CFG_CPU_DATA_SIZE CPU_WORD_SIZE_32
|
||||||
|
#define TOS_CFG_CPU_STK_GROWTH CPU_STK_GROWTH_DESCENDING
|
||||||
|
#define TOS_CFG_CPU_HRTIMER_EN 0u
|
||||||
|
#define TOS_CFG_CPU_LEAD_ZEROS_ASM_PRESENT 0u
|
||||||
|
|
||||||
|
#endif /* _PORT_CONFIG_H_ */
|
407
arch/risc-v/rv32i/port_s.S
Normal file
407
arch/risc-v/rv32i/port_s.S
Normal file
@@ -0,0 +1,407 @@
|
|||||||
|
.global port_int_disable
|
||||||
|
.global port_int_enable
|
||||||
|
|
||||||
|
.global port_cpsr_save
|
||||||
|
.global port_cpsr_restore
|
||||||
|
|
||||||
|
.global port_sched_start
|
||||||
|
.global port_context_switch
|
||||||
|
.global port_irq_context_switch
|
||||||
|
|
||||||
|
#include "riscv_encoding.h"
|
||||||
|
|
||||||
|
.text
|
||||||
|
.align 2
|
||||||
|
|
||||||
|
.type port_int_disable, %function
|
||||||
|
port_int_disable:
|
||||||
|
csrci mstatus, MSTATUS_MIE
|
||||||
|
ret
|
||||||
|
|
||||||
|
.type port_int_enable, %function
|
||||||
|
port_int_enable:
|
||||||
|
csrsi mstatus, MSTATUS_MIE
|
||||||
|
ret
|
||||||
|
|
||||||
|
.type port_cpsr_save, %function
|
||||||
|
port_cpsr_save:
|
||||||
|
csrrci a0, mstatus, MSTATUS_MIE
|
||||||
|
#csrrci a0, mstatus, MSTATUS_MPIE
|
||||||
|
ret
|
||||||
|
|
||||||
|
.type port_cpsr_restore, %function
|
||||||
|
port_cpsr_restore:
|
||||||
|
csrw mstatus, a0
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
#define REGBYTES 4
|
||||||
|
#define LOAD lw
|
||||||
|
#define STORE sw
|
||||||
|
.extern k_curr_task
|
||||||
|
.type port_sched_start, %function
|
||||||
|
port_sched_start:
|
||||||
|
// enable timer interrupt
|
||||||
|
li t0, MIE_MTIE
|
||||||
|
csrs mie, t0
|
||||||
|
|
||||||
|
la t0, k_curr_task // t0 = &k_curr_task
|
||||||
|
LOAD t0, (t0) // t0 = &(k_curr_task->sp)
|
||||||
|
LOAD sp, (t0) // k_curr_task->sp = sp
|
||||||
|
|
||||||
|
// save sp
|
||||||
|
addi t1, sp, 32*REGBYTES
|
||||||
|
STORE t1, (t0)
|
||||||
|
|
||||||
|
LOAD t0, 0*REGBYTES(sp)
|
||||||
|
csrw mepc, t0
|
||||||
|
|
||||||
|
LOAD t0, 1*REGBYTES(sp)
|
||||||
|
csrw mstatus, t0
|
||||||
|
|
||||||
|
LOAD x1, 2*REGBYTES(sp)
|
||||||
|
LOAD x3, 3*REGBYTES(sp)
|
||||||
|
LOAD x4, 4*REGBYTES(sp)
|
||||||
|
LOAD x5, 5*REGBYTES(sp)
|
||||||
|
LOAD x6, 6*REGBYTES(sp)
|
||||||
|
LOAD x7, 7*REGBYTES(sp)
|
||||||
|
LOAD x8, 8*REGBYTES(sp)
|
||||||
|
LOAD x9, 9*REGBYTES(sp)
|
||||||
|
LOAD x10, 10*REGBYTES(sp)
|
||||||
|
LOAD x11, 11*REGBYTES(sp)
|
||||||
|
LOAD x12, 12*REGBYTES(sp)
|
||||||
|
LOAD x13, 13*REGBYTES(sp)
|
||||||
|
LOAD x14, 14*REGBYTES(sp)
|
||||||
|
LOAD x15, 15*REGBYTES(sp)
|
||||||
|
LOAD x16, 16*REGBYTES(sp)
|
||||||
|
LOAD x17, 17*REGBYTES(sp)
|
||||||
|
LOAD x18, 18*REGBYTES(sp)
|
||||||
|
LOAD x19, 19*REGBYTES(sp)
|
||||||
|
LOAD x20, 20*REGBYTES(sp)
|
||||||
|
LOAD x21, 21*REGBYTES(sp)
|
||||||
|
LOAD x22, 22*REGBYTES(sp)
|
||||||
|
LOAD x23, 23*REGBYTES(sp)
|
||||||
|
LOAD x24, 24*REGBYTES(sp)
|
||||||
|
LOAD x25, 25*REGBYTES(sp)
|
||||||
|
LOAD x26, 26*REGBYTES(sp)
|
||||||
|
LOAD x27, 27*REGBYTES(sp)
|
||||||
|
LOAD x28, 28*REGBYTES(sp)
|
||||||
|
LOAD x29, 29*REGBYTES(sp)
|
||||||
|
LOAD x30, 30*REGBYTES(sp)
|
||||||
|
LOAD x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
addi sp, sp, 32*REGBYTES
|
||||||
|
|
||||||
|
mret
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
.global machine_trap_entry
|
||||||
|
machine_trap_entry:
|
||||||
|
addi sp, sp, -32*REGBYTES
|
||||||
|
STORE x1, 2*REGBYTES(sp)
|
||||||
|
STORE x3, 3*REGBYTES(sp)
|
||||||
|
STORE x4, 4*REGBYTES(sp)
|
||||||
|
STORE x5, 5*REGBYTES(sp)
|
||||||
|
STORE x6, 6*REGBYTES(sp)
|
||||||
|
STORE x7, 7*REGBYTES(sp)
|
||||||
|
STORE x8, 8*REGBYTES(sp)
|
||||||
|
STORE x9, 9*REGBYTES(sp)
|
||||||
|
STORE x10, 10*REGBYTES(sp)
|
||||||
|
STORE x11, 11*REGBYTES(sp)
|
||||||
|
STORE x12, 12*REGBYTES(sp)
|
||||||
|
STORE x13, 13*REGBYTES(sp)
|
||||||
|
STORE x14, 14*REGBYTES(sp)
|
||||||
|
STORE x15, 15*REGBYTES(sp)
|
||||||
|
STORE x16, 16*REGBYTES(sp)
|
||||||
|
STORE x17, 17*REGBYTES(sp)
|
||||||
|
STORE x18, 18*REGBYTES(sp)
|
||||||
|
STORE x19, 19*REGBYTES(sp)
|
||||||
|
STORE x20, 20*REGBYTES(sp)
|
||||||
|
STORE x21, 21*REGBYTES(sp)
|
||||||
|
STORE x22, 22*REGBYTES(sp)
|
||||||
|
STORE x23, 23*REGBYTES(sp)
|
||||||
|
STORE x24, 24*REGBYTES(sp)
|
||||||
|
STORE x25, 25*REGBYTES(sp)
|
||||||
|
STORE x26, 26*REGBYTES(sp)
|
||||||
|
STORE x27, 27*REGBYTES(sp)
|
||||||
|
STORE x28, 28*REGBYTES(sp)
|
||||||
|
STORE x29, 29*REGBYTES(sp)
|
||||||
|
STORE x30, 30*REGBYTES(sp)
|
||||||
|
STORE x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
//li t0, MSTATUS_MPP | MSTATUS_MPIE // acutally MPIE is not need
|
||||||
|
csrr t0, mstatus
|
||||||
|
STORE t0, 1*REGBYTES(sp)
|
||||||
|
|
||||||
|
csrr t0, mepc // just save information for handler
|
||||||
|
STORE t0, 0*REGBYTES(sp)
|
||||||
|
|
||||||
|
|
||||||
|
// save sp to k_curr_task.sp
|
||||||
|
la t0, k_curr_task // t0 = &k_curr_task
|
||||||
|
LOAD t1, (t0)
|
||||||
|
STORE sp, (t1)
|
||||||
|
|
||||||
|
csrr a0, mcause
|
||||||
|
mv a1, sp
|
||||||
|
bltz a0, irq
|
||||||
|
call cpu_trap_entry
|
||||||
|
j restore
|
||||||
|
irq:
|
||||||
|
slli a0, a0, 1
|
||||||
|
srli a0, a0, 1
|
||||||
|
call cpu_irq_entry
|
||||||
|
restore:
|
||||||
|
LOAD t0, 0*REGBYTES(sp)
|
||||||
|
csrw mepc, t0
|
||||||
|
|
||||||
|
LOAD t0, 1*REGBYTES(sp)
|
||||||
|
csrw mstatus, t0
|
||||||
|
#else
|
||||||
|
// for debug timer interrupt only
|
||||||
|
csrr a0, mcause
|
||||||
|
slli a0, a0, 1
|
||||||
|
srli a0, a0, 1
|
||||||
|
call cpu_irq_entry
|
||||||
|
#endif
|
||||||
|
LOAD x1, 2*REGBYTES(sp)
|
||||||
|
LOAD x3, 3*REGBYTES(sp)
|
||||||
|
LOAD x4, 4*REGBYTES(sp)
|
||||||
|
LOAD x5, 5*REGBYTES(sp)
|
||||||
|
LOAD x6, 6*REGBYTES(sp)
|
||||||
|
LOAD x7, 7*REGBYTES(sp)
|
||||||
|
LOAD x8, 8*REGBYTES(sp)
|
||||||
|
LOAD x9, 9*REGBYTES(sp)
|
||||||
|
LOAD x10, 10*REGBYTES(sp)
|
||||||
|
LOAD x11, 11*REGBYTES(sp)
|
||||||
|
LOAD x12, 12*REGBYTES(sp)
|
||||||
|
LOAD x13, 13*REGBYTES(sp)
|
||||||
|
LOAD x14, 14*REGBYTES(sp)
|
||||||
|
LOAD x15, 15*REGBYTES(sp)
|
||||||
|
LOAD x16, 16*REGBYTES(sp)
|
||||||
|
LOAD x17, 17*REGBYTES(sp)
|
||||||
|
LOAD x18, 18*REGBYTES(sp)
|
||||||
|
LOAD x19, 19*REGBYTES(sp)
|
||||||
|
LOAD x20, 20*REGBYTES(sp)
|
||||||
|
LOAD x21, 21*REGBYTES(sp)
|
||||||
|
LOAD x22, 22*REGBYTES(sp)
|
||||||
|
LOAD x23, 23*REGBYTES(sp)
|
||||||
|
LOAD x24, 24*REGBYTES(sp)
|
||||||
|
LOAD x25, 25*REGBYTES(sp)
|
||||||
|
LOAD x26, 26*REGBYTES(sp)
|
||||||
|
LOAD x27, 27*REGBYTES(sp)
|
||||||
|
LOAD x28, 28*REGBYTES(sp)
|
||||||
|
LOAD x29, 29*REGBYTES(sp)
|
||||||
|
LOAD x30, 30*REGBYTES(sp)
|
||||||
|
LOAD x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
addi sp, sp, 32*REGBYTES
|
||||||
|
|
||||||
|
mret
|
||||||
|
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
.type port_context_switch, %function
|
||||||
|
port_context_switch:
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
addi sp, sp, -32*REGBYTES
|
||||||
|
STORE x1, 2*REGBYTES(sp)
|
||||||
|
STORE x3, 3*REGBYTES(sp)
|
||||||
|
STORE x4, 4*REGBYTES(sp)
|
||||||
|
STORE x5, 5*REGBYTES(sp)
|
||||||
|
STORE x6, 6*REGBYTES(sp)
|
||||||
|
STORE x7, 7*REGBYTES(sp)
|
||||||
|
STORE x8, 8*REGBYTES(sp)
|
||||||
|
STORE x9, 9*REGBYTES(sp)
|
||||||
|
STORE x10, 10*REGBYTES(sp)
|
||||||
|
STORE x11, 11*REGBYTES(sp)
|
||||||
|
STORE x12, 12*REGBYTES(sp)
|
||||||
|
STORE x13, 13*REGBYTES(sp)
|
||||||
|
STORE x14, 14*REGBYTES(sp)
|
||||||
|
STORE x15, 15*REGBYTES(sp)
|
||||||
|
STORE x16, 16*REGBYTES(sp)
|
||||||
|
STORE x17, 17*REGBYTES(sp)
|
||||||
|
STORE x18, 18*REGBYTES(sp)
|
||||||
|
STORE x19, 19*REGBYTES(sp)
|
||||||
|
STORE x20, 20*REGBYTES(sp)
|
||||||
|
STORE x21, 21*REGBYTES(sp)
|
||||||
|
STORE x22, 22*REGBYTES(sp)
|
||||||
|
STORE x23, 23*REGBYTES(sp)
|
||||||
|
STORE x24, 24*REGBYTES(sp)
|
||||||
|
STORE x25, 25*REGBYTES(sp)
|
||||||
|
STORE x26, 26*REGBYTES(sp)
|
||||||
|
STORE x27, 27*REGBYTES(sp)
|
||||||
|
STORE x28, 28*REGBYTES(sp)
|
||||||
|
STORE x29, 29*REGBYTES(sp)
|
||||||
|
STORE x30, 30*REGBYTES(sp)
|
||||||
|
STORE x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
li t0, MSTATUS_MPP // force use machine mode
|
||||||
|
csrr t1, mstatus
|
||||||
|
and t1, t1, MSTATUS_MIE
|
||||||
|
beqz t1, save_mstatus
|
||||||
|
or t0, t0, MSTATUS_MPIE
|
||||||
|
save_mstatus:
|
||||||
|
STORE t0, 1*REGBYTES(sp)
|
||||||
|
la t0, port_context_switch_return // just save information for handler
|
||||||
|
STORE t0, 0*REGBYTES(sp)
|
||||||
|
|
||||||
|
// save sp to k_curr_task.sp
|
||||||
|
la t0, k_curr_task // t0 = &k_curr_task
|
||||||
|
LOAD t1, (t0)
|
||||||
|
STORE sp, (t1)
|
||||||
|
|
||||||
|
// k_curr_task = k_next_task
|
||||||
|
la t1, k_next_task // t1 = &k_next_task
|
||||||
|
LOAD t1, (t1) // t1 = k_next_task
|
||||||
|
STORE t1, (t0)
|
||||||
|
|
||||||
|
// load sp from k_next_task.sp
|
||||||
|
LOAD sp, (t1)
|
||||||
|
|
||||||
|
LOAD t0, 0*REGBYTES(sp)
|
||||||
|
csrw mepc, t0
|
||||||
|
|
||||||
|
LOAD t0, 1*REGBYTES(sp)
|
||||||
|
csrw mstatus, t0
|
||||||
|
|
||||||
|
LOAD x1, 2*REGBYTES(sp)
|
||||||
|
LOAD x3, 3*REGBYTES(sp)
|
||||||
|
LOAD x4, 4*REGBYTES(sp)
|
||||||
|
LOAD x5, 5*REGBYTES(sp)
|
||||||
|
LOAD x6, 6*REGBYTES(sp)
|
||||||
|
LOAD x7, 7*REGBYTES(sp)
|
||||||
|
LOAD x8, 8*REGBYTES(sp)
|
||||||
|
LOAD x9, 9*REGBYTES(sp)
|
||||||
|
LOAD x10, 10*REGBYTES(sp)
|
||||||
|
LOAD x11, 11*REGBYTES(sp)
|
||||||
|
LOAD x12, 12*REGBYTES(sp)
|
||||||
|
LOAD x13, 13*REGBYTES(sp)
|
||||||
|
LOAD x14, 14*REGBYTES(sp)
|
||||||
|
LOAD x15, 15*REGBYTES(sp)
|
||||||
|
LOAD x16, 16*REGBYTES(sp)
|
||||||
|
LOAD x17, 17*REGBYTES(sp)
|
||||||
|
LOAD x18, 18*REGBYTES(sp)
|
||||||
|
LOAD x19, 19*REGBYTES(sp)
|
||||||
|
LOAD x20, 20*REGBYTES(sp)
|
||||||
|
LOAD x21, 21*REGBYTES(sp)
|
||||||
|
LOAD x22, 22*REGBYTES(sp)
|
||||||
|
LOAD x23, 23*REGBYTES(sp)
|
||||||
|
LOAD x24, 24*REGBYTES(sp)
|
||||||
|
LOAD x25, 25*REGBYTES(sp)
|
||||||
|
LOAD x26, 26*REGBYTES(sp)
|
||||||
|
LOAD x27, 27*REGBYTES(sp)
|
||||||
|
LOAD x28, 28*REGBYTES(sp)
|
||||||
|
LOAD x29, 29*REGBYTES(sp)
|
||||||
|
LOAD x30, 30*REGBYTES(sp)
|
||||||
|
LOAD x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
addi sp, sp, 32*REGBYTES
|
||||||
|
|
||||||
|
mret
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
port_context_switch_return:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
.align 2
|
||||||
|
.type port_irq_context_switch, %function
|
||||||
|
port_irq_context_switch:
|
||||||
|
addi sp, sp, -32*REGBYTES
|
||||||
|
STORE x1, 2*REGBYTES(sp)
|
||||||
|
STORE x3, 3*REGBYTES(sp)
|
||||||
|
STORE x4, 4*REGBYTES(sp)
|
||||||
|
STORE x5, 5*REGBYTES(sp)
|
||||||
|
STORE x6, 6*REGBYTES(sp)
|
||||||
|
STORE x7, 7*REGBYTES(sp)
|
||||||
|
STORE x8, 8*REGBYTES(sp)
|
||||||
|
STORE x9, 9*REGBYTES(sp)
|
||||||
|
STORE x10, 10*REGBYTES(sp)
|
||||||
|
STORE x11, 11*REGBYTES(sp)
|
||||||
|
STORE x12, 12*REGBYTES(sp)
|
||||||
|
STORE x13, 13*REGBYTES(sp)
|
||||||
|
STORE x14, 14*REGBYTES(sp)
|
||||||
|
STORE x15, 15*REGBYTES(sp)
|
||||||
|
STORE x16, 16*REGBYTES(sp)
|
||||||
|
STORE x17, 17*REGBYTES(sp)
|
||||||
|
STORE x18, 18*REGBYTES(sp)
|
||||||
|
STORE x19, 19*REGBYTES(sp)
|
||||||
|
STORE x20, 20*REGBYTES(sp)
|
||||||
|
STORE x21, 21*REGBYTES(sp)
|
||||||
|
STORE x22, 22*REGBYTES(sp)
|
||||||
|
STORE x23, 23*REGBYTES(sp)
|
||||||
|
STORE x24, 24*REGBYTES(sp)
|
||||||
|
STORE x25, 25*REGBYTES(sp)
|
||||||
|
STORE x26, 26*REGBYTES(sp)
|
||||||
|
STORE x27, 27*REGBYTES(sp)
|
||||||
|
STORE x28, 28*REGBYTES(sp)
|
||||||
|
STORE x29, 29*REGBYTES(sp)
|
||||||
|
STORE x30, 30*REGBYTES(sp)
|
||||||
|
STORE x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
li t0, MSTATUS_MPP
|
||||||
|
STORE t0, 1*REGBYTES(sp)
|
||||||
|
la t0, irq_context_return
|
||||||
|
STORE t0, 0*REGBYTES(sp)
|
||||||
|
|
||||||
|
// save sp to k_curr_task.sp
|
||||||
|
la t0, k_curr_task // t0 = &k_curr_task
|
||||||
|
LOAD t1, (t0)
|
||||||
|
STORE sp, (t1)
|
||||||
|
|
||||||
|
// k_curr_task = k_next_task
|
||||||
|
la t1, k_next_task // t1 = &k_next_task
|
||||||
|
LOAD t1, (t1) // t1 = k_next_task
|
||||||
|
STORE t1, (t0)
|
||||||
|
|
||||||
|
// load sp from k_next_task.sp
|
||||||
|
LOAD sp, (t1)
|
||||||
|
|
||||||
|
LOAD t0, 1*REGBYTES(sp)
|
||||||
|
csrw mstatus, t0
|
||||||
|
|
||||||
|
LOAD t0, 0*REGBYTES(sp)
|
||||||
|
csrw mepc, t0
|
||||||
|
|
||||||
|
LOAD x1, 2*REGBYTES(sp)
|
||||||
|
LOAD x3, 3*REGBYTES(sp)
|
||||||
|
LOAD x4, 4*REGBYTES(sp)
|
||||||
|
LOAD x5, 5*REGBYTES(sp)
|
||||||
|
LOAD x6, 6*REGBYTES(sp)
|
||||||
|
LOAD x7, 7*REGBYTES(sp)
|
||||||
|
LOAD x8, 8*REGBYTES(sp)
|
||||||
|
LOAD x9, 9*REGBYTES(sp)
|
||||||
|
LOAD x10, 10*REGBYTES(sp)
|
||||||
|
LOAD x11, 11*REGBYTES(sp)
|
||||||
|
LOAD x12, 12*REGBYTES(sp)
|
||||||
|
LOAD x13, 13*REGBYTES(sp)
|
||||||
|
LOAD x14, 14*REGBYTES(sp)
|
||||||
|
LOAD x15, 15*REGBYTES(sp)
|
||||||
|
LOAD x16, 16*REGBYTES(sp)
|
||||||
|
LOAD x17, 17*REGBYTES(sp)
|
||||||
|
LOAD x18, 18*REGBYTES(sp)
|
||||||
|
LOAD x19, 19*REGBYTES(sp)
|
||||||
|
LOAD x20, 20*REGBYTES(sp)
|
||||||
|
LOAD x21, 21*REGBYTES(sp)
|
||||||
|
LOAD x22, 22*REGBYTES(sp)
|
||||||
|
LOAD x23, 23*REGBYTES(sp)
|
||||||
|
LOAD x24, 24*REGBYTES(sp)
|
||||||
|
LOAD x25, 25*REGBYTES(sp)
|
||||||
|
LOAD x26, 26*REGBYTES(sp)
|
||||||
|
LOAD x27, 27*REGBYTES(sp)
|
||||||
|
LOAD x28, 28*REGBYTES(sp)
|
||||||
|
LOAD x29, 29*REGBYTES(sp)
|
||||||
|
LOAD x30, 30*REGBYTES(sp)
|
||||||
|
LOAD x31, 31*REGBYTES(sp)
|
||||||
|
|
||||||
|
|
||||||
|
addi sp, sp, 32*REGBYTES
|
||||||
|
|
||||||
|
mret
|
||||||
|
|
||||||
|
|
||||||
|
irq_context_return:
|
||||||
|
ret
|
209
arch/risc-v/rv32i/start.S
Normal file
209
arch/risc-v/rv32i/start.S
Normal file
@@ -0,0 +1,209 @@
|
|||||||
|
// See LICENSE for license details.
|
||||||
|
|
||||||
|
#include "riscv_encoding.h"
|
||||||
|
|
||||||
|
.section .text.entry
|
||||||
|
.globl _start
|
||||||
|
.type _start,@function
|
||||||
|
_start:
|
||||||
|
csrc mstatus, MSTATUS_MIE
|
||||||
|
csrw mie, 0
|
||||||
|
|
||||||
|
la t0, machine_trap_entry
|
||||||
|
csrw mtvec, t0
|
||||||
|
#if 1
|
||||||
|
// before kernel run, the stack is unused
|
||||||
|
// so just borrow to use
|
||||||
|
la t0, k_idle_task_stk_addr
|
||||||
|
lw t1, k_idle_task_stk_size
|
||||||
|
add sp, t0, t1
|
||||||
|
#else
|
||||||
|
// uncomment in link.ld
|
||||||
|
la sp, _stack_top
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Load data section */
|
||||||
|
la a0, _load_data
|
||||||
|
la a1, _data
|
||||||
|
la a2, _edata
|
||||||
|
bgeu a1, a2, begin_clear_bss
|
||||||
|
clear_data:
|
||||||
|
lw t0, (a0)
|
||||||
|
sw t0, (a1)
|
||||||
|
addi a0, a0, 4
|
||||||
|
addi a1, a1, 4
|
||||||
|
bltu a1, a2, clear_data
|
||||||
|
|
||||||
|
begin_clear_bss:
|
||||||
|
// clear bss section
|
||||||
|
la a0, _bss
|
||||||
|
la a1, _ebss
|
||||||
|
bgeu a0, a1, init_finish
|
||||||
|
clear_bss:
|
||||||
|
sw zero, (a0)
|
||||||
|
addi a0, a0, 4
|
||||||
|
bltu a0, a1, clear_bss
|
||||||
|
init_finish:
|
||||||
|
call main
|
||||||
|
__die:
|
||||||
|
j __die
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.section .text
|
||||||
|
.weak eclic_msip_handler
|
||||||
|
.weak eclic_mtip_handler
|
||||||
|
.weak SysTick_IRQHandler
|
||||||
|
.weak eclic_bwei_handler
|
||||||
|
.weak eclic_pmovi_handler
|
||||||
|
.weak WWDGT_IRQHandler
|
||||||
|
.weak LVD_IRQHandler
|
||||||
|
.weak TAMPER_IRQHandler
|
||||||
|
.weak RTC_IRQHandler
|
||||||
|
.weak FMC_IRQHandler
|
||||||
|
.weak RCU_IRQHandler
|
||||||
|
.weak EXTI0_IRQHandler
|
||||||
|
.weak EXTI1_IRQHandler
|
||||||
|
.weak EXTI2_IRQHandler
|
||||||
|
.weak EXTI3_IRQHandler
|
||||||
|
.weak EXTI4_IRQHandler
|
||||||
|
.weak DMA0_Channel0_IRQHandler
|
||||||
|
.weak DMA0_Channel1_IRQHandler
|
||||||
|
.weak DMA0_Channel2_IRQHandler
|
||||||
|
.weak DMA0_Channel3_IRQHandler
|
||||||
|
.weak DMA0_Channel4_IRQHandler
|
||||||
|
.weak DMA0_Channel5_IRQHandler
|
||||||
|
.weak DMA0_Channel6_IRQHandler
|
||||||
|
.weak ADC0_1_IRQHandler
|
||||||
|
.weak CAN0_TX_IRQHandler
|
||||||
|
.weak CAN0_RX0_IRQHandler
|
||||||
|
.weak CAN0_RX1_IRQHandler
|
||||||
|
.weak CAN0_EWMC_IRQHandler
|
||||||
|
.weak EXTI5_9_IRQHandler
|
||||||
|
.weak TIMER0_BRK_IRQHandler
|
||||||
|
.weak TIMER0_UP_IRQHandler
|
||||||
|
.weak TIMER0_TRG_CMT_IRQHandler
|
||||||
|
.weak TIMER0_Channel_IRQHandler
|
||||||
|
.weak TIMER1_IRQHandler
|
||||||
|
.weak TIMER2_IRQHandler
|
||||||
|
.weak TIMER3_IRQHandler
|
||||||
|
.weak I2C0_EV_IRQHandler
|
||||||
|
.weak I2C0_ER_IRQHandler
|
||||||
|
.weak I2C1_EV_IRQHandler
|
||||||
|
.weak I2C1_ER_IRQHandler
|
||||||
|
.weak SPI0_IRQHandler
|
||||||
|
.weak SPI1_IRQHandler
|
||||||
|
.weak USART0_IRQHandler
|
||||||
|
.weak USART1_IRQHandler
|
||||||
|
.weak USART2_IRQHandler
|
||||||
|
.weak EXTI10_15_IRQHandler
|
||||||
|
.weak RTC_Alarm_IRQHandler
|
||||||
|
.weak USBFS_WKUP_IRQHandler
|
||||||
|
.weak EXMC_IRQHandler
|
||||||
|
.weak TIMER4_IRQHandler
|
||||||
|
.weak SPI2_IRQHandler
|
||||||
|
.weak UART3_IRQHandler
|
||||||
|
.weak UART4_IRQHandler
|
||||||
|
.weak TIMER5_IRQHandler
|
||||||
|
.weak TIMER6_IRQHandler
|
||||||
|
.weak DMA1_Channel0_IRQHandler
|
||||||
|
.weak DMA1_Channel1_IRQHandler
|
||||||
|
.weak DMA1_Channel2_IRQHandler
|
||||||
|
.weak DMA1_Channel3_IRQHandler
|
||||||
|
.weak DMA1_Channel4_IRQHandler
|
||||||
|
.weak CAN1_TX_IRQHandler
|
||||||
|
.weak CAN1_RX0_IRQHandler
|
||||||
|
.weak CAN1_RX1_IRQHandler
|
||||||
|
.weak CAN1_EWMC_IRQHandler
|
||||||
|
.weak USBFS_IRQHandler
|
||||||
|
|
||||||
|
.global handler_vector_table
|
||||||
|
.align 2
|
||||||
|
handler_vector_table:
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word eclic_msip_handler
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word SysTick_IRQHandler
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word eclic_bwei_handler
|
||||||
|
.word eclic_pmovi_handler
|
||||||
|
.word WWDGT_IRQHandler
|
||||||
|
.word LVD_IRQHandler
|
||||||
|
.word TAMPER_IRQHandler
|
||||||
|
.word RTC_IRQHandler
|
||||||
|
.word FMC_IRQHandler
|
||||||
|
.word RCU_IRQHandler
|
||||||
|
.word EXTI0_IRQHandler
|
||||||
|
.word EXTI1_IRQHandler
|
||||||
|
.word EXTI2_IRQHandler
|
||||||
|
.word EXTI3_IRQHandler
|
||||||
|
.word EXTI4_IRQHandler
|
||||||
|
.word DMA0_Channel0_IRQHandler
|
||||||
|
.word DMA0_Channel1_IRQHandler
|
||||||
|
.word DMA0_Channel2_IRQHandler
|
||||||
|
.word DMA0_Channel3_IRQHandler
|
||||||
|
.word DMA0_Channel4_IRQHandler
|
||||||
|
.word DMA0_Channel5_IRQHandler
|
||||||
|
.word DMA0_Channel6_IRQHandler
|
||||||
|
.word ADC0_1_IRQHandler
|
||||||
|
.word CAN0_TX_IRQHandler
|
||||||
|
.word CAN0_RX0_IRQHandler
|
||||||
|
.word CAN0_RX1_IRQHandler
|
||||||
|
.word CAN0_EWMC_IRQHandler
|
||||||
|
.word EXTI5_9_IRQHandler
|
||||||
|
.word TIMER0_BRK_IRQHandler
|
||||||
|
.word TIMER0_UP_IRQHandler
|
||||||
|
.word TIMER0_TRG_CMT_IRQHandler
|
||||||
|
.word TIMER0_Channel_IRQHandler
|
||||||
|
.word TIMER1_IRQHandler
|
||||||
|
.word TIMER2_IRQHandler
|
||||||
|
.word TIMER3_IRQHandler
|
||||||
|
.word I2C0_EV_IRQHandler
|
||||||
|
.word I2C0_ER_IRQHandler
|
||||||
|
.word I2C1_EV_IRQHandler
|
||||||
|
.word I2C1_ER_IRQHandler
|
||||||
|
.word SPI0_IRQHandler
|
||||||
|
.word SPI1_IRQHandler
|
||||||
|
.word USART0_IRQHandler
|
||||||
|
.word USART1_IRQHandler
|
||||||
|
.word USART2_IRQHandler
|
||||||
|
.word EXTI10_15_IRQHandler
|
||||||
|
.word RTC_Alarm_IRQHandler
|
||||||
|
.word USBFS_WKUP_IRQHandler
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word EXMC_IRQHandler
|
||||||
|
.word 0
|
||||||
|
.word TIMER4_IRQHandler
|
||||||
|
.word SPI2_IRQHandler
|
||||||
|
.word UART3_IRQHandler
|
||||||
|
.word UART4_IRQHandler
|
||||||
|
.word TIMER5_IRQHandler
|
||||||
|
.word TIMER6_IRQHandler
|
||||||
|
.word DMA1_Channel0_IRQHandler
|
||||||
|
.word DMA1_Channel1_IRQHandler
|
||||||
|
.word DMA1_Channel2_IRQHandler
|
||||||
|
.word DMA1_Channel3_IRQHandler
|
||||||
|
.word DMA1_Channel4_IRQHandler
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
.word CAN1_TX_IRQHandler
|
||||||
|
.word CAN1_RX0_IRQHandler
|
||||||
|
.word CAN1_RX1_IRQHandler
|
||||||
|
.word CAN1_EWMC_IRQHandler
|
||||||
|
.word USBFS_IRQHandler
|
436
board/QEMU_Spike/eclipse/hello_world/.cproject
Normal file
436
board/QEMU_Spike/eclipse/hello_world/.cproject
Normal file
@@ -0,0 +1,436 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
|
||||||
|
<cconfiguration id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145">
|
||||||
|
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||||
|
|
||||||
|
<externalSettings/>
|
||||||
|
|
||||||
|
<extensions>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
</extensions>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
|
||||||
|
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="${cross_rm} -rf" description="" errorParsers="" id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145" name="Debug" optionalBuildProperties="org.eclipse.cdt.docker.launcher.containerbuild.property.selectedvolumes=,org.eclipse.cdt.docker.launcher.containerbuild.property.volumes=" parent="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug">
|
||||||
|
|
||||||
|
<folderInfo id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145." name="/" resourcePath="">
|
||||||
|
|
||||||
|
<toolChain id="ilg.gnumcueclipse.managedbuild.cross.riscv.toolchain.elf.debug.754636791" name="RISC-V Cross GCC" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.toolchain.elf.debug">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createflash.848282623" name="Create flash image" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createflash" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createlisting.595481582" name="Create extended listing" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createlisting" useByScannerDiscovery="false"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.printsize.868050908" name="Print size" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.printsize" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level.1427978636" name="Optimization Level" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level" useByScannerDiscovery="true" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level.none" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.messagelength.1796627081" name="Message length (-fmessage-length=0)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.messagelength" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.signedchar.1606416106" name="'char' is signed (-fsigned-char)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.signedchar" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.functionsections.703964455" name="Function sections (-ffunction-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.functionsections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.datasections.1397913664" name="Data sections (-fdata-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.datasections" useByScannerDiscovery="true" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.level.954686715" name="Debug level" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.level" useByScannerDiscovery="true" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.level.max" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.format.497316309" name="Debug format" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.format" useByScannerDiscovery="true" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.format.default" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.name.1458872672" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.name" useByScannerDiscovery="false" value="GNU MCU RISC-V GCC" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.prefix.1270735469" name="Prefix" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.prefix" useByScannerDiscovery="false" value="riscv-none-embed-" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.c.417258226" name="C compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.c" useByScannerDiscovery="false" value="gcc" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.cpp.671763561" name="C++ compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.cpp" useByScannerDiscovery="false" value="g++" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.ar.2047741564" name="Archiver" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.ar" useByScannerDiscovery="false" value="ar" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objcopy.378641223" name="Hex/Bin converter" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objcopy" useByScannerDiscovery="false" value="objcopy" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objdump.2144714544" name="Listing generator" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objdump" useByScannerDiscovery="false" value="objdump" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.size.800871030" name="Size command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.size" useByScannerDiscovery="false" value="size" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make.1197783454" name="Build command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make" useByScannerDiscovery="false" value="make" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm.811108888" name="Remove command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm" useByScannerDiscovery="false" value="rm" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id.1315380094" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.id" useByScannerDiscovery="false" value="512258282" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base.664875683" name="Architecture" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.base" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.arch.rv32i" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.compressed.110983308" name="Compressed extension (RVC)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.compressed" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer.303741619" name="Integer ABI" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.abi.integer" useByScannerDiscovery="false" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.abi.integer.ilp32" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.syntaxonly.992877146" name="Check syntax only (-fsyntax-only)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.syntaxonly" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.shadow.962874693" name="Warn if shadowed variable (-Wshadow)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.shadow" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.allwarn.1445584792" name="Enable all common warnings (-Wall)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.allwarn" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.nowarn.2009639692" name="Inhibit all warnings (-w)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.warnings.nowarn" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.multiply.616377996" name="Multiply extension (RVM)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.multiply" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.atomic.2036671591" name="Atomic extension (RVA)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.target.isa.atomic" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform.1473950114" isAbstract="false" osList="all" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform"/>
|
||||||
|
|
||||||
|
<builder buildPath="${workspace_loc:/hello_world}/Debug" id="ilg.gnumcueclipse.managedbuild.cross.riscv.builder.1645829934" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.builder"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.1747128168" name="GNU RISC-V Cross Assembler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.usepreprocessor.1300026491" name="Use preprocessor" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.usepreprocessor" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.asmlisting.1334937854" name="Generate assembler listing (-Wa,-adhlns="$@.lst")" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.asmlisting" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths.460479417" name="Include paths (-I)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/arch/risc-v/common}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/arch/risc-v/rv32i}""/>
|
||||||
|
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input.61232272" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.1946709939" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.nostdinc.970373609" name="Do not search system directories (-nostdinc)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.nostdinc" useByScannerDiscovery="true" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.asmlisting.1391481500" name="Generate assembler listing (-Wa,-adhlns="$@.lst")" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.asmlisting" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.paths.293419375" name="Include paths (-I)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.compiler.include.paths" useByScannerDiscovery="true" valueType="includePath">
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/arch/risc-v/rv32i}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/arch/risc-v/common}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/kernel/core/include}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/kernel/pm/include}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/Inc}""/>
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/hello_world/TencentOS_tiny/osal/cmsis_os}""/>
|
||||||
|
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.905374687" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler.1653522407" name="GNU RISC-V Cross C++ Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.2062936500" name="GNU RISC-V Cross C Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections.325992186" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nostart.868590870" name="Do not use standard start files (-nostartfiles)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nostart" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nodeflibs.1901501942" name="Do not use default libraries (-nodefaultlibs)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nodeflibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nostdlibs.1428930283" name="No startup or default libs (-nostdlib)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.nostdlibs" useByScannerDiscovery="false" value="false" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.scriptfile.2128608969" name="Script files (-T)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.scriptfile" useByScannerDiscovery="false" valueType="stringList">
|
||||||
|
|
||||||
|
<listOptionValue builtIn="false" value=""${workspace_loc:/${ProjName}/link.ld}""/>
|
||||||
|
|
||||||
|
</option>
|
||||||
|
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="true" id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.paths.572750103" name="Library search path (-L)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.paths" useByScannerDiscovery="false" valueType="libPaths"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.usenewlibnano.332113925" name="Use newlib-nano (--specs=nano.specs)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.usenewlibnano" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.usenewlibnosys.300868895" name="Do not use syscalls (--specs=nosys.specs)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.usenewlibnosys" useByScannerDiscovery="false" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input.1887775756" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input">
|
||||||
|
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
|
||||||
|
</inputType>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.linker.360508608" name="GNU RISC-V Cross C++ Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.linker">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.cpp.linker.gcsections.34252823" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.archiver.2061182713" name="GNU RISC-V Cross Archiver" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.archiver"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createflash.424039790" name="GNU RISC-V Cross Create Flash Image" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createflash"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createlisting.1466575903" name="GNU RISC-V Cross Create Listing" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createlisting">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.source.1220708177" name="Display source (--source|-S)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.source" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.allheaders.1571158768" name="Display all headers (--all-headers|-x)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.allheaders" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.demangle.1801565950" name="Demangle names (--demangle|-C)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.demangle" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.linenumbers.435376144" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.linenumbers" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.wide.463048551" name="Wide lines (--wide|-w)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.wide" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.printsize.2000008806" name="GNU RISC-V Cross Print Size" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.printsize">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.printsize.format.976852019" name="Size format" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.printsize.format" useByScannerDiscovery="false"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
</toolChain>
|
||||||
|
|
||||||
|
</folderInfo>
|
||||||
|
|
||||||
|
<sourceEntries>
|
||||||
|
|
||||||
|
<entry excluding="TencentOS_tiny|Src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
||||||
|
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH" kind="sourcePath" name="TencentOS_tiny"/>
|
||||||
|
|
||||||
|
</sourceEntries>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
|
||||||
|
</cconfiguration>
|
||||||
|
|
||||||
|
<cconfiguration id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514">
|
||||||
|
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||||
|
|
||||||
|
<externalSettings/>
|
||||||
|
|
||||||
|
<extensions>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
|
||||||
|
</extensions>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
|
||||||
|
<configuration artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="${cross_rm} -rf" description="" id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514" name="Release" optionalBuildProperties="" parent="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release">
|
||||||
|
|
||||||
|
<folderInfo id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514." name="/" resourcePath="">
|
||||||
|
|
||||||
|
<toolChain id="ilg.gnumcueclipse.managedbuild.cross.riscv.toolchain.elf.release.1119271255" name="RISC-V Cross GCC" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.toolchain.elf.release">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createflash.234366441" name="Create flash image" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createflash" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createlisting.1979221764" name="Create extended listing" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.createlisting"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.printsize.639329873" name="Print size" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.addtools.printsize" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level.944044757" name="Optimization Level" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level" value="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.level.size" valueType="enumerated"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.messagelength.1595630852" name="Message length (-fmessage-length=0)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.messagelength" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.signedchar.1295491377" name="'char' is signed (-fsigned-char)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.signedchar" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.functionsections.349406114" name="Function sections (-ffunction-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.functionsections" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.datasections.1549548962" name="Data sections (-fdata-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.optimization.datasections" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.level.903319958" name="Debug level" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.level"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.format.575603524" name="Debug format" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.debugging.format"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.name.935729314" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.toolchain.name" value="GNU MCU RISC-V GCC" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.prefix.792433372" name="Prefix" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.prefix" value="riscv-none-embed-" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.c.258360774" name="C compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.c" value="gcc" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.cpp.1584190584" name="C++ compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.cpp" value="g++" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.ar.1666089904" name="Archiver" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.ar" value="ar" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objcopy.1508895722" name="Hex/Bin converter" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objcopy" value="objcopy" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objdump.1190529585" name="Listing generator" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.objdump" value="objdump" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.size.1803574904" name="Size command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.size" value="size" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make.1259520095" name="Build command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.make" value="make" valueType="string"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm.308515188" name="Remove command" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.command.rm" value="rm" valueType="string"/>
|
||||||
|
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform.833637785" isAbstract="false" osList="all" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.targetPlatform"/>
|
||||||
|
|
||||||
|
<builder buildPath="${workspace_loc:/hello_world}/Release" id="ilg.gnumcueclipse.managedbuild.cross.riscv.builder.1077218023" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.builder"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.1163339278" name="GNU RISC-V Cross Assembler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.usepreprocessor.719265754" name="Use preprocessor" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.assembler.usepreprocessor" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input.1362812577" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.assembler.input"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.1032790189" name="GNU RISC-V Cross C Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler">
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.123089053" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler.1454138204" name="GNU RISC-V Cross C++ Compiler" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.compiler"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.870865199" name="GNU RISC-V Cross C Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections.1794438948" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.c.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<inputType id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input.1726737549" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.linker.input">
|
||||||
|
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
|
||||||
|
</inputType>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.linker.2109334695" name="GNU RISC-V Cross C++ Linker" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.cpp.linker">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.cpp.linker.gcsections.1539123961" name="Remove unused sections (-Xlinker --gc-sections)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.cpp.linker.gcsections" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.archiver.1072059282" name="GNU RISC-V Cross Archiver" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.archiver"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createflash.394018329" name="GNU RISC-V Cross Create Flash Image" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createflash"/>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createlisting.1648235016" name="GNU RISC-V Cross Create Listing" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.createlisting">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.source.1252659705" name="Display source (--source|-S)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.source" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.allheaders.1918721537" name="Display all headers (--all-headers|-x)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.allheaders" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.demangle.1876846984" name="Demangle names (--demangle|-C)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.demangle" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.linenumbers.538855900" name="Display line numbers (--line-numbers|-l)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.linenumbers" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.wide.1461816723" name="Wide lines (--wide|-w)" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.createlisting.wide" value="true" valueType="boolean"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
<tool id="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.printsize.1453145303" name="GNU RISC-V Cross Print Size" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.tool.printsize">
|
||||||
|
|
||||||
|
<option id="ilg.gnumcueclipse.managedbuild.cross.riscv.option.printsize.format.1020841393" name="Size format" superClass="ilg.gnumcueclipse.managedbuild.cross.riscv.option.printsize.format"/>
|
||||||
|
|
||||||
|
</tool>
|
||||||
|
|
||||||
|
</toolChain>
|
||||||
|
|
||||||
|
</folderInfo>
|
||||||
|
|
||||||
|
<sourceEntries>
|
||||||
|
|
||||||
|
<entry excluding="Src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
|
||||||
|
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Src"/>
|
||||||
|
|
||||||
|
</sourceEntries>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
|
||||||
|
</cconfiguration>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
|
||||||
|
<project id="hello_world.ilg.gnumcueclipse.managedbuild.cross.riscv.target.elf.955814930" name="Executable" projectType="ilg.gnumcueclipse.managedbuild.cross.riscv.target.elf"/>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
|
||||||
|
<scannerConfigBuildInfo instanceId="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514;ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514.;ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.1032790189;ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.123089053">
|
||||||
|
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
|
||||||
|
<scannerConfigBuildInfo instanceId="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145;ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145.;ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.1946709939;ilg.gnumcueclipse.managedbuild.cross.riscv.tool.c.compiler.input.905374687">
|
||||||
|
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||||
|
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.internal.ui.text.commentOwnerProjectMappings"/>
|
||||||
|
|
||||||
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
|
|
||||||
|
<configuration configurationName="Debug">
|
||||||
|
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/hello_world"/>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
<configuration configurationName="Release">
|
||||||
|
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/hello_world"/>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
</storageModule>
|
||||||
|
|
||||||
|
</cproject>
|
1
board/QEMU_Spike/eclipse/hello_world/.gitignore
vendored
Normal file
1
board/QEMU_Spike/eclipse/hello_world/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/Debug/
|
53
board/QEMU_Spike/eclipse/hello_world/.project
Normal file
53
board/QEMU_Spike/eclipse/hello_world/.project
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<projectDescription>
|
||||||
|
<name>hello_world</name>
|
||||||
|
<comment></comment>
|
||||||
|
<projects>
|
||||||
|
</projects>
|
||||||
|
<buildSpec>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
|
||||||
|
<triggers>clean,full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
<buildCommand>
|
||||||
|
<name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
|
||||||
|
<triggers>full,incremental,</triggers>
|
||||||
|
<arguments>
|
||||||
|
</arguments>
|
||||||
|
</buildCommand>
|
||||||
|
</buildSpec>
|
||||||
|
<natures>
|
||||||
|
<nature>org.eclipse.cdt.core.cnature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
|
||||||
|
<nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
|
||||||
|
</natures>
|
||||||
|
<linkedResources>
|
||||||
|
<link>
|
||||||
|
<name>TencentOS_tiny</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>virtual:/virtual</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>TencentOS_tiny/arch</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>virtual:/virtual</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>TencentOS_tiny/kernel</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>$%7BPARENT-4-PROJECT_LOC%7D/kernel</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>TencentOS_tiny/osal</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>$%7BPARENT-4-PROJECT_LOC%7D/osal</locationURI>
|
||||||
|
</link>
|
||||||
|
<link>
|
||||||
|
<name>TencentOS_tiny/arch/risc-v</name>
|
||||||
|
<type>2</type>
|
||||||
|
<locationURI>$%7BPARENT-4-PROJECT_LOC%7D/arch/risc-v</locationURI>
|
||||||
|
</link>
|
||||||
|
</linkedResources>
|
||||||
|
</projectDescription>
|
@@ -0,0 +1,48 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<project>
|
||||||
|
|
||||||
|
<configuration id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.debug.471104145" name="Debug">
|
||||||
|
|
||||||
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
|
|
||||||
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
|
|
||||||
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
|
||||||
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
|
||||||
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1353384052355236260" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
|
|
||||||
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
|
|
||||||
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
|
|
||||||
|
</provider>
|
||||||
|
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
<configuration id="ilg.gnumcueclipse.managedbuild.cross.riscv.config.elf.release.419702514" name="Release">
|
||||||
|
|
||||||
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
|
|
||||||
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
|
|
||||||
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
|
||||||
|
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
|
||||||
|
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1317474887408019048" id="ilg.gnumcueclipse.managedbuild.cross.riscv.GCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT RISC-V Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} ${cross_toolchain_flags} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||||
|
|
||||||
|
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||||
|
|
||||||
|
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||||
|
|
||||||
|
</provider>
|
||||||
|
|
||||||
|
</extension>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
|
|
||||||
|
</project>
|
@@ -0,0 +1,75 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.cdt.codan.checkers.errnoreturn=Warning
|
||||||
|
org.eclipse.cdt.codan.checkers.errnoreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return\\")",implicit\=>false}
|
||||||
|
org.eclipse.cdt.codan.checkers.errreturnvalue=Error
|
||||||
|
org.eclipse.cdt.codan.checkers.errreturnvalue.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused return value\\")"}
|
||||||
|
org.eclipse.cdt.codan.checkers.nocommentinside=-Error
|
||||||
|
org.eclipse.cdt.codan.checkers.nocommentinside.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Nesting comments\\")"}
|
||||||
|
org.eclipse.cdt.codan.checkers.nolinecomment=-Error
|
||||||
|
org.eclipse.cdt.codan.checkers.nolinecomment.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Line comments\\")"}
|
||||||
|
org.eclipse.cdt.codan.checkers.noreturn=Error
|
||||||
|
org.eclipse.cdt.codan.checkers.noreturn.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No return value\\")",implicit\=>false}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AbstractClassCreation.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Abstract class cannot be instantiated\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AmbiguousProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Ambiguous problem\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AssignmentInConditionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment in condition\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.AssignmentToItselfProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Assignment to itself\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CaseBreakProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"No break at end of case\\")",no_break_comment\=>"no break",last_case_param\=>false,empty_case_param\=>false,enable_fallthrough_quickfix_param\=>false}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CatchByReference=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CatchByReference.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Catching by reference is recommended\\")",unknown\=>false,exceptions\=>()}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.CircularReferenceProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Circular inheritance\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ClassMembersInitialization.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class members should be properly initialized\\")",skip\=>true}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.DecltypeAutoProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid 'decltype(auto)' specifier\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.FieldResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Field cannot be resolved\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.FunctionResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Function cannot be resolved\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.InvalidArguments=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.InvalidArguments.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid arguments\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.InvalidTemplateArgumentsProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid template argument\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.LabelStatementNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Label statement not found\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.MemberDeclarationNotFoundProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Member declaration not found\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.MethodResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Method cannot be resolved\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker=-Info
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.NamingConventionFunctionChecker.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Name convention for function\\")",pattern\=>"^[a-z]",macro\=>true,exceptions\=>()}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.NonVirtualDestructorProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Class has a virtual method and non-virtual destructor\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.OverloadProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.OverloadProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid overload\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.RedeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redeclaration\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.RedefinitionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Invalid redefinition\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem=-Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ReturnStyleProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Return with parenthesis\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem=-Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.ScanfFormatStringSecurityProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Format String Vulnerability\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.StatementHasNoEffectProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Statement has no effect\\")",macro\=>true,exceptions\=>()}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.SuggestedParenthesisProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suggested parenthesis around expression\\")",paramNot\=>false}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.SuspiciousSemicolonProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Suspicious semicolon\\")",else\=>false,afterelse\=>false}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.TypeResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Type cannot be resolved\\")"}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedFunctionDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused function declaration\\")",macro\=>true}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedStaticFunctionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused static function\\")",macro\=>true}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem=Warning
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.UnusedVariableDeclarationProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Unused variable declaration in file scope\\")",macro\=>true,exceptions\=>("@(\#)","$Id")}
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem=Error
|
||||||
|
org.eclipse.cdt.codan.internal.checkers.VariableResolutionProblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>true,RUN_ON_INC_BUILD\=>true,RUN_ON_FILE_OPEN\=>false,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>"@suppress(\\"Symbol is not resolved\\")"}
|
||||||
|
org.eclipse.cdt.qt.core.qtproblem=Warning
|
||||||
|
org.eclipse.cdt.qt.core.qtproblem.params={launchModes\=>{RUN_ON_FULL_BUILD\=>false,RUN_ON_INC_BUILD\=>false,RUN_ON_FILE_OPEN\=>true,RUN_ON_FILE_SAVE\=>false,RUN_AS_YOU_TYPE\=>true,RUN_ON_DEMAND\=>true},suppression_comment\=>null}
|
@@ -0,0 +1,2 @@
|
|||||||
|
eclipse.preferences.version=1
|
||||||
|
org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
|
55
board/QEMU_Spike/eclipse/hello_world/Inc/tos_config.h
Normal file
55
board/QEMU_Spike/eclipse/hello_world/Inc/tos_config.h
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
/*
|
||||||
|
* tos_config.h
|
||||||
|
*
|
||||||
|
* Created on: Sep 7, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef INC_TOS_CONFIG_H_
|
||||||
|
#define INC_TOS_CONFIG_H_
|
||||||
|
|
||||||
|
#include "stddef.h"
|
||||||
|
|
||||||
|
#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量
|
||||||
|
|
||||||
|
#define TOS_CFG_ROUND_ROBIN_EN 0u // 配置TencentOS tiny的内核是否开启时间片轮转
|
||||||
|
|
||||||
|
#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法
|
||||||
|
|
||||||
|
#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏
|
||||||
|
|
||||||
|
#define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否开启动态内存模块
|
||||||
|
|
||||||
|
#define TOS_CFG_MMHEAP_POOL_SIZE 8192 // 配置TencentOS tiny动态内存池大小
|
||||||
|
|
||||||
|
#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块
|
||||||
|
|
||||||
|
#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否开启队列模块
|
||||||
|
|
||||||
|
#define TOS_CFG_TIMER_EN 0u // 配置TencentOS tiny是否开启软件定时器模块
|
||||||
|
|
||||||
|
#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块
|
||||||
|
|
||||||
|
#if (TOS_CFG_QUEUE_EN > 0u)
|
||||||
|
#define TOS_CFG_MSG_EN 1u
|
||||||
|
#else
|
||||||
|
#define TOS_CFG_MSG_EN 0u
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息队列大小
|
||||||
|
|
||||||
|
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u // 配置TencentOS tiny空闲任务栈大小
|
||||||
|
|
||||||
|
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick频率
|
||||||
|
|
||||||
|
extern uint32_t SystemCoreClock;
|
||||||
|
#define TOS_CFG_CPU_CLOCK (SystemCoreClock) // 配置TencentOS tiny CPU频率
|
||||||
|
|
||||||
|
#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式
|
||||||
|
|
||||||
|
#define TOS_CFG_VFS_EN 1u
|
||||||
|
|
||||||
|
#define TOS_CFG_MMBLK_EN 1u
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* INC_TOS_CONFIG_H_ */
|
97
board/QEMU_Spike/eclipse/hello_world/Src/main.c
Normal file
97
board/QEMU_Spike/eclipse/hello_world/Src/main.c
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/*
|
||||||
|
* main.c
|
||||||
|
*
|
||||||
|
* Created on: Sep 13, 2019
|
||||||
|
* Author: ace
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "tos.h"
|
||||||
|
#include "riscv_encoding.h"
|
||||||
|
|
||||||
|
#define RISCV_MSTATUS_MIE (1<<3) /*machine-level interrupt bit*/
|
||||||
|
#define RISCV_MSTATUS_MPIE (1<<7) /*machine-level pre interrupt bit*/
|
||||||
|
#define RISCV_MSTATUS_MPP (0x3<<10) /*machine-level MPP bit*/
|
||||||
|
|
||||||
|
#define RISCV_MSTATUS_MPP_MPIE (RISCV_MSTATUS_MPIE | RISCV_MSTATUS_MPP)
|
||||||
|
void port_sched_start();
|
||||||
|
#define STACK_SIZE 512
|
||||||
|
char stack[STACK_SIZE];
|
||||||
|
void debug_task() {
|
||||||
|
int idle = 0;
|
||||||
|
int cnt = 0;
|
||||||
|
while(1) {
|
||||||
|
idle++;
|
||||||
|
cnt++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "cmsis_os.h"
|
||||||
|
|
||||||
|
//task1
|
||||||
|
#define TASK1_STK_SIZE 512
|
||||||
|
void task1(void *pdata);
|
||||||
|
k_task_t k_task_task1;
|
||||||
|
uint8_t k_task1_stk[TASK1_STK_SIZE];
|
||||||
|
int shit = 123;
|
||||||
|
void task1(void *pdata)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
c++;
|
||||||
|
shit++;
|
||||||
|
//k_tick_t delay = tos_millisec2tick(10);
|
||||||
|
//tos_task_delay(delay);
|
||||||
|
tos_task_yield();
|
||||||
|
//osDelay(10);
|
||||||
|
//asm("wfi;");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void task2(void *pdata);
|
||||||
|
k_task_t k_task_task2;
|
||||||
|
uint8_t k_task2_stk[TASK1_STK_SIZE];
|
||||||
|
void task2(void *pdata)
|
||||||
|
{
|
||||||
|
int c = 0;
|
||||||
|
while(1)
|
||||||
|
{
|
||||||
|
c--;
|
||||||
|
shit--;
|
||||||
|
//osDelay(10);
|
||||||
|
tos_task_yield();
|
||||||
|
asm("wfi;");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t *stack_sp;
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
osKernelInitialize();
|
||||||
|
#if 0
|
||||||
|
while(1) {
|
||||||
|
asm("csrs mie, %0"::"r"(MIE_MTIE));
|
||||||
|
asm("csrs mstatus, %0"::"r"(MSTATUS_MIE));
|
||||||
|
asm("wfi;");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK1_STK_SIZE, 0);
|
||||||
|
tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK1_STK_SIZE, 0);
|
||||||
|
osKernelStart();
|
||||||
|
uint32_t *sp = stack+STACK_SIZE - 4;
|
||||||
|
sp = (uint32_t*)(((uint32_t)sp) & 0xFFFFFFF0);
|
||||||
|
|
||||||
|
*(sp - 22) = 0x0ACE0ACE; // Reg R0: argument
|
||||||
|
*(sp - 30) = 0x1234ABCD; // ra
|
||||||
|
*(sp - 31) = debug_task;
|
||||||
|
*(sp - 32) = RISCV_MSTATUS_MPIE | RISCV_MSTATUS_MPP;
|
||||||
|
sp -= 32;
|
||||||
|
stack_sp = sp;
|
||||||
|
port_sched_start();
|
||||||
|
int c = 0;
|
||||||
|
while(1) {
|
||||||
|
c++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
52
board/QEMU_Spike/eclipse/hello_world/link.ld
Normal file
52
board/QEMU_Spike/eclipse/hello_world/link.ld
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
OUTPUT_ARCH( "riscv" )
|
||||||
|
ENTRY( _start )
|
||||||
|
|
||||||
|
MEMORY
|
||||||
|
{
|
||||||
|
ROM (rxai!w) : ORIGIN = 0x80000000, LENGTH = 512K
|
||||||
|
RAM (wxa!ri) : ORIGIN = 0x84000000, LENGTH = 128K
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text : {
|
||||||
|
PROVIDE( _text = . );
|
||||||
|
*(.text.entry)
|
||||||
|
*(.text)
|
||||||
|
*(.rodata)
|
||||||
|
PROVIDE( _etext = . );
|
||||||
|
} >ROM AT>ROM
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
_load_data = LOADADDR(.data);
|
||||||
|
|
||||||
|
. = ALIGN(4);
|
||||||
|
.data : {
|
||||||
|
PROVIDE( _data = . );
|
||||||
|
*(.data)
|
||||||
|
. = ALIGN(4);
|
||||||
|
} >RAM AT>ROM
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE( _edata = . );
|
||||||
|
|
||||||
|
. = ALIGN(0x1000);
|
||||||
|
PROVIDE( _bss = . );
|
||||||
|
.bss : {
|
||||||
|
*(.bss)
|
||||||
|
} >RAM AT>RAM
|
||||||
|
. = ALIGN(4);
|
||||||
|
PROVIDE( _ebss = . );
|
||||||
|
|
||||||
|
|
||||||
|
. = ALIGN(8);
|
||||||
|
PROVIDE( end = . );
|
||||||
|
|
||||||
|
/*
|
||||||
|
_stack_size = 256;
|
||||||
|
.stack ORIGIN(RAM) + LENGTH(RAM) - _stack_size :
|
||||||
|
{
|
||||||
|
. = _stack_size;
|
||||||
|
PROVIDE( _stack_top = . );
|
||||||
|
} >RAM AT>RAM
|
||||||
|
*/
|
||||||
|
}
|
Reference in New Issue
Block a user