芯查查logo
  • 数据服务
    1. 新产品
    2. 物料选型
    3. 查替代
    4. 丝印反查
    5. 查品牌
    6. PCN/PDN
    7. 查方案
    8. 查代理
    9. 数据合作
  • SaaS/方案
      SaaS产品
    1. 供应链波动监控
    2. 半导体产业链地图
    3. BOM管理
    4. 解决方案
    5. 汽车电子
    6. 政府机构
    7. 数据API
  • 商城
  • 行业资讯
    1. 资讯
    2. 直播
  • 论坛社区
    1. 论坛
    2. 学习
    3. 测评中心
    4. 活动中心
    5. 积分商城
  • 查一下
  • 开通会员
忠诚的继电器Rook
给G0001移植rtthread,换一种方式点灯

一、序言

    由于最近在学习rtthread,加上恰逢国庆ICeasy商城活动白嫖了一块G0001开发板,突发奇想给G0001移植rtt,但是碍于G0001少的可怜ROM以及Flash给它移植完整版的是不可能的,这一次给他移植rtt nano (ps:最后移植的结果是成功的但是用处不大只能开一一个线程多个会溢出,因此只建议拿来练习移植,可以看看内存溢出的现象)。


二、开始移植


1、下载rtt nano keil pack,并添加到工程中。pack链接:https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/nano-port-keil/an0039-nano-port-keil


2、打开mm32g0001_it文件将

HardFault_Handler();
PendSV_Handler();
SysTick_Handler();

3个函数注释。(rtt已经定义)


3、前往bord.c文件中配置 rt_hw_board_init(void) 函数,将#error "TODO 1: OS Tick Configuration."注释并添加

SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND);

然后添加

#include "mm32_device.h"
#include "mm32g0001_it.h"

两个头文件。


4、添加如下函数到bord.c文件中

void SysTick_Handler()
{
	 rt_interrupt_enter();
	  rt_tick_increase();
	  rt_interrupt_leave();
}

5、修改#define RT_HEAP_SIZE宏定义的大小,如果没有修改的话,直接编译将会出现内存溢出,这边我试了一下大概是512的时候就是正常的或者是6×128=768也是可以的,但是的话这样的话用那个finsh串口组件的话可能也会有内存溢出的情况因此建议将

#define RT_HEAP_SIZE (6*128)
static rt_uint8_t rt_heap[RT_HEAP_SIZE];
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;
   }

全部注释替换为:

#define G0001_SRAM1_START   (0x20000000)
#define G0001_SRAM1_END     (G0001_SRAM1_START + 2 * 1024)   // 结束地址 = 0x20000000(基址) + 20K(RAM大小)
#if defined(__CC_ARM) || defined(__CLANG_ARM)
extern int Image$$RW_IRAM1$$ZI$$Limit;                   // RW_IRAM1,需与链接脚本中运行时域名相对应
#define HEAP_BEGIN      ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
#endif
#define HEAP_END  G0001_SRAM1_END

void rt_hw_board_init(void) 
{ .... 
#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) 
rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); //修改为这个
#endif 
.... }

指定系统 HEAP 的大小,使用 RAM ZI 段结尾处作为 HEAP 的起始地址(这里需检查与链接脚本是否对应),使用 RAM 的结尾地址作为 HEAP 的结尾地址,这样可以将空余RAM 全部作为动态内存 heap 使用。


6、串口移植略。。。。。。


三、参考资料

1、https://blog.csdn.net/OnlyLove_/article/details/120273430

2、https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-nano/an0038-nano-introduction

四、视频

 

https://www.bilibili.com/video/BV1DU26YsEGa/?spm_id_from=333.999.0.0&vd_source=67c90f92c6e6d9382c31b60edd48cb4e

#FTHR-G0001
版块: 灵动微电子
2024/10/16 19:09
  • 举报
😁😂😃😄😅😆😉😊😋😌😍😏😒😓😔😖😘😚😜😝😞😠😡😢😣😤😥😨😩😪😫😭😰😱😲😳😵😷😸😹😺😻😼😽😾😿🙀🙅🙆🙇🙈🙉🙊🙋🙌🙍🙎🙏✂✅✈✉✊✋✌✏✒✔✖✨✳✴❄❇❌❎❓❔❕❗❤➕➖➗➡➰🚀🚃🚄🚅🚇🚉🚌🚏🚑🚒🚓🚕🚗🚙🚚🚢🚤🚥🚧🚨🚩🚪🚫🚬🚭🚲🚶🚹🚺🚻🚼🚽🚾🛀Ⓜ🅰🅱🅾🅿🆎🆑🆒🆓🆔🆕
@好友

全部评论

加载中
游客登录通知
已选择 0 人
自定义圈子
移动
发布帖子
发布动态
发布问答
最新帖子
【星允派 NEBULA PI】10:cube实现文件系统操作【星允派 NEBULA PI】09:USB虚拟CDC与串口1【星允派 NEBULA PI】08硬件SPI驱动W25Q64【星允派 NEBULA PI】07:IIC驱动24C02【星允派 NEBULA PI】05:调试外部中断
热门版块
查看更多
问型号
问技术
问行情
电子DIY
汽车电子工程师论坛
工业电子专区
新手入门指南
单片机/MCU论坛
PCB设计
开源项目

4

收藏

分享

微信扫码
分享给好友

评论