NCS初探

编程入门 行业动态 更新时间:2024-10-10 06:15:21

<a href=https://www.elefans.com/category/jswz/34/869236.html style=NCS初探"/>

NCS初探

接上一章:NCS初探--基于nRF5340的双核通信

上一章介绍了nrf里基于RPC的双核通信例子,本章介绍一下zephyr里的双核通信例程。

此工程把应用核当成master core,网络核当成remote core,master先发送0到remote,remote收到后+1,然后发回给master,然后master再+1,再发送,一直循环,直到master收到数据+1后>=100则停止。实际效果打印如下图:

 代码下载

首先打开工程,项目目录为

v1.5.1\zephyr\samples\subsys\ipc\rpmsg_service\

在SES中编译好应用核代码后还是推荐使用【west flash】下载。

网络核代码目录为 v1.5.1\zephyr\samples\subsys\ipc\rpmsg_service\remote ,装载项目如下:

 编译完成后直接下载或者使用【west flash】下载。

如果一开始就使用【west build -b nrf5340dk_nrf5340_cpuapp】构建项目,则应用核和网络核代码会一起编译,编译完成后,网络核代码的构建目录路径为:

\v1.5.1\zephyr\samples\subsys\ipc\rpmsg_service\build\rpmsg_service_remote-prefix\src\rpmsg_service_remote-build

你可以直接cd到这个目录使用【west flash】下载。

代码分析

首先看应用核代码,在main()前的初始化,和上一章一样,使用SYS_INIT宏定义:

网络核和应用核通信就是围绕着这个端点展开,而端点ID是区分端点的关键。而在申请端点时,需要传入一个有数据到来的回调函数去处理数据,在应用核该函数如下:

这个回调函数内的信号量是为了告诉某个等待数据的线程,有数据到来。 

在应用核main()里创建了一个线程专门用来发送和接收数据:

有关线程内容并非此章讨论重点,不再展开,只开线程loop函数:

 数据发送很简单,直接调用了库函数:

函数原型:

 获取数据更加简单:

 可以看到,数据其实就是在一开始的回调里获取的,把数据赋值给了一个全局变量,然后释放一个信号量,接收数据即获取信号量,然后返回全局变量的值。

同理,在网络核中,所有函数基本和应用核中一模一样,先申请端点,再创建线程,最后再线程中收发:

 总结

可以看到本章方法比上一章简单很多,数据收发都更为灵活,但是在进程间通信可能引发的数据问题则需要自己去解决,上一章看似繁琐,但是需要考虑的东西反而比较少。

更多推荐

NCS初探

本文发布于:2024-02-13 21:55:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760867.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:NCS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!