From 6f68c3e32824e0f9921f0241599ac5ef342d21a0 Mon Sep 17 00:00:00 2001 From: dingwang <2039494153@qq.com> Date: Tue, 22 Jul 2025 17:59:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?day1=E7=AC=94=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../\347\254\224\350\256\260/day1.md" | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" new file mode 100644 index 0000000..a49a993 --- /dev/null +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" @@ -0,0 +1,19 @@ +一:上午学了env环境配置 +env下载:https://download-redirect.rt-thread.org/download/env_release/env-windows-v2.0.0.7z + +RT-Thread源码下载:RT-Thread/rt-thread: RT-Thread is an open source IoT Real-Time Operating System (RTOS) +1.先下载好git和env,用git对RT-Thread源码进行拉取(在git中输入git clone “网址”)。 +2.对env配置 +scons -4j//对文件进行编译 pkgs --upgrade//升级软件包 menuconfig//打开图形化配置界面 +3.运行LVGL示例程序 +打开env命令行,运行menuconfig,然后选择Hardware Drivers Config -> Onboard Periperal Drivers,可以看到有Enable LVGL for LCD和Enable LVGL Demo,全部启用即可: +然后运行pkgs —update更新一下当前工程的包,运行scons -j4编译,编译完成后直接运行qemu即可启动示例demo +下午:git仓库 +git add 暂存 +git commit 提交 +git log 查看历史 +git checkout/git reset 回退 +git branch 创建分支 +git merge 合并分支 +git push/pull 推送/拉取 +git status 查看文件状态 -- Gitee From aed15c2e472ee3aa415faf56dc69bd6328151231 Mon Sep 17 00:00:00 2001 From: dingwang <2039494153@qq.com> Date: Wed, 30 Jul 2025 10:10:14 +0800 Subject: [PATCH 2/2] new file: "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\344\275\234\344\270\232/day2/day2.c" modified: "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" new file: "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day2.md" --- .../\344\275\234\344\270\232/day2/day2.c" | 67 +++++++++++++++++++ .../\347\254\224\350\256\260/day1.md" | 1 + .../\347\254\224\350\256\260/day2.md" | 44 ++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\344\275\234\344\270\232/day2/day2.c" create mode 100644 "2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day2.md" diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\344\275\234\344\270\232/day2/day2.c" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\344\275\234\344\270\232/day2/day2.c" new file mode 100644 index 0000000..5ace8a4 --- /dev/null +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\344\275\234\344\270\232/day2/day2.c" @@ -0,0 +1,67 @@ +#include +#include +#include + +#define thread_stack_size 512 +#define thread_tick 5 + +#define THREAD1_PRIORITY 10 // 高优先级 +#define THREAD2_PRIORITY 12 // 中优先级 +#define MAIN_THREAD_PRIORITY 15 // 低优先级(main 线程) + +void thread1_entry(void *param) +{ + while (1) + { + rt_kprintf(">>> this is HIGH priority thread1\n"); + rt_thread_mdelay(500); + } +} + +void thread2_entry(void *param) +{ + while (1) + { + rt_kprintf(" >>> this is MEDIUM priority thread2\n"); + rt_thread_mdelay(500); + } +} + +int main(void) +{ + rt_thread_t thread1 = RT_NULL; + rt_thread_t thread2 = RT_NULL; + + // 创建高优先级线程 thread1 + thread1 = rt_thread_create("th1", + thread1_entry, + RT_NULL, + thread_stack_size, + THREAD1_PRIORITY, // 优先级 10 + thread_tick); + // 创建中优先级线程 thread2 + thread2 = rt_thread_create("th2", + thread2_entry, + RT_NULL, + thread_stack_size, + THREAD2_PRIORITY, // 优先级 12 + thread_tick); + + if (thread1 != RT_NULL) + rt_thread_startup(thread1); + + if (thread2 != RT_NULL) + rt_thread_startup(thread2); + + // 主线程降低优先级以体现对比 + rt_thread_t main_thread = rt_thread_self(); + rt_thread_set_priority(main_thread, MAIN_THREAD_PRIORITY); // 设为低优先级 + + while (1) + { + rt_kprintf(" >>> this is LOW priority main thread\n"); + rt_thread_mdelay(500); + } + + return RT_EOK; +} \ No newline at end of file diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" index a49a993..ec4bab3 100644 --- "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day1.md" @@ -17,3 +17,4 @@ git branch 创建分支 git merge 合并分支 git push/pull 推送/拉取 git status 查看文件状态 + diff --git "a/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day2.md" "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day2.md" new file mode 100644 index 0000000..6bc902c --- /dev/null +++ "b/2025/\347\254\2546\347\273\204(GD32F527I-EVAL)/\344\270\201\345\223\262\347\277\224/\347\254\224\350\256\260/day2.md" @@ -0,0 +1,44 @@ +1.资源包安装与环境配置 +安装资源包: +部署 STM32F407-ATK-Explorer 开发资源包(含驱动、BSP支持包)。 +配置 QEMU 仿真环境(用于无硬件调试)。 +2.概念: + 临界区(Critical Section)定义:进程内访问共享资源的代码段,需通过关中断/信号量保护; + 线程状态机(就绪→运行→阻塞→挂起); +RT-Thread启动流程 +struct rt_thread { + void (*entry)(void*); // 入口函数指针 + void* parameter; // 传入参数 + rt_uint8_t* stack_addr; // 栈起始地址(静态分配时需显式指定) + rt_uint32_t stack_size; // 栈大小(单位:字节) + void* sp; // 栈顶指针(由rt_hw_stack_init()初始化) + rt_uint8_t init_priority; // 初始优先级(0最高) + rt_tick_t init_tick; // 时间片长度(tick数) + // ... 其他状态字段 +}; + 内核开发指令: +LDR 从内存加载数据至寄存器 +STR 寄存器值存入内存 +ADD 寄存器算术运算 +BL 带链接跳转(保存返回地址) +PUSH 寄存器入栈 + 线程 + 线程本质:可被调度的执行流,其运行状态由线程控制块(TCB) 维护。 + 线程创建双模式: +// 静态创建(栈内存由用户预分配) +rt_err_t rt_thread_init(rt_thread_t thread, + const char* name, + void (*entry)(void*), + void* parameter, + void* stack_start, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); + +// 动态创建(内核自动分配TCB及栈) +rt_thread_t rt_thread_create(const char* name, + void (*entry)(void*), + void* parameter, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); \ No newline at end of file -- Gitee