查看: 2771|回复: 4

[原创] 【LPC11U68】+RT Thread nano移植

[复制链接]
  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2193
    最后登录
    2023-12-1
    发表于 2018-11-12 12:32:10 | 显示全部楼层 |阅读模式
    以后多玩玩RTT,感觉还是很不错的。为什么要移植RTT nano,因为我们做嵌入式的跑RTOS一般就只跑了RTOS的内核,驱动啥的自己写更接近底层,更接近硬件,而且自己暂时也没有学习RTT的驱动方式。

    11U68移植RTT也很简单,复制RTT的内核文件,然后配置一下相应的函数,参考了火哥的RTT的书籍,昨天也是刚入手了一本纸质版的还没到货。
    1、下载RTT Nano的源码,可以在keil的官网下载,直接在pack窗口安装

    3.png
    安装好了再keil的pack文件夹里面将源码抠出来,
    4.png
    复制这个文件夹到我们的工程目录里面(防止工程复制到另一台没有装rtt pack的电脑不支持,这里不直接在keil里面添加RTOS)
    5.png
    在rt-thread\bsp下新建LPC11U68文件夹,将bsp文件夹下的rtconfig.h移动到LPC11U68文件夹下,把只读属性去掉。
    2、打开KEIL工程,新建RT-Thread目录,添加RTT的源码,总共18个,在rt-thread\src下面15个.c文件,在rt-thread\libcpu\arm\cortex-m0下添加cupport.c和context_rvds.S(根据编译器选择),在rt-thread\bsp\lpc11u68下添加rtconfig.h
    6.png


    3、添加头文件路径,就3个
    7.png

    4、修改rtconfig.h文件,代码太多,根据需要配置,附件里面的rtconfig.h添加了中文注释
    5、在board.c(没有的话就新建一个)里面添加void rt_hw_board_init()硬件初始化函数和void rt_hw_console_output(const char *str)串口配置函数void SysTick_Handler(void)滴答定时器中断函数
    第一三个函数在rt-thread\bsp文件夹下面有,复制过来把原来的内容屏蔽掉,第二个函数是关于rt_kprintf的,在finish文件夹下面,这里暂时没有用到finish,所以重写一下这个函数。
    1. void rt_hw_console_output(const char *str)
    2. {
    3.         //进入临界段
    4.         rt_enter_critical();
    5.         while(*str!='\0')
    6.         {
    7.                 if(*str=='\n')
    8.                 {
    9.                         while (!(LPC_USART0->LSR & 0x20));                //等待发送完成
    10.                         LPC_USART0->THR = '\r';                                                                //写入待发送的字符寄存器方式
    11.                         //Chip_UART0_SendBlocking(LPC_USART0,"\r",1);        //写入待发送的字符库函数方式
    12.                 }
    13.                 while (!(LPC_USART0->LSR & 0x20));
    14.                 LPC_USART0->THR = *str++;
    15.                 //Chip_UART0_SendBlocking(LPC_USART0,(const char*)str++,1);
    16.         }
    17.         //退出临界段
    18.         rt_exit_critical();
    19. }


    20. /**
    21. * This function will initial your board.
    22. */
    23. void rt_hw_board_init()
    24. {       
    25.         /* System Clock Update */
    26.         /*配置系统时钟*/
    27.         SystemCoreClockUpdate();
    28.        
    29.         /* System Tick Configuration */
    30.         /* Enable and setup SysTick Timer at a periodic rate */
    31.         /*配置systick为1ms中断供RTT使用*/
    32.         SysTick_Config(SystemCoreClock / 1000);
    33.        
    34.         /*硬件初始化,包括LED和串口引脚的配置*/
    35.         Board_Init();
    36.        
    37.         /*初始化一个GPIO*/
    38.         Chip_GPIO_SetPinDIROutput(LPC_GPIO, 0, 7);

    39.     /* Call components board initial (use INIT_BOARD_EXPORT()) */
    40. #ifdef RT_USING_COMPONENTS_INIT
    41.     rt_components_board_init();
    42. #endif
    43.    
    44. #if defined(RT_USING_CONSOLE) && defined(RT_USING_DEVICE)
    45.         rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
    46. #endif
    47.    
    48. #if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP)
    49.     rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get());
    50. #endif
    51. }

    52. void SysTick_Handler(void)
    53. {
    54.         /* enter interrupt */
    55.         rt_interrupt_enter();

    56.         rt_tick_increase();

    57.         /* leave interrupt */
    58.         rt_interrupt_leave();
    59. }
    复制代码
    6、RTT已经基本移植完成了,这里可以调用rt_kprintf打印了。
    7、新建线程
    这里新建一个LED灯闪烁的线程
    1. <blockquote>#include "board.h"
    复制代码
    这里main函数不再进行硬件初始化的,刚刚的函数里面已经进行的初始化。
    8、下载运行,LED闪烁,串口打印RTT的版本信息。
    9、仿真一下我们就会知道程序并不是从我们的main函数里面执行的。
    8.png
    所以硬件的初始化可以放在RTT的硬件初始化里面也可以放在我们的main里面,当然时钟初始化要放在rt_hw_board_init()函数里。
    RTT工程模板.zip (5.75 MB, 下载次数: 22)
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    11 小时前
  • 签到天数: 823 天

    [LV.10]以坛为家III

    71

    主题

    2454

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5538
    最后登录
    2024-5-8
    发表于 2018-11-12 13:21:48 | 显示全部楼层
    谢谢分享
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 20:36
  • 签到天数: 1484 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    93044
    最后登录
    2024-5-7
    发表于 2018-11-12 22:07:15 | 显示全部楼层
    不错哦~~~
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2021-8-25 16:50
  • 签到天数: 57 天

    [LV.5]常住居民I

    20

    主题

    185

    帖子

    12

    金牌会员

    Rank: 6Rank: 6

    积分
    1275
    最后登录
    2024-4-8
    发表于 2018-11-13 09:02:45 | 显示全部楼层
    可以可以,有质量的帖子
    签到
    回复 支持 反对

    使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2193
    最后登录
    2023-12-1
     楼主| 发表于 2018-11-13 10:12:56 | 显示全部楼层
    不言而喻hgj 发表于 2018-11-13 09:02
    可以可以,有质量的帖子

    谢谢支持
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-8 12:02 , Processed in 0.141984 second(s), 26 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表