conflict fix

This commit is contained in:
IllusionLee
2019-10-08 10:48:58 +08:00
19 changed files with 210 additions and 107 deletions

View File

@@ -1,4 +1,5 @@
#include "tos.h"
#include <tos_compiler.h>
#include <tos_ktypes.h>
#define ECLIC_ADDR_BASE 0xD2000000
#define CLIC_INT_TMR 0x07
@@ -18,18 +19,18 @@
#define ECLIC_CFG_NLBITS_LSB 1
static uint8_t elci_get_clic_int_ctl_bits() {
static uint8_t eclic_get_clic_int_ctl_bits() {
uint32_t bits = *(volatile uint32_t*)(ECLIC_ADDR_BASE+ECLIC_INFO_OFFSET);
bits >>= 21;
return (uint8_t) bits;
}
static uint8_t elci_get_nlbits() {
static uint8_t eclic_get_nlbits() {
uint8_t nlbits = *(volatile uint8_t*)(ECLIC_ADDR_BASE+ECLIC_CFG_OFFSET);
nlbits = (nlbits & ECLIC_CFG_NLBITS_MASK) >> ECLIC_CFG_NLBITS_LSB;
uint8_t cicbits = elci_get_clic_int_ctl_bits();
uint8_t cicbits = eclic_get_clic_int_ctl_bits();
if(nlbits > cicbits) {
nlbits = cicbits;
}
@@ -51,7 +52,7 @@ static void eclic_enable_interrupt(uint32_t source) {
}
static void eclic_set_irq_level(uint32_t source, uint8_t level) {
uint8_t nlbits = elci_get_nlbits();
uint8_t nlbits = eclic_get_nlbits();
if (nlbits == 0) {
return ;
@@ -67,8 +68,8 @@ static void eclic_set_irq_level(uint32_t source, uint8_t level) {
}
static void eclic_set_irq_priority(uint32_t source, uint8_t priority) {
uint8_t nlbits = elci_get_nlbits();
uint8_t cicbits= elci_get_clic_int_ctl_bits();
uint8_t nlbits = eclic_get_nlbits();
uint8_t cicbits= eclic_get_clic_int_ctl_bits();
if (nlbits >= cicbits) {
return ;

View File

@@ -1,5 +1,4 @@
#include <tos.h>
#include <riscv_encoding.h>
#include <riscv_port.h>
__KERNEL__ void cpu_systick_init(k_cycle_t cycle_per_tick)
@@ -107,7 +106,7 @@ __KERNEL__ k_stack_t *cpu_task_stk_init(void *entry,
regs->gp = (cpu_data_t)gp; // gp: global pointer
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->mstatus = (cpu_data_t)0x00001880; // return to machine mode and enable interrupt
regs->epc = (cpu_data_t)entry;

View File

@@ -1,5 +1,4 @@
#include <tos.h>
#include "riscv_encoding.h"
#include "riscv_port.h"
__PORT__ void port_systick_config(uint32_t cycle_per_tick)

View File

@@ -15,8 +15,14 @@
.extern k_curr_task
.extern k_next_task
#define MSTATUS_MIE 0x00000008
#define MSTATUS_MPP 0x00001800
#include "riscv_encoding.h"
#define MIE_MTIE (1 << 7)
#define MIP_MTIP (1 << 7)
#define REGBYTES 4
.text
.align 2
@@ -59,7 +65,6 @@ port_systick_pending_reset:
csrc mip, t0
ret
#define REGBYTES 4
.macro SAVE_CONTEXT
addi sp, sp, -32*REGBYTES

View File

@@ -0,0 +1,9 @@
#ifndef __MCU_INIT_H
#define __MCU_INIT_H
#include "gd32vf103.h"
#include "usart.h"
void board_init();
#endif //__MCU_INIT_H

View File

@@ -0,0 +1,10 @@
#ifndef __USART_H
#define __USART_H
#define USART0_GPIO_TX_PIN GPIO_PIN_9
#define USART0_GPIO_RX_PIN GPIO_PIN_10
#define USART0_GPIO_PORT GPIOA
void usart0_init(int baud);
#endif // __USART_H

View File

@@ -0,0 +1,12 @@
#include "mcu_init.h"
void board_init() {
SystemInit();
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
gpio_bit_reset(GPIOA, GPIO_PIN_7);
}

View File

@@ -0,0 +1,28 @@
#include "gd32vf103.h"
#include "usart.h"
void usart0_init(int baud)
{
/* enable GPIO clock */
rcu_periph_clock_enable(RCU_GPIOA);
/* enable USART0 clock */
rcu_periph_clock_enable(RCU_USART0);
/* connect port to USART0_Tx */
gpio_init(USART0_GPIO_PORT, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, USART0_GPIO_TX_PIN);
/* connect port to USART0_Rx */
gpio_init(USART0_GPIO_PORT, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, USART0_GPIO_RX_PIN);
/* USART0 configure */
usart_deinit(USART0);
usart_baudrate_set(USART0, baud);
usart_word_length_set(USART0, USART_WL_8BIT);
usart_stop_bit_set(USART0, USART_STB_1BIT);
usart_parity_config(USART0, USART_PM_NONE);
usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);
usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);
usart_receive_config(USART0, USART_RECEIVE_ENABLE);
usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);
usart_enable(USART0);
}

View File

@@ -1,27 +1,38 @@
#ifndef INC_TOS_CONFIG_H_
#define INC_TOS_CONFIG_H_
#include "gd32vf103.h"
#include "stddef.h"
#define TOS_CFG_TASK_PRIO_MAX 10u // 配置TencentOS tiny默认支持的最大优先级数量
// 配置TencentOS tiny默认支持的最大优先级数量
#define TOS_CFG_TASK_PRIO_MAX 10u
#define TOS_CFG_ROUND_ROBIN_EN 0u // 配置TencentOS tiny的内核是否开启时间片轮转
// 配置TencentOS tiny的内核是否开启时间片轮转
#define TOS_CFG_ROUND_ROBIN_EN 0u
#define TOS_CFG_OBJECT_VERIFY 0u // 配置TencentOS tiny是否校验指针合法
// 配置TencentOS tiny是否校验指针合法
#define TOS_CFG_OBJECT_VERIFY 0u
#define TOS_CFG_EVENT_EN 1u // TencentOS tiny 事件模块功能宏
// TencentOS tiny 事件模块功能宏
#define TOS_CFG_EVENT_EN 1u
#define TOS_CFG_MMHEAP_EN 1u // 配置TencentOS tiny是否开启动态内存模块
// 配置TencentOS tiny是否开启动态内存模块
#define TOS_CFG_MMHEAP_EN 1u
#define TOS_CFG_MMHEAP_POOL_SIZE 8192 // 配置TencentOS tiny动态内存池大小
// 配置TencentOS tiny动态内存池大小
#define TOS_CFG_MMHEAP_POOL_SIZE 8192
#define TOS_CFG_MUTEX_EN 1u // 配置TencentOS tiny是否开启互斥锁模块
// 配置TencentOS tiny是否开启互斥锁模块
#define TOS_CFG_MUTEX_EN 1u
#define TOS_CFG_QUEUE_EN 1u // 配置TencentOS tiny是否开启队列模块
// 配置TencentOS tiny是否开启队列模块
#define TOS_CFG_QUEUE_EN 1u
#define TOS_CFG_TIMER_EN 0u // 配置TencentOS tiny是否开启软件定时器模块
// 配置TencentOS tiny是否开启软件定时器模块
#define TOS_CFG_TIMER_EN 0u
#define TOS_CFG_SEM_EN 1u // 配置TencentOS tiny是否开启信号量模块
// 配置TencentOS tiny是否开启信号量模块
#define TOS_CFG_SEM_EN 1u
#define TOS_CFG_CPU_SYSTICK_PRIO 0xF
@@ -31,15 +42,22 @@
#define TOS_CFG_MSG_EN 0u
#endif
#define TOS_CFG_MSG_POOL_SIZE 10u // 配置TencentOS tiny消息队列大小
// 配置TencentOS tiny消息队列大小
#define TOS_CFG_MSG_POOL_SIZE 10u
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u // 配置TencentOS tiny空闲任务栈大小
// 配置TencentOS tiny空闲任务栈大小
#define TOS_CFG_IDLE_TASK_STK_SIZE 512u
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u // 配置TencentOS tiny的tick频率
// 配置TencentOS tiny的tick频率
#define TOS_CFG_CPU_TICK_PER_SECOND 1000u
#define TOS_CFG_CPU_CLOCK (108000000/4) // 配置TencentOS tiny CPU频率
// 配置TencentOS tiny CPU频率
// 除4的原因是Bumblebee内核通过core_clk_aon四分频来更新mtime寄存器
// 具体信息参见《Bumblebee内核简明数据手册》
#define TOS_CFG_CPU_CLOCK (SystemCoreClock/4)
#define TOS_CFG_TIMER_AS_PROC 1u // 配置是否将TIMER配置成函数模式
// 配置是否将TIMER配置成函数模式
#define TOS_CFG_TIMER_AS_PROC 1u
#define TOS_CFG_VFS_EN 1u

View File

@@ -144,6 +144,8 @@
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/hello_world/TencentOS_tiny/arch/risc-v/bumblebee}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/hello_world/TencentOS_tiny/kernel/evtdrv/include}&quot;"/>
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/hello_world/Application/Inc}&quot;"/>
</option>

View File

@@ -39,6 +39,16 @@
<type>2</type>
<locationURI>virtual:/virtual</locationURI>
</link>
<link>
<name>Application/Inc</name>
<type>2</type>
<locationURI>TOP_DIR/board/GD32VF103C_START/BSP/Inc</locationURI>
</link>
<link>
<name>Application/Src</name>
<type>2</type>
<locationURI>TOP_DIR/board/GD32VF103C_START/BSP/Src</locationURI>
</link>
<link>
<name>Application/tos_config.h</name>
<type>1</type>

View File

@@ -11,7 +11,7 @@
<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="1367083006174630109" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<provider class="org.eclipse.cdt.managedbuilder.language.settings.providers.GCCBuiltinSpecsDetector" console="false" env-hash="1310167466484573552" 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 &quot;${INPUTS}&quot;" prefer-non-shared="true">
<language-scope id="org.eclipse.cdt.core.gcc"/>

View File

@@ -1,58 +1,68 @@
#include "gd32vf103.h"
#include "tos.h"
#define TASK_SIZE 512
k_task_t k_task_task1;
k_task_t k_task_task2;
uint8_t k_task1_stk[TASK_SIZE];
uint8_t k_task2_stk[TASK_SIZE];
int share = 0xCBA7F9;
k_sem_t sem;
void task1(void *pdata)
{
int task_cnt1 = 0;
while (1) {
task_cnt1++;
tos_sem_pend(&sem, ~0U);
gpio_bit_write(GPIOA, GPIO_PIN_7, share % 2);
}
}
void task2(void *pdata)
{
int task_cnt2 = 0;
while (1) {
task_cnt2--;
share++;
tos_task_delay(1000);
tos_sem_post(&sem);
}
}
void main(void) {
rcu_periph_clock_enable(RCU_GPIOA);
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);
gpio_bit_reset(GPIOA, GPIO_PIN_7);
tos_knl_init();
tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK_SIZE, 0);
tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0);
k_err_t err = tos_sem_create(&sem, 1);
if (err != K_ERR_NONE) {
goto die;
}
tos_knl_start();
die:
while (1) {
asm("wfi;");
}
}
#include "mcu_init.h"
#include "tos.h"
#define TASK_SIZE 1024
k_task_t k_task_task1;
k_task_t k_task_task2;
uint8_t k_task1_stk[TASK_SIZE];
uint8_t k_task2_stk[TASK_SIZE];
int share = 0xCBA7F9;
k_sem_t sem;
void task1(void *pdata)
{
int task_cnt1 = 0;
while (1) {
printf("hello world from %s cnt: %d\n", __func__, task_cnt1++);
tos_sem_pend(&sem, ~0U);
gpio_bit_write(GPIOA, GPIO_PIN_7, share % 2);
}
}
void task2(void *pdata)
{
int task_cnt2 = 0;
while (1) {
share++;
for(int i=0; i<5; i++) {
printf("hello world from %s cnt: %08x\n", __func__, task_cnt2--);
tos_task_delay(200);
}
tos_sem_post(&sem);
}
}
void main(void) {
board_init();
usart0_init(115200);
tos_knl_init();
tos_task_create(&k_task_task1, "task1", task1, NULL, 3, k_task1_stk, TASK_SIZE, 0);
tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0);
k_err_t err = tos_sem_create(&sem, 1);
if (err != K_ERR_NONE) {
goto die;
}
tos_knl_start();
die:
while (1) {
asm("wfi;");
}
}
int _put_char(int ch)
{
usart_data_transmit(USART0, (uint8_t) ch );
while (usart_flag_get(USART0, USART_FLAG_TBE)== RESET){
}
return ch;
}

View File

@@ -209,14 +209,14 @@ void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr)
}
/***************************************************************
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: OLED_ShowCHinese
* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: OLED_ShowChinese
* ˵ <20><>: <20><>ָ<EFBFBD><D6B8>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
* <20><> <20><>: x<><78><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>x<EFBFBD><78><EFBFBD><EFBFBD>
y<><79><EFBFBD><EFBFBD>ʼλ<CABC><CEBB>y<EFBFBD><79><EFBFBD><EFBFBD>
no<6E><6F>Ҫ<EFBFBD><D2AA>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF>еı<D0B5><C4B1>ţ<EFBFBD><C5A3><EFBFBD><EFBFBD>Ŵ<EFBFBD>0<EFBFBD><30>ʼ
* <20><> <20><> ֵ: <20><>
***************************************************************/
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t no)
{
uint8_t t,adder=0;
OLED_Set_Pos(x,y);

View File

@@ -37,7 +37,7 @@ void OLED_Fill(uint8_t x1,uint8_t y1,uint8_t x2,uint8_t y2,uint8_t dot);
void OLED_ShowChar(uint8_t x,uint8_t y,uint8_t chr);
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p);
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);
/**************************************************************/
/************** OLED<45><44><EFBFBD>ýӿ<C3BD> ************************/

View File

@@ -41,17 +41,17 @@ void board_init(void)
OLED_Init();
Init_BH1750();
DHT11_Init();
//OLED_ShowCHinese(0,0,0);
//OLED_ShowCHinese(18,0,1);
//OLED_ShowCHinese(38,0,2);
//OLED_ShowCHinese(56,0,3);
//OLED_ShowCHinese(74,0,4);
//OLED_ShowChinese(0,0,0);
//OLED_ShowChinese(18,0,1);
//OLED_ShowChinese(38,0,2);
//OLED_ShowChinese(56,0,3);
//OLED_ShowChinese(74,0,4);
OLED_ShowString(10,0,(uint8_t*)"TencentOS tiny");
// OLED_ShowCHinese(1,3,5);
// OLED_ShowCHinese(21,3,6);
// OLED_ShowChinese(1,3,5);
// OLED_ShowChinese(21,3,6);
// OLED_ShowString(39,3,(uint8_t*)":25 C");
// OLED_ShowCHinese(1,6,7);
// OLED_ShowCHinese(21,6,8);
// OLED_ShowChinese(1,6,7);
// OLED_ShowChinese(21,6,8);
// OLED_ShowString(39,6,(uint8_t*)":88 RH%");
}

View File

@@ -242,8 +242,8 @@ void OLED_ShowString(uint8_t x,uint8_t y,uint8_t *chr,uint8_t Char_Size)
}
}
//显示汉字
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no)
{
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t no)
{
uint8_t t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)

View File

@@ -27,7 +27,7 @@
//OLED接口控制用函数
void OLED_ShowNum(uint8_t x,uint8_t y,uint32_t num,uint8_t len,uint8_t size);
void OLED_ShowString(uint8_t x,uint8_t y, uint8_t *p,uint8_t Char_Size);
void OLED_ShowCHinese(uint8_t x,uint8_t y,uint8_t no);
void OLED_ShowChinese(uint8_t x,uint8_t y,uint8_t no);
void OLED_DrawBMP(unsigned char x0, unsigned char y0,unsigned char x1, unsigned char y1,unsigned char BMP[]);

View File

@@ -53,12 +53,12 @@ void board_init(void)
DHT11_Init();
OLED_Init();
OLED_Clear();
OLED_ShowCHinese(0,0,0);
OLED_ShowCHinese(18,0,1);
OLED_ShowCHinese(36,0,2);
OLED_ShowCHinese(54,0,3);
OLED_ShowCHinese(72,0,4);
OLED_ShowCHinese(90,0,5);
OLED_ShowChinese(0,0,0);
OLED_ShowChinese(18,0,1);
OLED_ShowChinese(36,0,2);
OLED_ShowChinese(54,0,3);
OLED_ShowChinese(72,0,4);
OLED_ShowChinese(90,0,5);
OLED_ShowString(0,2,(uint8_t*)str,16);
}