NCS初探--基于nRF5340的双核通信(2)

接上一章: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函数:

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

函数原型:

 获取数据更加简单:

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

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

 总结

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值