打印
[应用相关]

RT-Thread移植到STM32

[复制链接]
楼主: gaoke231
手机看帖
扫描二维码
随时随地手机跟帖
21
gaoke231|  楼主 | 2019-5-28 14:47 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
将stm32f10x_it.c文件中的对应中断函数PendSV_Handler、HardFault_Handler、 SysTick_Handler屏蔽,再次编译就不会报错了。

使用特权

评论回复
22
gaoke231|  楼主 | 2019-5-28 15:31 | 只看该作者
虽然这里的RT-Thread工程已经移植好了,我们还是需要对一些配置进行修改,进一步了解RT-Thread!

使用特权

评论回复
23
gaoke231|  楼主 | 2019-5-28 15:32 | 只看该作者
修改rtconfig.h文件,rtconfig.h 是直接从 RT-Thread/3.0.3/bsp 文件夹下面拷贝过来的,该头文件对裁剪整个RT-Thread 所需的功能的宏均做了定义,有些宏定义被使能,有些宏定义被失能,一开始我们只需要配置最简单的功能即可,要想随心所欲的配置 RT-Thread 的功能,我们必须对这些宏定义的功能有所掌握。

使用特权

评论回复
24
gaoke231|  楼主 | 2019-5-28 15:39 | 只看该作者
#define RT_THREAD_PRIORITY_MAX  8
//表示 RT-Thread 支持多少个优先级,取值范围为 8~256,默认为 32。

使用特权

评论回复
25
gaoke231|  楼主 | 2019-5-28 15:52 | 只看该作者
#define RT_TICK_PER_SECOND        1000
//表示操作系统每秒钟有多少个 tick即是操作系统的时钟周期,默认为 1000,即操作系统的时钟周期 tick 等于 1ms。

使用特权

评论回复
26
gaoke231|  楼主 | 2019-5-28 15:52 | 只看该作者
#define RT_ALIGN_SIZE  4
//表示 CPU 处理的数据需要多少个字节对齐,默认为 4 个字节
#define RT_NAME_MAX         8
//表示内核对象名字的最大长度,取值范围为 2~16,默认为 8。

使用特权

评论回复
27
gaoke231|  楼主 | 2019-5-28 15:54 | 只看该作者
#define RT_USING_COMPONENTS_INIT
//RT-Thread 组件初始化,默认使能
#define RT_USING_USER_MAIN
//使用用户 main 函数,默认打开

使用特权

评论回复
28
gaoke231|  楼主 | 2019-5-28 15:57 | 只看该作者
#define RT_MAIN_THREAD_STACK_SIZE    512
// main 线程栈大小,取值范围为 1~4086,单位为字节,默认为512
#define RT_DEBUG_INIT   0
//调试配置。包括了内核调试配置,组件调试配置和线程栈溢出检测,目前全部关闭

使用特权

评论回复
29
gaoke231|  楼主 | 2019-5-28 16:00 | 只看该作者
#define RT_USING_TIMER_SOFT  0
//软件定时器配置,目前关闭,不使用软件定时器
#define RT_USING_SEMAPHORE
//内部通信配置,包括信号量、互斥量、事件、邮箱和消息队列,根据需要配置

使用特权

评论回复
30
gaoke231|  楼主 | 2019-5-28 16:38 | 只看该作者
#define RT_USING_SMALL_MEM
//内存管理配置
#define RT_USING_CONSOLE
//控制台配置。控制台即是 rt_kprintf()函数调试输出的设备,通常使用串口。

使用特权

评论回复
31
gaoke231|  楼主 | 2019-5-28 16:39 | 只看该作者
修改board.c,board.c 是直接从 RT-Thread/3.0.3/bsp 文件夹下面拷贝过来的, 里面存放的是与硬件相关的初始化函数,
static uint32_t _SysTick_Config(rt_uint32_t ticks)
//相关的寄存器定义和初始化函数,这个是跟处理器相关的,直接使用固件库函数,将其注释。

使用特权

评论回复
32
gaoke231|  楼主 | 2019-5-28 19:02 | 只看该作者
void *rt_heap_begin_get(void)  void *rt_heap_end_get(void)
//RT-Thread 堆配置,如果同时定义了 RT_USING_USER_MAIN 和RT_USING_HEAP 这两个宏, 表示 RT-Thread 里面创建内核对象时使用动态内存分配方案。

使用特权

评论回复
33
gaoke231|  楼主 | 2019-5-28 22:02 | 只看该作者
void rt_hw_board_init()
//RT-Thread 启动的时候会调用一个名为 rt_hw_board_init()的函数,从函数名称我们可以知道它是用来初始化开发板硬件的,比如时钟,比如串口等。

使用特权

评论回复
34
gaoke231|  楼主 | 2019-5-28 22:26 | 只看该作者
void SysTick_Handler(void)
//SysTick 中断服务函数是一个非常重要的函数, RT-Thread 所有跟时间相关的事情都在里面处理。

使用特权

评论回复
35
gaoke231|  楼主 | 2019-5-28 22:26 | 只看该作者
在 user 目录下新建一个 board.h 头文件,用来包含固件库和BSP 相关的头文件

使用特权

评论回复
36
gaoke231|  楼主 | 2019-5-28 22:27 | 只看该作者
board.h 头文件中代码如下

使用特权

评论回复
37
zchong| | 2019-5-29 07:46 | 只看该作者
env秒秒钟搞定啊

使用特权

评论回复
38
yzai| | 2019-5-29 08:16 | 只看该作者
准备学习用rtthread

使用特权

评论回复
39
gaoke231|  楼主 | 2019-5-29 10:15 | 只看该作者
修改board.c中的代码,具体如下:
#include "board.h"
#include <rthw.h>
#include <rtthread.h>
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
#define RT_HEAP_SIZE 1024
static uint32_t rt_heap[RT_HEAP_SIZE];        // heap default size: 4K(1024 * 4)
RT_WEAK void *rt_heap_begin_get(void)
{
    return rt_heap;
}

RT_WEAK void *rt_heap_end_get(void)
{
    return rt_heap + RT_HEAP_SIZE;
}
#endif

/**
* This function will initial your board.
*/
void rt_hw_board_init()
{       
        /* System Clock Update */
        SystemCoreClockUpdate();
    /* Call components board initial (use INIT_BOARD_EXPORT()) */
#ifdef RT_USING_COMPONENTS_INIT
    rt_components_board_init();
#endif
#if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
        rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
#endif
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
#endif
}
void SysTick_Handler(void)
{
        /* enter interrupt */
        rt_interrupt_enter();
        rt_tick_increase();
        /* leave interrupt */
        rt_interrupt_leave();
}


使用特权

评论回复
40
观海| | 2019-6-18 09:25 | 只看该作者
非常详细感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则