zoukankan      html  css  js  c++  java
  • 四轴飞行器1.2.1 RTThread 环境搭建

     买的飞控板到了,开始写下位机的程序了,本来打算用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 thread
    11     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 }

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

  • 相关阅读:
    JavaScript对象与JSON字符串的相互转换
    IE6下javascript:void(0)不可用的解决
    mybatis-spring集成:配置多数据库源中遇到的问题
    网易免费企业邮箱Foxmail设置方法
    ARM Linux 驱动Input子系统之按键驱动测试
    arm Linux 驱动LED子系统 测试
    AM335x内核模块驱动之LED
    ARM开发板搭建NFS网络文件共享方法
    AM335x开发板与PC机虚拟机建立tftp文件传输
    am335xSD卡启动--文件系统制作
  • 原文地址:https://www.cnblogs.com/adfjhg/p/3871844.html
Copyright © 2011-2022 走看看