博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
四轴飞行器1.2.1 RT-Thread 环境搭建
阅读量:4961 次
发布时间:2019-06-12

本文共 2222 字,大约阅读时间需要 7 分钟。

 买的飞控板到了,开始写下位机的程序了,本来打算用UCOS的,因为以前用过,比较熟悉,可以很快上手,不过板子的卖家推荐了RT-Thread,以前虽然有接触过,但是没用过,于是去官网看了下,感觉还不错。其一这是咱们国人写的,其二USOS有的基本任务调度功能它都有了,其三它的GUI貌似原生支持中文(不确定),其四他有很多的附加组件,虽然这些组建大部分在以前做项目的时候都自己完成过,并且我并不怎么喜欢集成度太高的RTOS,但是这次可以尝试看看。还有它有些好的环形buffer,可以用来做串口的缓冲,哈,这个以前都是自己写的,有现成的,不过试试它带的也好,同时还集成设备管理功能,可以自己写驱动,我看了下,驱动接口都是些类似于winCE的流驱动的接口函数,我们可以把串口放在它的设备管理里面,用它的流驱动接口试一试。不过不知道稳定性怎么样。

      既然选定用RT-Thread了,第一步就是下源码,可以去官网网站www.rt-thread.org下载,我下的是RT-Thread1.2.1。下下来后目录如下:
根据编程手册可以知道,目录名 描述
bsp                    针对各个具体开发板、平台的目录,其中包含相应的Keil工程文件(如果包含了Keil MDK的移植)
filesystem          包含了RT-Thread的文件系统组件代码
finsh                 包含了RT-Thread的finsh shell组件代码
include             包含了RT-Thread核心的头文件
libc                   面向GCC移植的小型C库
libcpu               面向各个芯片移植的代码
net                   包含了RT-Thread的网络组件代码
rtgui                 包含了RT-Thread/GUI图形用户界面组件代码
src                   包含了RT-Thread内核核心的代码
说明:上图中的 SI 是我SourceInsight的工程目录,和RTT无关。
这个手册可能挺久没更新了,filesystem  只的就是途中的components。rtgui 已经被单独拿出来了,要单独下载,net 包涵在了components里面了。
下下来的文件包涵了很多的平台,飞控板用的是STM32F407的芯片,所以其他平台的文件全部删掉。在bsp目录下可以找到stm32f40x文件夹,这文件夹里面包括了库函数,其他芯片平台的文件夹统统删掉,在libcpu下,只需要将arm文件夹里面的common和cortex-m4留下来,其他的也都统统删掉。还有其他一些辅助性的文件,如:documentation、examples、tools什么的我们也统统删掉,处理完这些后,一个干净的RTT就准备好了,舒爽很多。
接下来 跑嵌入式里面的第一个例子,hello world啊。。哈哈。。
RTT的项目里面就创建了两个线程,在这两个线程里面单独控制两个LED灯,
 
1 //------- init led1 thread 2     rt_thread_init(&thread_led1, 3                    "led1", 4                    rt_thread_entry_led1, 5                    RT_NULL, 6                    &thread_led1_stack[0], 7                    sizeof(thread_led1_stack),11,5); 8     rt_thread_startup(&thread_led1); 9 10     //------- init led2 thread11     rt_thread_init(&thread_led2,12                    "led2",13                    rt_thread_entry_led2,14                    RT_NULL,15                    &thread_led2_stack[0],16                    sizeof(thread_led2_stack),11,5);17 rt_thread_startup(&thread_led2);

分别找到rt_thread_entry_led1和rt_thread_entry_led2两个函数,在里面控制LED灯就可以了。。

1 static void rt_thread_entry_led1(void* parameter) 2 { 3   4  5     while (1) 6     { 7         rt_thread_delay(RT_TICK_PER_SECOND); 8         GPIO_ResetBits(GPIOE,GPIO_Pin_7); 9         rt_thread_delay(RT_TICK_PER_SECOND/3);10         GPIO_SetBits(GPIOE,GPIO_Pin_7);    11         12     }13 }

另一个进程其实也是一样的,控制得灯不一样而已。。。代码比较粗糙,测试用的。。

转载于:https://www.cnblogs.com/adfjhg/p/3871844.html

你可能感兴趣的文章
论坛上的题目--类似于行列转换的,给出我的方法。
查看>>
python--协程之特别篇
查看>>
C++著名程序库的比较和学习经验(STL.Boost.GUI.XML.网络等等)
查看>>
文件链接的创建与删除
查看>>
桥接模式(Bridge)
查看>>
linux用户权限 -> 系统特殊权限
查看>>
WPF 打印
查看>>
Problem A: 分数类的输出
查看>>
自适应网页设计的方法(转)
查看>>
C++内存管理(转)
查看>>
jquery输入文字,实时字数提示
查看>>
毕业设计
查看>>
二、Redis KEY相关命令
查看>>
Win7上装双系统,完美体验Win8(傻瓜操作,简单易懂,亲测成功)
查看>>
Effective C++
查看>>
(转)在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。...
查看>>
Physics Experiment(POJ 3684)
查看>>
[转]如何降低二手烟的危害
查看>>
小白学数据分析----->如何设计和分析数据指标
查看>>
ajax的实现
查看>>