[GD32L233C] + 3.使用RTThread
[复制链接]
本帖最后由 chrisrh 于 2022-1-25 15:36 编辑
GD32L233C\GD32L23x_Demo_Suites_V1.1.0\GD32L233C_START_Demo_Suites\Projects\01_GPIO_Running_LED
打开GD32L233C demo 中 LED 的例程
在右侧找到RTT,然后Install RTT,等待安装完成;
点击绿砖打开
勾选RTT的kernel使用
完成RTT内核的添加;
打开RTOS中board.c,做如下处理:
将 rt_os_tick_callback(void) 替换为 SysTick_Handler(void)
屏蔽#error "TODO 1: OS Tick Configuration."
打开"gd32l23x_it.c",屏蔽如下函数
void HardFault_Handler(void)
void PendSV_Handler(void)
void SysTick_Handler(void)
内核和时钟处理完毕,在 main中进行相关配置,添加rtt的头文件
添加gd32l233c_start的头文件,里面有宏定义好的LED_ IO和位操作运算
动态分配内存,创建多线程:
- #include "gd32l23x.h"
- #include "systick.h"
- #include "rtthread.h"
- #include "gd32l233c_start.h"
-
-
- static rt_thread_t led1_thread = RT_NULL;
- static rt_thread_t led2_thread = RT_NULL;
- static rt_thread_t led3_thread = RT_NULL;
- static rt_thread_t led4_thread = RT_NULL;
-
- static void led1_thread_entry(void* parameter);
- static void led2_thread_entry(void* parameter);
- static void led3_thread_entry(void *parameter);
- static void led4_thread_entry(void *parameter);
-
- int main(void)
- {
-
- systick_config();
-
- gd_eval_led_init(LED1);
- gd_eval_led_init(LED2);
- gd_eval_led_init(LED3);
- gd_eval_led_init(LED4);
-
- led1_thread = rt_thread_create( "led1",
- led1_thread_entry,
- RT_NULL,
- 256,
- 2 ,
- 20);
- led2_thread = rt_thread_create( "led2",
- led2_thread_entry,
- RT_NULL,
- 256,
- 3 ,
- 20);
- led3_thread = rt_thread_create( "led3",
- led3_thread_entry,
- RT_NULL,
- 256,
- 4 ,
- 20);
- led4_thread = rt_thread_create( "led4",
- led4_thread_entry,
- RT_NULL,
- 256,
- 5 ,
- 20);
-
- rt_thread_startup (led1_thread);
- rt_thread_startup (led2_thread);
- rt_thread_startup (led3_thread);
- rt_thread_startup (led4_thread);
- }
-
- static void led1_thread_entry(void *parameter)
- {
- while (1)
- {
- gd_eval_led_toggle(LED1);
- rt_thread_delay(200);
- }
- }
-
- static void led2_thread_entry(void *parameter)
- {
- while (1)
- {
- gd_eval_led_toggle(LED2);
- rt_thread_delay(400);
- }
- }
-
- static void led3_thread_entry(void *parameter)
- {
- while (1)
- {
- gd_eval_led_toggle(LED3);
- rt_thread_delay(600);
- }
- }
-
- static void led4_thread_entry(void *parameter)
- {
- while (1)
- {
- gd_eval_led_toggle(LED4);
- rt_thread_delay(800);
- }
- }
LED狂闪···
|