[nrf51][nrf52] 移植RTX或者FreeRTOS需要注意的问题

2024-02-17 15:30

本文主要是介绍[nrf51][nrf52] 移植RTX或者FreeRTOS需要注意的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、 使用MDK中的cmsis_os接口,需要查看以下代码是否被启用

/*Setup SVC to reset value.
*/
__STATIC_INLINE void SVC_Setup(void)
{
#if (__ARM_ARCH_7A__ == 0U)/* Service Call interrupt might be configured before kernel start     *//* and when its priority is lower or equal to BASEPRI, svc intruction *//* causes a Hard Fault.                                               */NVIC_SetPriority(SVCall_IRQn, 0U);
#endif
}/* Ensure SVC priority is at the reset value */
SVC_Setup();

原因:由于协议栈中也使用了SVC,这导致APP层调用SVC_Setup();导致协议栈异常。

 

二、 nrf52带BLE协议栈不能使用RTX5或者RTX4

原因大致跟注意(一)差不多

1. 在 RTX 和 Freertos 之外,Freertos 将是目前最好的解决方案。我们暂时在 SDK 中将 RTX 端口设置为“实验性”,因为它还不是 100% 稳定。

2.  RTOS 与我们的软设备同时运行的想法在其核心是不理想的。软设备必须始终具有中断其他任务和运行时序关键协议任务的能力。这使得 RTOS 无法创建不能被中断的安全临界区。

3. 软设备在 nRF52 上启用 FPU 的情况下启用(无意,但这是提出的,将由软设备团队修复)如果启用了 FPU,则需要以不同方式处理 MBR 和软设备中的 SVC 处理程序。如果不与BLE softdevice 结合使用,RTX就能正常使用。

4. 原因是软件设备的 SVC 代码在启用 FPU 时也使用 MSP。对于 RTX 和软件设备,这会导致 MSP 冲突。

官方解释:当将 RTX 从 nRF51 移植到 nRF52 时,RTX 与软设备一起不再稳定。这是因为两者之间的架构差异。在我们使用新形式的临界区和无滴答空闲处理从头开始重新构建 nRF52 RTX 端口之前,支持已被移除。

三、 ANT协议栈问题

在 nRF51 兼容性矩阵中看到的,SDK 12.3.0 不支持 S310 软设备,支持该软设备的最后一个 SDK 是 SDK 10.0.0。

应该可以将 SDK 12.3 中的示例更改为使用 S310 软设备的 API,但没有可用的示例来说明这一点。S310 v3.0.0基于S110 v8.0.0和S210 v5.0.0。SDK 10.0.0 同时支持 S310 和 RTX,因此如果这是您要开发的应用程序,它应该是您应用程序的最佳起点。RTX 应该可以和 S110 softdevice 一起使用。

nRF SDK 不太支持 RTX(SDK 12.x 中仅支持 nRF51,并且在 SDK 13 中完全删除了对 nRF51 支持的支持)。我建议查看 FreeRTOS,它在最新的 SDK 中同时支持 nRF51 和 nRF52 系列。SDK v10.0.0以后的nRF51系列不支持ANT,如果要使用以后的SDK,需要更改softdevice调用或者切换到nRF52系列。 

四、 NRF_CLOCK->EVENTS_LFCLKSTARTED 一直循环死等

1. 在 RTX_Conf_CM.c 的 os_tick_init() 中有一个循环,它不会结束。

while (NRF_CLOCK->EVENTS_LFCLKSTARTED == 0){Do nothing.}

因为上面的行试图用晶体启动低频时钟,而你没有一个,所以它永远不会启动。或者改为内部时钟。(将 CLOCK_LFCLKSRC_SRC_Xtal 更改为 CLOCK_LFCLKSRC_SRC_Synth)

这篇关于[nrf51][nrf52] 移植RTX或者FreeRTOS需要注意的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718211

相关文章

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

element-ui下拉输入框+resetFields无法回显的问题解决

《element-ui下拉输入框+resetFields无法回显的问题解决》本文主要介绍了在使用ElementUI的下拉输入框时,点击重置按钮后输入框无法回显数据的问题,具有一定的参考价值,感兴趣的... 目录描述原因问题重现解决方案方法一方法二总结描述第一次进入页面,不做任何操作,点击重置按钮,再进行下

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

MAVEN3.9.x中301问题及解决方法

《MAVEN3.9.x中301问题及解决方法》本文主要介绍了使用MAVEN3.9.x中301问题及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录01、背景02、现象03、分析原因04、解决方案及验证05、结语本文主要是针对“构建加速”需求交

Nginx、Tomcat等项目部署问题以及解决流程

《Nginx、Tomcat等项目部署问题以及解决流程》本文总结了项目部署中常见的four类问题及其解决方法:Nginx未按预期显示结果、端口未开启、日志分析的重要性以及开发环境与生产环境运行结果不一致... 目录前言1. Nginx部署后未按预期显示结果1.1 查看Nginx的启动情况1.2 解决启动失败的

CentOS系统使用yum命令报错问题及解决

《CentOS系统使用yum命令报错问题及解决》文章主要讲述了在CentOS系统中使用yum命令时遇到的错误,并提供了个人解决方法,希望对大家有所帮助,并鼓励大家支持脚本之家... 目录Centos系统使用yum命令报错找到文件替换源文件为总结CentOS系统使用yum命令报错http://www.cppc