当前位置: 首页 > news >正文

做自己的网站给人的启发网络推广主要工作内容

做自己的网站给人的启发,网络推广主要工作内容,杭州建设招标网,宁波最好的seo外包文章目录 1、rpmsg-lite介绍2、rpmsg-lite 应用 现在的芯片非常复杂#xff0c;很多都是包含多个核#xff0c;特别是片上系统#xff08;SoC#xff09;#xff0c;一颗芯片上不仅包含了很多个核心#xff0c;并且很多核心都是异构的。 为了最大限度的发挥他们的性能很多都是包含多个核特别是片上系统SoC一颗芯片上不仅包含了很多个核心并且很多核心都是异构的。 为了最大限度的发挥他们的性能协同完成某一任务不同的核心上面运行的系统可能各不相同有些核心上面运行的通用系统例如 Linux、Android 等另外一些核心上可能运行的就是实时操作系统RTOS等。这些不同架构的核心以及他们上面所运行的软件组合在一起就成了异构多处理系统Asymmetric Multiprocessing System。 异构多处理系统中往往会形成主-从Master-Slave结构。主核上的系统先启动并负责准备好运行环境然后根据需要或者一定规则启动从核并对其进行管理。主-从核心上的系统都准备好之后他们之间就通过 IPCInter Processor Communication方式进行通信而 RPMsg 就是 IPC 中的一种。 RPMsg全称 Remote Processor Messaging它定义了异构多核处理系统AMPAsymmetric Multiprocessing中核与核之间进行通信时所使用的标准二进制接口。 对于非通用的操作系统它上面很可能是没有搭载传统的 TCP/IP 协议栈的因此当主核想要通过 RPC 的方式调用从核上的服务的时候便不能使用一般的 RPC 框架所采用的网络通信方式。这时候类似于 RPMsg 这种专门用于核间通信的通信协议就派上了用场。 1、rpmsg-lite介绍 RPMsg-Lite 是远程处理器消息传递RPMsg协议的轻量级实现。 RPMsg 协议定义了标准化的二进制接口该接口用于在异构多核系统中的多个核之间进行通信。与开放式非对称多处理OpenAMP框架的 RPMsg 实现相比RPMsg-Lite 减少了代码大小简化了 API并提高了模块性。 RPMsg-Lite 是由 NXP Semiconductors 开发并在 BSD 兼容许可下发布的开源组件。 官方仓库为https://github.com/nxp-mcuxpresso/rpmsg-lite 官方详细使用的指南https://nxp-mcuxpresso.github.io/rpmsg-lite 下载 rpmsg-lite 源码后查看源码文件较少 $ tree -L 2 . ├── common │ └── llist.c ├── include │ ├── environment │ ├── llist.h │ ├── platform │ ├── rpmsg_compiler.h │ ├── rpmsg_default_config.h │ ├── rpmsg_env.h │ ├── rpmsg_lite.h │ ├── rpmsg_ns.h │ ├── rpmsg_queue.h │ ├── virtio_ring.h │ └── virtqueue.h ├── rpmsg_lite │ ├── porting │ ├── rpmsg_lite.c │ ├── rpmsg_ns.c │ └── rpmsg_queue.c └── virtio└── virtqueue.c RPMsg-Lite 的实现可以分为三个子组件核心组件位于 rpmsg_lite.c 中rpmsg_ns.c 和 rpmsg_queue.c 是可选的组件。两个可选组件用于实现阻塞接收 API在 rpmsg_queue.c 中和动态“命名”端点创建和删除公告服务在 rpmsg_ns.c 中。 媒体访问层 是在 virtqueue.c 中实现的它是与 OpenAMP 实现共享的少数几个文件之一。该层主要定义了共享内存模型内部定义了使用的组件如vring或virtqueue。 2、rpmsg-lite 应用 nxp 有很多 AMP 的芯片如frdmk32l3a6、imxrt1160、imxrt1170、lpcxpresso55s69、lpcxpresso54114等都是基于 rpmsg-lite 的实现的核间通信可下载对应SDK https://github.com/nxp-mcuxpresso/mcux-sdk-examples 学习。 下面通过 lpcxpresso54114 中的示例展示 rpmsg 中比较典型的 pingpong 应用实现。 lpcxpresso54114 中 master 端是 Cortex-M4 核 remote 端 Cortex-M0 核。 master 端 static void app_nameservice_isr_cb(uint32_t new_ept, const char *new_ept_name, uint32_t flags, void *user_data) {uint32_t *data (uint32_t *)user_data;*data new_ept; }void app_task_master(void *param) {volatile uint32_t remote_addr 0U;struct rpmsg_lite_endpoint *my_ept;rpmsg_queue_handle my_queue;struct rpmsg_lite_instance *my_rpmsg;rpmsg_ns_handle ns_handle;my_rpmsg rpmsg_lite_master_init((void *)RPMSG_LITE_SHMEM_BASE, SH_MEM_TOTAL_SIZE, RPMSG_LITE_LINK_ID, RL_NO_FLAGS);my_queue rpmsg_queue_create(my_rpmsg);my_ept rpmsg_lite_create_ept(my_rpmsg, LOCAL_EPT_ADDR, rpmsg_queue_rx_cb, my_queue);ns_handle rpmsg_ns_bind(my_rpmsg, app_nameservice_isr_cb, (void *)remote_addr);/* Wait until the secondary core application issues the nameservice isr and the remote endpoint address is known. */while (0U remote_addr){};/* Send the first message to the remoteproc */msg.DATA 0U;(void)rpmsg_lite_send(my_rpmsg, my_ept, remote_addr, (char *)msg, sizeof(THE_MESSAGE), RL_DONT_BLOCK);while (msg.DATA 100U){(void)rpmsg_queue_recv(my_rpmsg, my_queue, (uint32_t *)remote_addr, (char *)msg, sizeof(THE_MESSAGE), len,RL_BLOCK);(void)PRINTF(Primary core received a msg\r\n);(void)PRINTF(Message: Size%x, DATA %i\r\n, len, msg.DATA);msg.DATA;(void)rpmsg_lite_send(my_rpmsg, my_ept, remote_addr, (char *)msg, sizeof(THE_MESSAGE), RL_BLOCK);}(void)rpmsg_lite_destroy_ept(my_rpmsg, my_ept);my_ept ((void *)0);(void)rpmsg_queue_destroy(my_rpmsg, my_queue);my_queue ((void *)0);(void)rpmsg_ns_unbind(my_rpmsg, ns_handle);(void)rpmsg_lite_deinit(my_rpmsg);wile (1){vTaskDelay(1000);} }remote 端 static void app_nameservice_isr_cb(uint32_t new_ept, const char *new_ept_name, uint32_t flags, void *user_data) { }void app_task_remote(void *param) {volatile uint32_t remote_addr;volatile rpmsg_ns_handle ns_handle;my_rpmsg rpmsg_lite_remote_init((void *)RPMSG_LITE_SHMEM_BASE, RPMSG_LITE_LINK_ID, RL_NO_FLAGS);rpmsg_lite_wait_for_link_up(my_rpmsg);(void)PRINTF(Link is up!\r\n);my_queue rpmsg_queue_create(my_rpmsg);my_ept rpmsg_lite_create_ept(my_rpmsg, LOCAL_EPT_ADDR, rpmsg_queue_rx_cb, my_queue);ns_handle rpmsg_ns_bind(my_rpmsg, app_nameservice_isr_cb, ((void *)0));/* Introduce some delay to avoid NS announce message not being captured by the master side.This could happen when the remote side execution is too fast and the NS announce message is triggeredbefore the nameservice_isr_cb is registered on the master side. */SDK_DelayAtLeastUs(1000000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);(void)rpmsg_ns_announce(my_rpmsg, my_ept, RPMSG_LITE_NS_ANNOUNCE_STRING, (uint32_t)RL_NS_CREATE);(void)PRINTF(Nameservice announce sent.\r\n);while (msg.DATA 100U){(void)PRINTF(Waiting for ping...\r\n);(void)rpmsg_queue_recv(my_rpmsg, my_queue, (uint32_t *)remote_addr, (char *)msg, sizeof(THE_MESSAGE),((void *)0), RL_BLOCK);msg.DATA;(void)PRINTF(Sending pong...\r\n);(void)rpmsg_lite_send(my_rpmsg, my_ept, remote_addr, (char *)msg, sizeof(THE_MESSAGE), RL_BLOCK);}(void)PRINTF(Ping pong done, deinitializing...\r\n);(void)rpmsg_lite_destroy_ept(my_rpmsg, my_ept);my_ept ((void *)0);(void)rpmsg_queue_destroy(my_rpmsg, my_queue);my_queue ((void *)0);(void)rpmsg_ns_unbind(my_rpmsg, ns_handle);(void)rpmsg_lite_deinit(my_rpmsg);my_rpmsg ((void *)0);msg.DATA 0U;while (1){vTaskDelay(1000);} }
http://www.hkea.cn/news/14456059/

相关文章:

  • 网站建设与熊掌号未来的关系聊城网站那家做的好
  • 网站规划与设计方向免费商标图案 创意
  • 响应式网站的宽度金华网站制作企业
  • 公司建设网站首页国家企业公示平台官网
  • 贵阳百度做网站电话重庆建设工程信息网信息网
  • 做公司网站 找谁做常用的网络营销工具有哪些
  • 做公司网站阿里wordpress 查看全文
  • 做网站英语老师的简历手机网站代理
  • 深圳市珠宝网站建设镇江网站
  • 邯郸网站设计报价wordpress 手机端打开速度慢
  • 不收费推广网站有哪些美团网站建设总体需求与目标
  • 扁平化网站导航ui模板网站费用估算
  • 服务平台app下载上海seo推广服务
  • 襄樊公司网站建设做视频网站怎么看不会卡
  • 网站体验方案抖音企业推广
  • 如何把网站推广即墨有做网站的吗
  • 湖南微信网站公司电话号码门户网站建设费用
  • 桃源县建设局网站wordpress模板是什么意思
  • 建设部网站怎么查安全员网站开发需多少钱
  • wordpress 下拉菜单设置大型企业网站优化
  • 中国空间站简介100字网站建设一龙条
  • 网站建设成都公司wordpress链接 拼音
  • 做我的奴隶 good网站郑州企业网站制作怎么做
  • 资阳房地产网站建设建筑工程网络计划图怎么编制
  • 网站后台内容编辑器下载网站自动识别手机代码
  • 长沙景观设计公司seo优化深圳
  • 嘉兴高端网站建设有限公司百度竞价推广的技巧
  • 电子商务网站管理内容怎么建设自己导购网站
  • 南宁网站开发软件广告联盟wordpress
  • 平顶山北京网站建设动态ppt模板下载免费完整版