From 16f3cbb4636b1467005d68e39b5fb4226c28c303 Mon Sep 17 00:00:00 2001 From: acevest Date: Wed, 25 Sep 2019 23:36:01 +0800 Subject: [PATCH] add pre support for GD32VF103C_START board --- .../eclipse/hello_world/main.c | 83 ++++++------------- 1 file changed, 26 insertions(+), 57 deletions(-) diff --git a/board/GD32VF103C_START/eclipse/hello_world/main.c b/board/GD32VF103C_START/eclipse/hello_world/main.c index 4bf757aa..3083d7d0 100644 --- a/board/GD32VF103C_START/eclipse/hello_world/main.c +++ b/board/GD32VF103C_START/eclipse/hello_world/main.c @@ -1,89 +1,58 @@ #include "gd32vf103.h" #include "tos.h" -void delay_1ms(uint32_t count) -{ - uint64_t start_mtime, delta_mtime; - /* don't start measuruing until we see an mtime tick */ - uint64_t tmp = get_timer_value(); - - do{ - start_mtime = get_timer_value(); - }while(start_mtime == tmp); - - do{ - delta_mtime = get_timer_value() - start_mtime; - }while(delta_mtime <(SystemCoreClock/4000.0 *count)); -} - -#define TASK_SIZE 1024 +#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 = 123; +int share = 0xCBA7F9; +k_sem_t sem; + void task1(void *pdata) { - int t1 = 0; - while(1) - { - t1++; - share++; - //k_tick_t delay = tos_millisec2tick(10); - gpio_bit_write(GPIOA, GPIO_PIN_7, (bit_status)(1-gpio_input_bit_get(GPIOA, GPIO_PIN_7))); - tos_task_delay(1000); - //tos_task_yield(); - //osDelay(10); - //asm("wfi;"); + 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 t2 = 0; - while(1) - { - t2--; - share--; - //tos_task_delay(10); - tos_task_yield(); - asm("wfi;"); + 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); - /* configure LED GPIO port */ + 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); + tos_task_create(&k_task_task2, "task2", task2, NULL, 3, k_task2_stk, TASK_SIZE, 0); - //eclic_irq_enable(CLIC_INT_TMR, 0, 0); - tos_knl_start(); - - - int c = 0; - while(1) - { - c++; - asm("wfi;"); + k_err_t err = tos_sem_create(&sem, 1); + if (err != K_ERR_NONE) { + goto die; } - while(1){ - /* insert 500 ms delay */ - delay_1ms(1000); + tos_knl_start(); - /* toggle the LED */ - gpio_bit_write(GPIOA, GPIO_PIN_7, (bit_status)(1-gpio_input_bit_get(GPIOA, GPIO_PIN_7))); - - /* insert 500 ms delay */ - delay_1ms(1000); - } +die: + while(1) { + asm("wfi;"); + } }