Nordic-RT-Thread5.1.0移植笔记

原创 RTThread物联网操作系统 2024-10-15 18:43


关键词:RT-Thread、v17.1.0、softdevie、BLE、HID、mouse、Nordic、52840

资源获取

  1. nRF5x SDK v17.1.0:https://github.com/cbraissant/nRF5_SDK_17.1.0_ddde560

  2. RT-Thread V5.1.0:https://github.com/RT-Thread/rt-thread

  3. ZJ-SDK-RT-Thread-nRF52840:https://github.com/ZJ-TEK/ZJ-SDK-RT-Thread-NORDIC

env的使用需要学习,必须要配置为右键时显示“ConEmu Here”这个选项。

env第一次启动后,不要移动目录,会造成env相关指令执行失败,删掉env文件夹,重新解压启动即可。

移植准备

  1. 解压 nRF5x SDK v17.1.0 备用,作为工程的主体

  2. 解压 RT-Thread V5.1.0

  • 提取根目录rt-thread-5.1.0\下的RT-Thread相关文件夹备用:

  • 提取 rt-thread-5.1.0\bsp\nrf5x\libraries\drivers 文件夹备用,按需添加到工程

  • 提取 rt-thread-5.1.0\bsp\nrf5x\nrf52840\board 文件夹备用;

  • 提取 rt-thread-5.1.0\bsp\nrf5x\nrf52840\applications 文件夹备用;

 3. 解压 ZJ-SDK-RT-Thread-nRF52840

提取 ZJ-SDK-RT-Thread-NORDIC-master\ZJ_Application_NRF52840\018.ble_nus\NORDIC_SDK\components\libraries\timer 路径下的两个文件备用:

由于当前RT-Thread版本不允许定时器在回调函数里面再次启动定时器,也就是不允许蛇头咬蛇尾。

因此,app_button.c 直接调用 app_timer_rtthread.c 会产生bug,需要通过修改 app_button.c 解决定时器套娃问题。

Keil MDK 移植

RT-Thread源码与相关库添加至nRF5X SDK工程

 1. 打开 ble_app_hids_mouse_pca10056_s140.uvprojx 这个工程,在项目资源管理器内创建四个文件夹,分别命名为:

 2. 添加RT-Thread源文件,并添加头文件路径;

 3. RTT_Kernel 文件夹内的文件需要右键添加配置define __RT_KERNEL_SOURCE__,否则相关文件编译会报错;

 4. RTT_components 文件夹内的文件需要右键添加配置define __RT_IPC_SOURCE__,否则相关文件编译会报错;

 5. nRF_Libraries 文件夹添加 app_timer_rtthread.c,移除或者排除文件夹下的 app_timer2.c drv_rtc.c

必须覆盖掉app_timer.h,否则编译报错。

 6.  ALT + F7 打开工程配置,移除 APP_TIMER_V2APP_TIMER_V2_RTC1_ENABLED 两项配置,并添加 __RTTHREAD__ RTTHREAD_ENABLED

修改前:

修改后:

 7. 需在 rtconfig.h 内添加宏定义 #define RT_TIMER_TICK_PER_SECOND RT_TICK_PER_SECOND,否则 app_timer_rtthread.c 将会出现报错;

 8. 在项目管理器创建 Drivers 文件夹,并添加源文件与头文件;

此处文件来自:

rt-thread-5.1.0\bsp\nrf5x\nrf52840\board

rt-thread-5.1.0\bsp\nrf5x\libraries\drivers

 9. Application 文件夹添加 application.c,移除或者排除文件夹下的 main.c

ble_app_hids_mouse.c 为修改后的main.c,在文件夹内复制修改后,添加到Application文件夹,需要进行如下的修改:

mian.c 命名为 ble_app_hids_mouse.c,并将 mian() 修改为下面这段内容:

 10. 头文件加载路径汇总:

编译无报错,可尝试编译烧录,此时,RT-Thread是可以正常启动的,如果有打印输出,说明可以进入下一步了。

调试报错处理

 1. 不开启BLE,没有报错,LED闪;开启BLE之后,出现RAM报错。

打印 NRF_ERROR_NO_MEM,是内存相关问题,结合上下文,说明可能内存配小了,需要往后挪挪位置。

RAM修改:START 0x20002260 变更为 START 0x20002270Size 倒是可以不用进行修改。

修改前:

修改后:

 2. 启动BLE后,闪灯闪烁一段时间之后 或者 PC端进行连接, 然后LED灯就不闪了。

目测是某些机制没启动,导致跑死了,看起来像是EVENT管理,比如 NRF_SDH_DISPATCH_MODEL 之类的没有执行?

为什么会跑死?

  • NRF_SDH_DISPATCH_MODEL 没有配置好;

极大可能是这个问题,但是,由于是三选一,也不确定是哪个可行。

  • 进入了休眠模式?睡死了?

蓝牙停止广播,理论上不应该让RTOS也睡死。

屏蔽掉进入休眠模式的代码:现象未解除,所以不是睡眠的问题;

通过观察时长,闪烁的时间是30秒左右,而且是打印 Fast advertising. 之后,就没有打印Slow advertising.

根据代码推测,应该是服务切换失败了,而服务在Softdevice里面应该是Event相关的内容出了问题,而与Event相关的是 NRF_SDH_DISPATCH_MODEL 这个值,通过百度搜索可以获取到的可以参考的文章是FreeRTOS的相关移植文章:

52832带softdevice工程移植freertos

https://www.eemaker.com/52832-softdevice-freertos.html

“修改sdk_config.h文件中:NRF_SDH_DISPATCH_MODEL 2

该配置的意思是修改softdevice底层事件到应用层的方式,模式2代表是application主动获取。

在freertos的主动获取的实现就是在我们前面添加的nrf_sdh_freertos.c文件中如果用mode0 中断方式通知到应用层,就不需要添加nrf_sdh_freertos.c文件,但是我测试的时候发现会出现蓝牙断开的情况)”

为什么,FreeRTOS可以使用NRF_SDH_DISPATCH_MODEL

因为官方提供的移植API提供了相关的代码,使用的就是轮询方式。

创建一个Task,然后,在Task里面while()死循环获取事件,相关代码如下:

咨询群友,说是RTOS就应该配置为 2,但是,还是觉得不对劲,总觉得这个事件获取应该是和代码有关,而不是和系统的有无有关。

偶然之下,将 NRF_SDH_DISPATCH_MODEL 的值从 2 设置为 0,解决这个卡死问题,实锤了与系统的有无毫无关联:

0 是中断方式:RT-Thread

1 是app_scheduler:nRF5X SDK Demo

2 是轮询方式:FreeRTOS

中断模式轮询模式 ,这两个哪个更好?不知道了。

Visual Studio + VisualGDB 导入MDK工程

最好是先KEIL MDK搭起来能用的工程,然后再导入到VisualGDB里面,是代码先跑,还是你人先跑,那就不好说了。

创建VisualGDB工程(ARMCC)

 1. 偷懒了,不想一个文件一个文件的添加,直接将Keil MDK的项目直接导入到VisualGDB里;

  • 单击【创建新项目】

  • 选择【嵌入式工程向导】

  • 填写【工程名】【方案名】【方案创建路径】

方案(visualgdb) -> 工程(ble_app_hids_mouse_pca10056_s140)

  • 选择【工程类型】【编译器类型】【工程路径】

  • 选择【MCU】,但是这个界面已配置好,点选【Next】即可

  • 配置 DEBUG的方式,这里选择【J-Llink】、【USB】、【SWD】、【Before programming】、【After programming】,点选【Next】进入下一页

  • 路径映射界面,看不懂,所以直接点击【Finish】结束配置;

完善工程配置(丢失的配置需要补全)

1. 打开左侧的【解决方案资源管理器】,找到筛选器【::Device】,添加图里面的这两个文件到筛选器;

Keil工程也有添加这两个文件,但是,导入工程时丢失了。

 2. 执行上述操作后,此时应该还有部分文件没有导入,如果右上角提示有文件没有include,直接点击确认包含即可;

 3. 找到 main.c ,app_timer2.c, drv_rt.c ,nrf_sdh_ble_rtt.c ,ble_conn_params_rtt.c 这几个文件:右键 - 属性- Keil Settings - Excluded From Build -> 【是】

 4.【右键】点击【ble_app_hids_mouse_pca10056_s140】弹出选单,选择【属性】进入工程配置界面:

 5. ble_app_hids_mouse_pca10056_s140 工程配置:

  • 配置应用程序二进制接口:Keil Settings -> Floating-point ABI : Hardware FP (-mfloat-abi=hard)

  • 配置浮点单元类型:Keil Settings -> Floating-point unit type : fpv4-sp-d16 (-mfpu=fpv4-sp-d16)

  • 配置ARM CPU类型:Keil Settings -> ARM CPU type : -mcpu=arm7m

  • 配置ARMCC CPU类型:Keil Settings -> CPU Type for ARMCC/ARMASM : Cortex-M4.fp.sp (--cpu=Cortex-M4.fp.sp)

  • 添加预编译器定义:C/C++ -> Preprocessor -> Preprocessor Definitions :

    __RTTHREAD__;RTTHREAD_ENABLED;BOARD_PCA10056;BOARD_PCA10059;NRF52840_XXAA;CONFIG_GPIO_AS_PINRESET;

    FLOAT_ABI_HARD;NRF_SD_BLE_API_VERSION=7;S140;SOFTDEVICE_PRESENT;__HEAP_SIZE=8192;__STACK_SIZE=8192;

    Keil MDK是用的”,“与” “进行宏的分隔,而VisualGDB只能用”;“去分隔,进入到编辑界面之后,回车换行即可,退出编辑之后,回车会自动转换为”;“

  • 配置C/C++语言标准:C/C++ -> Advanced -> Language Standard for C++ files : C99 (--c99)

  • 配置GNU拓展:C/C++ -> Advanced -> Enable GNU Language Extensions : 否

  • 配置ROM与RAM映射:Linker -> Memory Layout -> Scatter Files : ..\examples\ble_peripheral\ble_app_hids_mouse\pca10056\s140\visualgdb\ble_app_hids_mouse_pca10056_s140\nrf52840_xxaa.sct

    如果一开始就是直接作为GCC直接导入,可以从RT-Thread获取模板:

    rt-thread-5.1.0\bsp\nrf5x\libraries\templates\nrfx\board\linker_scripts

    link.sct简单修改:

  • link.lds简单修改:

  • 目前使用的是ARMCC,使用GCC时,内存相关的打印还要根据编译器进行启动地址的打印 :

  • 时候,一般就编译成功了,有一堆警告,但是,没关系的。

    注意,导入成功了,不要随便切回Keil MDK进行编辑,否则再次启动VisualGDB触发改动检测的。

RTThread物联网操作系统 帮助您了解RT-Thread相关的资讯.
评论 (0)
  • 文/Leon编辑/cc孙聪颖‍步入 2025 年,国家进一步加大促消费、扩内需的政策力度,家电国补政策将持续贯穿全年。这一利好举措,为行业发展注入强劲的增长动力。(详情见:2025:消费提振要靠国补还是“看不见的手”?)但与此同时,也对家电企业在战略规划、产品打造以及市场营销等多个维度,提出了更为严苛的要求。在刚刚落幕的中国家电及消费电子博览会(AWE)上,家电行业的竞争呈现出胶着的态势,各大品牌为在激烈的市场竞争中脱颖而出,纷纷加大产品研发投入,积极推出新产品,试图提升产品附加值与市场竞争力。
    华尔街科技眼 2025-04-01 19:49 239浏览
  • 北京贞光科技有限公司作为紫光同芯授权代理商,专注于为客户提供车规级安全芯片的硬件供应与软件SDK一站式解决方案,同时配备专业技术团队,为选型及定制需求提供现场指导与支持。随着新能源汽车渗透率突破40%(中汽协2024数据),智能驾驶向L3+快速演进,车规级MCU正迎来技术范式变革。作为汽车电子系统的"神经中枢",通过AEC-Q100 Grade 1认证的MCU芯片需在-40℃~150℃极端温度下保持μs级响应精度,同时满足ISO 26262 ASIL-D功能安全要求。在集中式
    贞光科技 2025-04-02 14:50 218浏览
  • 职场之路并非一帆风顺,从初入职场的新人成长为团队中不可或缺的骨干,背后需要经历一系列内在的蜕变。许多人误以为只需努力工作便能顺利晋升,其实核心在于思维方式的更新。走出舒适区、打破旧有框架,正是让自己与众不同的重要法宝。在这条道路上,你不只需要扎实的技能,更需要敏锐的观察力、不断自省的精神和前瞻的格局。今天,就来聊聊那改变命运的三大思维转变,让你在职场上稳步前行。工作初期,总会遇到各式各样的难题。最初,我们习惯于围绕手头任务来制定计划,专注于眼前的目标。然而,职场的竞争从来不是单打独斗,而是团队协
    优思学院 2025-04-01 17:29 241浏览
  • 探针本身不需要对焦。探针的工作原理是通过接触被测物体表面来传递电信号,其精度和使用效果取决于探针的材质、形状以及与检测设备的匹配度,而非对焦操作。一、探针的工作原理探针是检测设备中的重要部件,常用于电子显微镜、坐标测量机等精密仪器中。其工作原理主要是通过接触被测物体的表面,将接触点的位置信息或电信号传递给检测设备,从而实现对物体表面形貌、尺寸或电性能等参数的测量。在这个过程中,探针的精度和稳定性对测量结果具有至关重要的影响。二、探针的操作要求在使用探针进行测量时,需要确保探针与被测物体表面的良好
    锦正茂科技 2025-04-02 10:41 112浏览
  • 随着汽车向智能化、场景化加速演进,智能座舱已成为人车交互的核心承载。从驾驶员注意力监测到儿童遗留检测,从乘员识别到安全带状态判断,座舱内的每一次行为都蕴含着巨大的安全与体验价值。然而,这些感知系统要在多样驾驶行为、复杂座舱布局和极端光照条件下持续稳定运行,传统的真实数据采集方式已难以支撑其开发迭代需求。智能座舱的技术演进,正由“采集驱动”转向“仿真驱动”。一、智能座舱仿真的挑战与突破图1:座舱实例图智能座舱中的AI系统,不仅需要理解驾驶员的行为和状态,还要同时感知乘员、儿童、宠物乃至环境中的潜在
    康谋 2025-04-02 10:23 181浏览
  • 提到“质量”这两个字,我们不会忘记那些奠定基础的大师们:休哈特、戴明、朱兰、克劳士比、费根堡姆、石川馨、田口玄一……正是他们的思想和实践,构筑了现代质量管理的核心体系,也深远影响了无数企业和管理者。今天,就让我们一同致敬这些质量管理的先驱!(最近流行『吉卜力风格』AI插图,我们也来玩玩用『吉卜力风格』重绘质量大师画象)1. 休哈特:统计质量控制的奠基者沃尔特·A·休哈特,美国工程师、统计学家,被誉为“统计质量控制之父”。1924年,他提出世界上第一张控制图,并于1931年出版《产品制造质量的经济
    优思学院 2025-04-01 14:02 159浏览
  • 据先科电子官方信息,其产品包装标签将于2024年5月1日进行全面升级。作为电子元器件行业资讯平台,大鱼芯城为您梳理本次变更的核心内容及影响:一、标签变更核心要点标签整合与环保优化变更前:卷盘、内盒及外箱需分别粘贴2张标签(含独立环保标识)。变更后:环保标识(RoHS/HAF/PbF)整合至单张标签,减少重复贴标流程。标签尺寸调整卷盘/内盒标签:尺寸由5030mm升级至**8040mm**,信息展示更清晰。外箱标签:尺寸统一为8040mm(原7040mm),提升一致性。关键信息新增新增LOT批次编
    大鱼芯城 2025-04-01 15:02 225浏览
  • 文/郭楚妤编辑/cc孙聪颖‍不久前,中国发展高层论坛 2025 年年会(CDF)刚刚落下帷幕。本次年会围绕 “全面释放发展动能,共促全球经济稳定增长” 这一主题,吸引了全球各界目光,众多重磅嘉宾的出席与发言成为舆论焦点。其中,韩国三星集团会长李在镕时隔两年的访华之行,更是引发广泛热议。一直以来,李在镕给外界的印象是不苟言笑。然而,在论坛开幕前一天,李在镕却意外打破固有形象。3 月 22 日,李在镕与高通公司总裁安蒙一同现身北京小米汽车工厂。小米方面极为重视此次会面,CEO 雷军亲自接待,小米副董
    华尔街科技眼 2025-04-01 19:39 245浏览
  • 在智能交互设备快速发展的今天,语音芯片作为人机交互的核心组件,其性能直接影响用户体验与产品竞争力。WT588F02B-8S语音芯片,凭借其静态功耗<5μA的卓越低功耗特性,成为物联网、智能家居、工业自动化等领域的理想选择,为设备赋予“听得懂、说得清”的智能化能力。一、核心优势:低功耗与高性能的完美结合超低待机功耗WT588F02B-8S在休眠模式下待机电流仅为5μA以下,显著延长了电池供电设备的续航能力。例如,在电子锁、气体检测仪等需长期待机的场景中,用户无需频繁更换电池,降低了维护成本。灵活的
    广州唯创电子 2025-04-02 08:34 175浏览
  • 退火炉,作为热处理设备的一种,广泛应用于各种金属材料的退火处理。那么,退火炉究竟是干嘛用的呢?一、退火炉的主要用途退火炉主要用于金属材料(如钢、铁、铜等)的热处理,通过退火工艺改善材料的机械性能,消除内应力和组织缺陷,提高材料的塑性和韧性。退火过程中,材料被加热到一定温度后保持一段时间,然后以适当的速度冷却,以达到改善材料性能的目的。二、退火炉的工作原理退火炉通过电热元件(如电阻丝、硅碳棒等)或燃气燃烧器加热炉膛,使炉内温度达到所需的退火温度。在退火过程中,炉内的温度、加热速度和冷却速度都可以根
    锦正茂科技 2025-04-02 10:13 104浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦