From d222d12ec0fc5907be597eb7c7ffec85c09a1ddb Mon Sep 17 00:00:00 2001 From: 18092575223 <15717808+M0k1se@user.noreply.gitee.com> Date: Tue, 22 Jul 2025 01:14:43 +0800 Subject: [PATCH 1/3] first --- .../\344\275\234\344\270\232.md" | 0 .../\347\254\224\350\256\260.md" | 82 +++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/\344\275\234\344\270\232.md" create mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/\344\275\234\344\270\232.md" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/\344\275\234\344\270\232.md" new file mode 100644 index 0000000..e69de29 diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" new file mode 100644 index 0000000..26ec3e1 --- /dev/null +++ "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" @@ -0,0 +1,82 @@ +# 2025RT-Thread夏令营第一天笔记 +## 上午 +### 一、开发环境配置及示例工程的运行 +1.利用git抓取RT-Thread源代码和安装ENV环境,具体步骤如下:   +1.1先在电脑上下载git,然后通过命令行输入以下代码抓取源代码和evn环境:     +`git clone https://gitee.com/mirrors_RT-Thread/rt-thread.git `     +`git clone --recursive --depth 1 https://gitee.com/mirrors_RT-Thread/env-windows.git`   + +1.2然后打开*env-windows*文件夹,运行*env.bat*,之后利用快捷键*Win+Alt+P*打开*Setting*,然后在界面左侧点击*Intergration*,然后再点击*Register*完成对ENV环境的配置和注册,此时,便可以在任一一个文件夹内单击鼠标右键后就可以*Conemu Here*。   + +1.3然后利用刚才配置好的ENV环境,通过以下路径: +`\rt-thread\bsp\qemu-vexpress-a9`,右键*Conemu Here*,然后输入*menuconfig*,回车,然后再保存退出,此时就生成了*Config*文件。然后*pkgs --upgrade*,将ENV环境更新到最新的版本,再输入*scons -j4*,回车,进行编译(~~等待编译ing~~)编译完成之后,输入*qemu-nographic.bat*,回车,运行编译好的文件。最后再次进入*menuconfig*界面,配置并下载*lvgl*软件包,然后编译,输入*qemu*便能成功运行*lvgl*的示例工程。 + +1.4下载并安装*Visual Stduio Code*软件。然后用其打开*qemu-vexpress-a9*文件夹,找到*application*(应用层),然后就可以在主函数*main.c*里~~愉快的~~敲代码了,然后重复1.3编译,运行的步骤,就可以在命令行里看到结果了。 +## 下午 +### 二、git的学习和使用 +2.1在命令行中通过`git clone`的指令抓取*gitee*仓库的代码。 + +2.2在VSCode上下载*Git Graph*的拓展,可以避免使用命令行,简化操作,方便使用,提高效率。然后在*gitee*上*fork RSOC-RTT*到自己的仓库,然后通过SHH的方式拉取到本地,然后创建自己的分支,建立自己的笔记和作业,再*PR*到远端。 + +### 三、常用的git指令 + +#### 初始化仓库 +- `git init`   +  初始化一个新的 Git 仓库。 + +#### 克隆仓库 +- `git clone [url]`   +  从远程仓库克隆一个项目到本地。 + +#### 查看状态 +- `git status`   +  显示工作目录和暂存区的状态。 + +#### 添加文件到暂存区 +- `git add [file]`   +  将指定文件添加到暂存区。 +- `git add .`   +  将所有改动添加到暂存区。 + +#### 提交更改 +- `git commit -m "[message]"`   +  提交暂存区的更改,并附带提交信息。 + +#### 查看提交历史 +- `git log`   +  显示项目的提交日志。 +- `git log --oneline`   +  以简洁的一行格式显示提交日志。 + +#### 分支操作 +- `git branch`   +  列出所有的本地分支。 +- `git branch [branch-name]`   +  创建新分支。 +- `git checkout [branch-name]`   +  切换到指定分支。 +- `git checkout -b [branch-name]`   +  创建并切换到新的分支。 + +#### 合并分支 +- `git merge [branch]`   +  将指定分支合并到当前分支。 + +#### 远程操作 +- `git remote add [remote-name] [url]`   +  添加一个新的远程仓库。 +- `git fetch [remote-name]`   +  从远程仓库获取最新更新而不自动合并。 +- `git pull [remote-name] [branch]`   +  获取并合并远程仓库的更改到当前分支。 +- `git push [remote-name] [branch]`   +  推送本地分支的更新到远程仓库。 + +#### 查看差异 +- `git diff`   +  显示工作目录与暂存区之间的差异。 +- `git diff --staged`   +  显示暂存区与最近一次提交之间的差异。 + +#### 删除操作 +- `git rese \ No newline at end of file -- Gitee From c6feaa372a8dec63217860d97d03580e8d10c90b Mon Sep 17 00:00:00 2001 From: 18092575223 <15717808+M0k1se@user.noreply.gitee.com> Date: Wed, 23 Jul 2025 02:09:59 +0800 Subject: [PATCH 2/3] sec --- .vscode/tasks.json | 28 +++ .../\344\275\234\344\270\232/main..c" | 71 +++++++ .../\347\254\224\350\256\260.md" | 82 -------- ...00\345\244\251\347\254\224\350\256\260.md" | 180 ++++++++++++++++++ ...14\345\244\251\347\254\224\350\256\260.md" | 60 ++++++ 5 files changed, 339 insertions(+), 82 deletions(-) create mode 100644 .vscode/tasks.json create mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/main..c" delete mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" create mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\270\200\345\244\251\347\254\224\350\256\260.md" create mode 100644 "2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\272\214\345\244\251\347\254\224\350\256\260.md" diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..38dfcd7 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc.exe 生成活动文件", + "command": "C:\\mingw\\mingw64\\bin\\gcc.exe", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}\\${fileBasenameNoExtension}.exe" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "调试器生成的任务。" + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/main..c" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/main..c" new file mode 100644 index 0000000..4f17332 --- /dev/null +++ "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\344\275\234\344\270\232/main..c" @@ -0,0 +1,71 @@ +#include +#include +#include + +#define THREAD_PRIORITY 25 +#define THREAD_STACK_SIZE 1024 +#define THREAD_TIMESLICE 10 + +static rt_thread_t tid1 = RT_NULL; +static rt_thread_t tid2 = RT_NULL; +static rt_thread_t tid3 = RT_NULL; + +static void thread1_entry(void *parameter) +{ + rt_uint32_t count = 0; + + while (1) + { + rt_kprintf("thread1 count: %d\n", count++); + rt_thread_mdelay(500); + } +} + +static void thread2_entry(void *parameter) +{ + rt_uint32_t count = 0; + + while (1) + { + rt_kprintf("thread2 count: %d\n", count++); + for (int i = 0; i < 1000000; i++); + } +} + +static void thread3_entry(void *parameter) +{ + rt_uint32_t count = 0; + + while (1) + { + rt_kprintf("THREAD3 COUNT: %d\n", count++); + rt_thread_mdelay(200); + } +} + +int main(void) +{ + tid1 = rt_thread_create("thread1",thread1_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY + 2, THREAD_TIMESLICE); + if (tid1 != RT_NULL) + { + rt_thread_startup(tid1); + } + tid2 = rt_thread_create("thread2",thread2_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY + 1, THREAD_TIMESLICE); + if (tid2 != RT_NULL) + { + rt_thread_startup(tid2); + } + tid3 = rt_thread_create("thread3",thread3_entry, RT_NULL,THREAD_STACK_SIZE,THREAD_PRIORITY, THREAD_TIMESLICE); + if (tid3 != RT_NULL) + { + rt_thread_startup(tid3); + } + + while (1) + { + rt_kprintf("main thread running\n"); + rt_thread_mdelay(1000); + } + + return RT_EOK; +} \ No newline at end of file diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" deleted file mode 100644 index 26ec3e1..0000000 --- "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\224\350\256\260.md" +++ /dev/null @@ -1,82 +0,0 @@ -# 2025RT-Thread夏令营第一天笔记 -## 上午 -### 一、开发环境配置及示例工程的运行 -1.利用git抓取RT-Thread源代码和安装ENV环境,具体步骤如下:   -1.1先在电脑上下载git,然后通过命令行输入以下代码抓取源代码和evn环境:     -`git clone https://gitee.com/mirrors_RT-Thread/rt-thread.git `     -`git clone --recursive --depth 1 https://gitee.com/mirrors_RT-Thread/env-windows.git`   - -1.2然后打开*env-windows*文件夹,运行*env.bat*,之后利用快捷键*Win+Alt+P*打开*Setting*,然后在界面左侧点击*Intergration*,然后再点击*Register*完成对ENV环境的配置和注册,此时,便可以在任一一个文件夹内单击鼠标右键后就可以*Conemu Here*。   - -1.3然后利用刚才配置好的ENV环境,通过以下路径: -`\rt-thread\bsp\qemu-vexpress-a9`,右键*Conemu Here*,然后输入*menuconfig*,回车,然后再保存退出,此时就生成了*Config*文件。然后*pkgs --upgrade*,将ENV环境更新到最新的版本,再输入*scons -j4*,回车,进行编译(~~等待编译ing~~)编译完成之后,输入*qemu-nographic.bat*,回车,运行编译好的文件。最后再次进入*menuconfig*界面,配置并下载*lvgl*软件包,然后编译,输入*qemu*便能成功运行*lvgl*的示例工程。 - -1.4下载并安装*Visual Stduio Code*软件。然后用其打开*qemu-vexpress-a9*文件夹,找到*application*(应用层),然后就可以在主函数*main.c*里~~愉快的~~敲代码了,然后重复1.3编译,运行的步骤,就可以在命令行里看到结果了。 -## 下午 -### 二、git的学习和使用 -2.1在命令行中通过`git clone`的指令抓取*gitee*仓库的代码。 - -2.2在VSCode上下载*Git Graph*的拓展,可以避免使用命令行,简化操作,方便使用,提高效率。然后在*gitee*上*fork RSOC-RTT*到自己的仓库,然后通过SHH的方式拉取到本地,然后创建自己的分支,建立自己的笔记和作业,再*PR*到远端。 - -### 三、常用的git指令 - -#### 初始化仓库 -- `git init`   -  初始化一个新的 Git 仓库。 - -#### 克隆仓库 -- `git clone [url]`   -  从远程仓库克隆一个项目到本地。 - -#### 查看状态 -- `git status`   -  显示工作目录和暂存区的状态。 - -#### 添加文件到暂存区 -- `git add [file]`   -  将指定文件添加到暂存区。 -- `git add .`   -  将所有改动添加到暂存区。 - -#### 提交更改 -- `git commit -m "[message]"`   -  提交暂存区的更改,并附带提交信息。 - -#### 查看提交历史 -- `git log`   -  显示项目的提交日志。 -- `git log --oneline`   -  以简洁的一行格式显示提交日志。 - -#### 分支操作 -- `git branch`   -  列出所有的本地分支。 -- `git branch [branch-name]`   -  创建新分支。 -- `git checkout [branch-name]`   -  切换到指定分支。 -- `git checkout -b [branch-name]`   -  创建并切换到新的分支。 - -#### 合并分支 -- `git merge [branch]`   -  将指定分支合并到当前分支。 - -#### 远程操作 -- `git remote add [remote-name] [url]`   -  添加一个新的远程仓库。 -- `git fetch [remote-name]`   -  从远程仓库获取最新更新而不自动合并。 -- `git pull [remote-name] [branch]`   -  获取并合并远程仓库的更改到当前分支。 -- `git push [remote-name] [branch]`   -  推送本地分支的更新到远程仓库。 - -#### 查看差异 -- `git diff`   -  显示工作目录与暂存区之间的差异。 -- `git diff --staged`   -  显示暂存区与最近一次提交之间的差异。 - -#### 删除操作 -- `git rese \ No newline at end of file diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\270\200\345\244\251\347\254\224\350\256\260.md" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\270\200\345\244\251\347\254\224\350\256\260.md" new file mode 100644 index 0000000..f2ddf28 --- /dev/null +++ "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\270\200\345\244\251\347\254\224\350\256\260.md" @@ -0,0 +1,180 @@ +# 2025 RT-Thread 夏令营第一天笔记 + +## 上午 + +### 一、开发环境配置及示例工程的运行 + +#### 1.1 安装 Git 并抓取源码 +首先在电脑上安装 Git。然后打开命令行,输入以下命令来抓取 RT-Thread 源码和 ENV 环境: +```bash +git clone https://gitee.com/mirrors_RT-Thread/rt-thread.git +git clone --recursive --depth 1 https://gitee.com/mirrors_RT-Thread/env-windows.git +``` + +#### 1.2 配置 ENV 环境 +1. 打开 env-windows 文件夹,并运行 env.bat +2. 使用快捷键 Win + Alt + P 打开设置界面 +3. 在左侧点击 Integration,然后点击 Register 完成对 ENV 环境的配置与注册 +4. 注册完成后,在任意文件夹中右键菜单会出现 ConEmu Here 选项 + +#### 1.3 编译并运行 RT-Thread 示例工程 +1. 进入路径 `\rt-thread\bsp\qemu-vexpress-a9`,右键选择 ConEmu Here 打开终端 +2. 输入以下命令: +```bash +menuconfig +``` +回车后保存并退出,生成 Config 文件 +3. 更新 ENV 环境: +```bash +pkgs --upgrade +``` +4. 编译工程: +```bash +scons -j4 +``` +5. 编译完成后运行: +```bash +qemu-nographic.bat +``` +6. 再次进入 menuconfig,配置并下载 lvgl 软件包 +7. 重新编译后输入: +```bash +qemu +``` +即可成功运行 lvgl 示例工程 + +#### 1.4 安装 VS Code 并进行开发 +1. 下载并安装 Visual Studio Code +2. 使用 VS Code 打开 qemu-vexpress-a9 文件夹 +3. 找到 application 文件夹,编辑主函数 main.c +4. 修改完成后重复 1.3 中的编译和运行步骤,即可在终端看到运行结果 + +## 下午 + +### 二、Git 的学习和使用 + +#### 2.1 使用 Git 抓取代码 +在命令行中使用以下命令从 Gitee 抓取仓库代码: +```bash +git clone [仓库地址] +``` + +#### 2.2 使用 VS Code 和 Git Graph 插件 +1. 在 VS Code 中安装 Git Graph 插件 +2. 该插件可以避免使用命令行,简化 Git 操作,提高效率 +3. 在 Gitee 上 Fork RSOC-RTT 到自己的仓库 +4. 使用 SSH 方式将代码拉取到本地 +5. 创建自己的分支,编写笔记和作业 +6. 最后通过 Pull Request(PR)提交到远端仓库 + +### 三、常用的 Git 指令 + +#### 初始化仓库 +```bash +git init +``` +初始化一个新的 Git 仓库 + +#### 克隆仓库 +```bash +git clone [url] +``` +从远程仓库克隆一个项目到本地 + +#### 查看状态 +```bash +git status +``` +显示工作目录和暂存区的状态 + +#### 添加文件到暂存区 +```bash +git add [file] +``` +将指定文件添加到暂存区 +```bash +git add . +``` +将所有改动添加到暂存区 + +#### 提交更改 +```bash +git commit -m "[message]" +``` +提交暂存区的更改,并附带提交信息 + +#### 查看提交历史 +```bash +git log +``` +显示项目的提交日志 +```bash +git log --oneline +``` +以简洁的一行格式显示提交日志 + +#### 分支操作 +```bash +git branch +``` +列出所有的本地分支 +```bash +git branch [branch-name] +``` +创建新分支 +```bash +git checkout [branch-name] +``` +切换到指定分支 +```bash +git checkout -b [branch-name] +``` +创建并切换到新的分支 + +#### 合并分支 +```bash +git merge [branch] +``` +将指定分支合并到当前分支 + +#### 远程操作 +```bash +git remote add [remote-name] [url] +``` +添加一个新的远程仓库 +```bash +git fetch [remote-name] +``` +从远程仓库获取最新更新而不自动合并 +```bash +git pull [remote-name] [branch] +``` +获取并合并远程仓库的更改到当前分支 +```bash +git push [remote-name] [branch] +``` +推送本地分支的更新到远程仓库 + +#### 查看差异 +```bash +git diff +``` +显示工作目录与暂存区之间的差异 +```bash +git diff --staged +``` +显示暂存区与最近一次提交之间的差异 + +#### 删除操作 +```bash +git reset [file] +``` +将指定文件从暂存区移除,但保留工作目录中的内容 +```bash +git reset [commit] +``` +回滚到特定的提交(请谨慎使用,可能会丢失未提交的更改) +```bash +git rm [file] +``` +从工作目录和暂存区中删除文件 \ No newline at end of file diff --git "a/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\272\214\345\244\251\347\254\224\350\256\260.md" "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\272\214\345\244\251\347\254\224\350\256\260.md" new file mode 100644 index 0000000..621377b --- /dev/null +++ "b/2025/\347\254\2541\347\273\204(STM32H750-ART-PI)/\345\274\240\344\270\200\346\231\250/\347\254\224\350\256\260/\347\254\254\344\272\214\345\244\251\347\254\224\350\256\260.md" @@ -0,0 +1,60 @@ +# 2025 RT-Thread 夏令营第二天笔记 +## 一、RT-Thread STtudio安装与配置 +### 1.1 RT Studio和SDK资源包下载 + 到*RT-Thread*官网*https://www.rt-thread.org/download.html#download-rt-thread-studio*下载*RT Studio*,下载完成后正常安装即可。然后打开*RT Studio*,然后打开SDK资源管理器,然后选择*STM32F407*,选择最新版本后安装。之后再安装最新版本的*QEMU* 。 + ### 1.2新建工程并模拟运行QEMU + 选择基于开发板创建新工程,开发板选择*STM32F407-ATK-EXPLORER*,然后调制器选择*QEMU*,待创建完成之后build工程即可。然后在工具栏选择下载,并选择与之对应的模拟器,然后系统控制台就会自动运行,然后输入*PC*即可查看当前任务状态。 +## 二、裸机和RTOS的区别 +### 2.1裸机的优势 +裸机适用于系统功能单一的情况下使用,并可以提高其运行效率;还可以使用较少的储存实现嵌入式系统的功能。 +### 2.2裸机的劣势 +裸机的代码耦合度较高,复用性较差;而且不适合复杂的嵌入式系统;同时在编写的代码不合理时容易造成系统阻塞。 +### 2.3ROTS的优势 +相较于裸机代码耦合度低,复用性较好;而且可以使用任务划分的方式降低实现复杂嵌入式系统的代码逻辑;RTOS下的延时不会一直占用CPU,延时期间处理其他任务;使用RTOS提供的线程同步与信息传递会提高系统的实时性。 +### 2.3ROTS的劣势 +在小容量的嵌入式系统中,其本身会占据部分内存;而且在单一系统中,系统调度会增加额外的开销。 + ## 三、初识RT-Thread内核 +### 3.1临界区 +定义:访问共享资源的代码段,同一时间仅允许一个线程访问。一但被占用,其他线程就不能够再使用,只能等待。 +### 3.2阻塞式线程和非阻塞式线程 +阻塞式线程对于临界区只能等,期间不能执行其他任务;非阻塞式线程对于临界区,等待期间可以执行其他任务。 +### 3.3RT-Thread系统启动流程 +3.3.1 **启动文件初始化**: + ```assembly + Reset_Handler: + BL SystemInit ; 时钟配置 + BL entry ; 进入RT-Thread + ``` + +3.3.2. **软件初始化**: + ```c + rt_hw_interrupt_disable(); // 关中断 + rt_hw_board_init(); // 板级外设 + rt_show_version(); // 打印版本 + rt_system_timer_init(); // 硬件定时器 + rt_system_scheduler_init(); // 调度器 + ``` +3.3.3. **线程创建**: + ```c + rt_application_init(); // 主线程 + rt_thread_idle_init(); // 空闲线程(优先级最低) + ``` +3.3.4 **启动调度**: + ```c + rt_system_scheduler_start(); // 开始线程调度 + ``` +### 3.4 空闲线程 +- 优先级最低(通常31) +- 永不挂起 +- 功能: + - CPU使用率统计 + - 低功耗模式管理 + - 僵尸线程资源回收 +### 3.5 线程调度机制 +1. **优先级抢占**: + - 高优先级线程可抢占低优先级线程 + - 示例:中断服务程序唤醒高优先级线程 + +2. **时间片轮转**: + - 相同优先级线程轮流执行 + - 时间片用完触发切换 \ No newline at end of file -- Gitee From 57b6034411f16c5255f8350af90c6474333fedff Mon Sep 17 00:00:00 2001 From: 18092575223 <15717808+M0k1se@user.noreply.gitee.com> Date: Wed, 23 Jul 2025 17:04:49 +0800 Subject: [PATCH 3/3] day2 --- .../\344\275\234\344\270\232/main.c" | 67 +++++++++++ .../Day1\347\254\224\350\256\260.md" | 30 +++++ .../Day2\347\254\224\350\256\260.md" | 111 ++++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 "2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\344\275\234\344\270\232/main.c" create mode 100644 "2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day1\347\254\224\350\256\260.md" create mode 100644 "2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day2\347\254\224\350\256\260.md" diff --git "a/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\344\275\234\344\270\232/main.c" "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\344\275\234\344\270\232/main.c" new file mode 100644 index 0000000..9393360 --- /dev/null +++ "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\344\275\234\344\270\232/main.c" @@ -0,0 +1,67 @@ +#include +#include +#include + +#define thread_size 512 +#define thread_pri 15 +#define thread_tick 5 + + +#define THREAD1_TICK 10 +#define THREAD2_TICK 20 +#define THREAD3_TICK 30 + +uint16_t sum1, sum2; + + +void thread1_entry() +{ + while(1) + { + rt_kprintf("sum1=%d\n", sum1++); + rt_thread_mdelay(500); + } +} + +void thread2_entry() +{ + while(1) + { + rt_kprintf("sum2=%d\n", sum2++); + rt_thread_mdelay(500); + } +} + +void thread3_entry() +{ + while(1) + { + rt_kprintf("ing......\n"); + rt_thread_mdelay(300); + } +} + + +int main(void) +{ + rt_thread_t thread1 = RT_NULL; + rt_thread_t thread2 = RT_NULL; + rt_thread_t thread3 = RT_NULL; + + thread3 = rt_thread_create("thread3", thread3_entry, RT_NULL, + thread_size, thread_pri, THREAD3_TICK); + thread1 = rt_thread_create("thread1", thread1_entry, RT_NULL, + thread_size, thread_pri, THREAD1_TICK); + + thread2 = rt_thread_create("thread2", thread2_entry, RT_NULL, + thread_size, thread_pri, THREAD2_TICK); + + if(thread3) + rt_thread_startup(thread3); + if(thread1) + rt_thread_startup(thread1); + if(thread2) + rt_thread_startup(thread2); + + return RT_EOK; +} diff --git "a/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day1\347\254\224\350\256\260.md" "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day1\347\254\224\350\256\260.md" new file mode 100644 index 0000000..49c7f29 --- /dev/null +++ "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day1\347\254\224\350\256\260.md" @@ -0,0 +1,30 @@ +# ENV工具使用 +```c +scons -4j//对文件进行编译 +pkgs --upgrade//升级软件包 +menuconfig//打开图形化配置界面 +``` +其中使用pkgs --upgrade时可能会报错如下 +![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250722/e7d05ce56c526fcc60c8346d89eff8d0.png.webp) +此时需要进入ENV的这个目录:E:\env\tools\scripts\cmds,注意ENV安装的目录 +在这个目录下打开ENV工具,运行menuconfig,保存 + +vsc进行代码编写,在env工具进行编译后使用qemu-nographic.bat 运行编译好的文件 +![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250722/6a1eb985c8edab33fe71d2828a403a0a.png.webp) + +![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250722/63fc6d6d9f8b2a94616f28f942f7caae.png.webp) +使用qemu.bat运行lvgl的demo + +![screenshot_image.png](https://oss-club.rt-thread.org/uploads/20250722/e8553b927d181517f5217ea3022c0554.png.webp) +#git使用 + +```c +git add 暂存 +git commit 提交 +git log 查看历史 +git checkout/git reset 回退 +git branch 创建分支 +git merge 合并分支 +git push/pull 推送/拉取 +git status 查看文件状态 +``` \ No newline at end of file diff --git "a/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day2\347\254\224\350\256\260.md" "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day2\347\254\224\350\256\260.md" new file mode 100644 index 0000000..0cd1925 --- /dev/null +++ "b/2025/\347\254\2544\347\273\204(FRDM-MCXA156)/\350\202\226\346\231\257\345\263\260/\347\254\224\350\256\260/Day2\347\254\224\350\256\260.md" @@ -0,0 +1,111 @@ +# RTT Studio使用 +**1.资源包下载** + 安装STM32F407探索者和qemu的资源包 +**2.新建RTT项目** +**3.打开RT-Thread Settings下载示例** +# 基本知识 +**临界区**:每个进程中访问临界资源的那段程序称之为临界区 +**信号量**:表示可用资源的数量,即线程可访问 +**阻塞**:当程序执行某个操作时,若条件未满足,则主动挂起等待,直到条件满足后才继续执行。 +**非阻塞**:执行操作时无论是否满足条件都立即返回。 +# 创建线程以及应用 +**动态**: + +```c +rt_thread_create(1.线程名字 + 2.入口函数 + 3.入口函数参数 + 4.栈大小 + 5.线程优先级 + 6.线程时间片大小) +``` +**静态**: + +```c +rt_thread_init(1.线程控制块的地址 + 2.线程名字 + 3.入口函数 + 4.入口函数参数 + 5.线程栈起始地址 + 6.栈大小 + 7.线程优先级 + 8.线程时间片大小) +``` +两者区别在于静态的需要提前分配内存,在某些需要保证安全的情况下更合适使用 +**初始化线程**: + +```c +rt_thread_startup(线程名) +``` +**作业**: + +```c +#include +#include +#include + +#define thread_size 512 +#define thread_pri 15 +#define thread_tick 5 + + +#define THREAD1_TICK 10 +#define THREAD2_TICK 20 +#define THREAD3_TICK 30 + +uint16_t sum1, sum2; + + +void thread1_entry() +{ + while(1) + { + rt_kprintf("sum1=%d\n", sum1++); + rt_thread_mdelay(500); + } +} + +void thread2_entry() +{ + while(1) + { + rt_kprintf("sum2=%d\n", sum2++); + rt_thread_mdelay(500); + } +} + +void thread3_entry() +{ + while(1) + { + rt_kprintf("ing......\n"); + rt_thread_mdelay(300); + } +} + + +int main(void) +{ + rt_thread_t thread1 = RT_NULL; + rt_thread_t thread2 = RT_NULL; + rt_thread_t thread3 = RT_NULL; + + thread3 = rt_thread_create("thread3", thread3_entry, RT_NULL, + thread_size, thread_pri, THREAD3_TICK); + thread1 = rt_thread_create("thread1", thread1_entry, RT_NULL, + thread_size, thread_pri, THREAD1_TICK); + + thread2 = rt_thread_create("thread2", thread2_entry, RT_NULL, + thread_size, thread_pri, THREAD2_TICK); + + if(thread3) + rt_thread_startup(thread3); + if(thread1) + rt_thread_startup(thread1); + if(thread2) + rt_thread_startup(thread2); + + return RT_EOK; +} + +``` \ No newline at end of file -- Gitee