当前位置:首页 > 教程攻略 > 正文

RT-Thread Studio教程,rt thread studio教程

有很多刚开始接触这个发开环境的小伙伴们肯定不太懂怎么去安装以及创建项目,今天小编给大家带来了详细的RT-Thread Studio教程,其中有安装步骤和项目的创建步骤,有需要的小伙伴赶紧看看呀!

RT-Thread Studio使用教程:

一、新建项目
1、在项目资源管理器窗口内点击右键,选择新建子菜单项目,如下图所示:

2、在弹出的新建项目向导对话框中选择RT-Thread项目类型,然后点击下一步如下图所示:

3、填写工程名,选择 RT-Thread 源码版本,选择对应的 BSP,然后点击完成按钮,如下图所示:

4、点击完成后,等待工程创建过程如下图所示:

5、工程创建成功后项目资源管理器窗口会出现刚创建的工程test,如下图所示:

二、配置项目
双击RT-Thread Settings文件,打开 RT-Thread 项目配置界面,配置界面默认显示软件包以及组件和服务层的架构配置图界面,如下图所示:

点击架构图配置界面右侧侧栏按钮,即可打开配置树配置界面,如下图所示:

配置完成后,保存配置退出配置界面后,RT-Thread Studio 会自动将配置应用到项目中,比如会自动下载相关资源文件到项目中并设置好项目配置,确保项目配置后能够构建成功,如下图所示:

三、构建项目
点击工具栏上的构建按钮对项目进行构建。如下图所示:

构建的过程日志在控制台进行打印,如下图所示:

四、下载程序
当项目构建成功后,点击工具栏下载程序按钮旁的三角下拉框选择相应的烧写器,以J-Link烧写器为例,如下图所示:

选择完烧写器后可直接点击下载程序按钮进行程序下载,下载日志会在控制台窗口打印,如下图所示:

五、启动调试
选中test工程,然后点击工具栏调试按钮,如下图所示:

当成功启动调试后,RT-Thread Studio 会自动跳转到调试透视图,在调试透视图可以进行各种调试功能操作。当停止调试后会自动跳转会 C 透视图,如下图所示:

RT-Thread workqueue 详解

在学习之前可以先去了解一下工作队列的使用场景: 工作队列 ( workqueue ) 。 简而言之,工作队列就是将一些工作任务的执行延迟,交由内核线程异步执行。 最简单的使用方式就是开启 RT-Thread 的系统工作线程(System workqueue),而我们往系统工作线程里提交工作项(work item)即可。 RT-Thread 其实给我们提供了一个系统工作线程了,但很少有人知道。配置选项路径如下图所示: 依次选中上述这些选项,就能够开启系统工作队列了。而且还可以看到工作队列线程的栈大小默认为 2048,优先级为 23 。 这样系统在初始化的时候就创建了系统工作队列了,名字叫作 sys_work ,在终端输入 ps 能够看到该线程。 如何向系统工作线程里添加工作项呢? rt_work_submit() 用于向系统工作队列添加工作项, rt_work_cancel() 用于从系统工作队列中取消某一个工作项。 当然,在提交工作项时,需要初始化该工作项,绑定相应的回调函数和用户指针,接口如下: 这样,我们就可以随时随地地提交工作任务执行了,极大地方便了程序的组织。 用一个小颤扮例程测试一下: 在 qemu 项目里的 main.c 里输入: 然后执行就能看到下述效果,与工作项绑定的任务被异步执行了,而且工作项 1 延迟了 2 个 tick 才执行。 rt_workqueue 的接口有很多,我们只需要关注常用的即可。 首先使用 rt_workqueue_create() 创建一个工作队列,然后使用 rt_workqueue_submit_work() 提交工作项,使用 rt_workqueue_cancel_work() 取消工作项,当茄大灶然还可以使用 rt_workqueue_destroy() 销毁一个工作队列。其他的接口有兴趣的可以了解,但常用的就是仿铅上面这四种。 这里提交任务与上述使用系统工作队列的唯一不同之处就是我们需要手动指定工作队列,其他的都是一模一样的。 用一个小例程测试一下: 在 qemu 项目里的 main.c 里输入: 然后执行就能看到下述效果,与工作项绑定的任务被异步执行了,而且工作项 1 延迟了 2 个 tick 才执行。 关于实现部分我这里不介绍具体细节,做了一些动画给大家展示一下内部过程 工作队列里面有一个线程(workthread),这个线程的任务就是不断地从挂载链表(worklist)里提取工作项执行,若没有则休眠。 然后提交工作项时,若延迟时间 time 大于 0,则启动该工作项的定时器,定时结束后再加入挂载链表(worklist)。 若提交工作项时延迟实际等于 0,则直接将该工作项挂加入到挂载链表(worklist)。 当然,工作项的定时器超时后,会自动将该工作项加入到挂载链表(worklist)。

RT_Thread组件开发

当重启开发板直接挂载文件系统,就会看到 spi flash mount to /spi failed! 的提示,因为此时山瞎在 SPI Flash 中还没有创建相应类型的文件系统。 文件系统的挂载指的是将文件系统和具体的存储设备关联起来,并挂载到某个挂载点,这个挂载点即为这个文逗纤空件系统的根目录。 [图片上传失败...(image-dd0ae4-1563508716000)] 在 github 上有一份独立仓库: rtthread-apps ,这份仓库中放置了一些和动态模块。 ​ 编译成功会生成xxx.mo文件,将文件放置到rt-thread的文件系统上,就可以执行。 在msh命令中输入list_symbol命令。可以看到内核符号表(kernel symbol table)所竖丛映射的函数,这些函数就是模块模块开发当前能使用的函数 上述函数主要来自于rt-thread/src/xx.c文件、rt-thread/components/使用的组件xxx/src/xx.c文件 通过宏定义RTM_EXPORT(symbol) ,可以将函数导出到符号表。 rt_dlmodule结构体 动态模块API函数在rt-thread\components\libc\libdl\dlmodule.c文件中定义。 停止动态模块

rt-thread建立两个线程,一个线程开灯,一个线程灭灯,怎么循环打印

rt-thread建立两个线程,一个线程开灯,一个线程灭灯,怎么循环打印。1、wait方式茄基是让当前持有锁的线程进入等待队列(不是阻塞队列),调用了wait方法后,当前线程就不会执行wait之后的代码逻辑了,所以notify方法必须在wait方法之前。2、需要在循环结束后,加上notify,因为当其中一个线程正常执行完后,另一个线程一定还处于等待队列,所以最后需要被唤醒,如果不写,则虽然能正常打印出结果,但是程序不会结束。神渣3、要保证两个线程的开始顺序,因为thread.start方法,并不是先调游纳悄用就一定是先调用的线程先执行,所以可以用countdownlatch来保证打印顺序的开始。

热门阅读

最新文章