异构R5实时系统开发笔记-基于芯驰D9360

米尔电子嵌入式 2024-06-13 08:00

本篇测评由与非网的优秀测评者“短笛君”提供。


本文将介绍基于米尔电子MYD-YD9360商显板的R5协处理器开发方案测试。

本处参考对D9360中的协处理器进行开发测试

开发之前请确认编译环境正常可以正常对镜像进行编译

具体参考之前编译Ubuntu系统文章,自行编译buildroot系统测试

1.1打开RTOS驱动

freeRTOS的源码放在ssdk包下面,我们可以通过图形化界面启动RTOS系统。D9的ssdk图形化界面是通过menuconfig.sh脚本配置打开,此脚本在ssdk/tools下。以D9360为例,如下:

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk$ pwd/home/ddj/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk
~/MYD-JD9X-ubuntu/MYD-JD9X-SDK_V1.0/source/ssdk$ ./tools/menuconfig.sh -b d9360_ref -p ref -c secure


1.2 添加RTOS例程驱动

RTOS系统例程在examples/kunlun/drivers

ddj@ubuntu:~/YD9X/MYD-YD9X-SDK_V1.0/source/ssdk/examples/kunlun/drivers$ ls


新建一个abc目录

并配置Kconfig和rules.mk文件


返回driver目录下 配置Kconfig添加ABC去东门模块初始状态和图形界面类型

ABC驱动模块的初始状态和图形界面类型


在rules.mk文件下,添加如下内容


MODULES += $(LOCAL_DIR)/abc: 如果配置选项 CONFIG_ABC_TEST 为 "y",则会将 $(LOCAL_DIR)/abc 添加到变量 MODULES 中。这意味着当启用了 "ABC Test" 功能时,会将 $(LOCAL_DIR)/abc 模块添加到模块列表中。

R5核数据发送到A55核中

将rpmsg目录下的rpmsg_test.c文件复制到abc.c文件中,该驱动描述如何通过RPMSG协议进行核间通信。我们可以在此程序基础上加入自己的协议,以下是R5核发送“Hello, RPMSG!”字符串到A55核,并打印出接收到的信息的函数。

void send_receive_string(rpmsg_channel_t channel, const char *message) {
int max_payload; struct dcf_ccm_hdr *snd_pkg; struct dcf_ccm_hdr *rcv_pkg; status_t ret;
max_payload = rpmsg_channel_max_payload(channel); snd_pkg = osAlloc(max_payload); rcv_pkg = osAlloc(max_payload); ASSERT(snd_pkg && rcv_pkg);
memset(snd_pkg, 0x0, max_payload); memset(rcv_pkg, 0x0, max_payload);
snd_pkg->dmsg.msg_type = COMM_MSG_CCM_ECHO; snd_pkg->dmsg.opflags |= DCF_MSGF_TMS; snd_pkg->dmsg.msg_len = sizeof(struct dcf_ccm_hdr) - sizeof(struct dcf_message);
strncpy(snd_pkg->data, message, max_payload - sizeof(struct dcf_ccm_hdr));
ret = rpmsg_channel_send(channel, RPMSG_ECHO_EPT_ADDR, snd_pkg, max_payload, 3000); if (ret == RPMSG_SUCCESS) { printf("Sent: %s\n", message); } else { printf("Failed to send message\n"); }
int received_len; ret = rpmsg_channel_recv(channel, rcv_pkg, max_payload, &received_len, 3000); if (ret == RPMSG_SUCCESS) { printf("Received: %s\n", rcv_pkg->data); } else { printf("Failed to receive message\n"); }
osFree(snd_pkg); osFree(rcv_pkg);}

将以上函数添加至abc.c文件内,并在主函数(rpmsg_test)编写调用该函数条件,如下:

const char* message_to_send = "Hello,rpmsg";
if (argc == 0) { rpmsg_test_show(); goto exit; }
if (argc == 2) { test_case = 0; type = atoi(argv[0]); rproc = atoi(argv[1]); } else if (!strcmp(argv[0], "ping")) { test_case = 1; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else if (!strcmp(argv[0], "iperf")) { test_case = 2; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]);}//新添加的条件 else if(!strcmp(argv[0], "send")){ test_case = 3; type = atoi(argv[1]); rproc = atoi(argv[2]); times = atoi(argv[3]); } else { printf("Unknown cmd %s\n", argv[0]); goto exit; }switch (test_case) { case 0: do_rpmsg_echo_test(channel); break;
case 1: do_rpmsg_ping_test(channel, times); break; case 2: do_rpmsg_iperf_test(channel, times); break;
case 3: send_receive_string(channel, message_to_send); break;
default: printf("Unknown case %d\n", test_case); break; }
//加入串口打印提示(跳至rpmsg_test_show函数)printf("\nTest command:\n"); printf("\trpmsg_test \n"); printf("\trpmsg_test ping \n"); printf("\trpmsg_test iperf \n"); printf("\trpmsg_test send \n");
printf("\ne.g: test ping rpmsg.virtio 10 times with secure, use command:\n"); printf("\trpmsg_test ping 0 1 10\n");

通过5.1小节打开图形化配置界面,进入到Driver and Application Examples/Driver Example Support下,可以看到我们新加的abc test Support驱动配置选项,需要关闭RPMSG Example Application Support选项,如下:


选中此选项编译进内核,将串口线(debug)接到10_TX,10_RX和GND,打开终端调试工具。编辑source/ssdk/ middleware/rpmsg_service/rpmsg_echo.c文件,添加代码如下:

static int echo_channel_cb(void *data, int len, unsigned long src, void *arg){    rpmsg_channel_t chan = arg;    struct dcf_ccm_hdr *ccm_pkg = data;    const char *char_data = (char *)data;    int ret = 0;
if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ECHO) { ccm_pkg->time[2] = timer_get_current_time(g_syscnt_timer) * g_sdrv_syscnt_dev.cnt_per_us; ret = rpmsg_channel_send(chan, src, data, len, 1000); printf("Sending data (length %d): ", len); for (int i = 8; i < len; i++) { printf("%c ", char_data[i]); } printf("\n"); } else if (ccm_pkg->dmsg.msg_type == COMM_MSG_CCM_ACK) { ret = rpmsg_channel_send(chan, src, (char *)"ACK", 4, 1000); ssdk_printf(SSDK_INFO,"send ACK\n"); } else { ssdk_printf(SSDK_WARNING, "echo_channel_cb: unknown %d bytes from addr %ld\n", len, src); }
if (ret != 0) { ssdk_printf(SSDK_WARNING, "echo_channel_cb: channel send failed\n"); }
return ret;}

A55发送数据给R5

自定义一个发送和接收字符串的函数,如下:

int send_receive_string(int fd, const char *send_str,int ntimes, int seconds) {    int i = 0, j = 0;    int size, bytes_rcvd, bytes_sent;    long elapse = 0;
err_cnt = 0; i_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size); r_payload = (struct _payload *)malloc(sizeof(struct _payload) + payload_max_size);
if (i_payload == 0 || r_payload == 0) { printf("ERROR: Failed to allocate memory for payload.\n"); return -1; }
if (seconds) gettimeofday(&start_test, NULL);
i_payload->magic = 0xA5;
for (j = 0; j < ntimes; j++) { i_payload->num = i; i_payload->size = size; strcpy(i_payload->data, send_str);
if (verbose) printf("\r\n sending payload number"); if (verbose) printf(" %d of size %lu\r\n", i_payload->num, (sizeof(struct _payload)) + strlen(i_payload->data));
bytes_sent = write(fd, i_payload, sizeof(struct _payload) + strlen(i_payload->data)); if (bytes_sent <= 0) { if (verbose) { perror("\r\n Error sending data\n"); break; } else fprintf(stderr, "#");
err_cnt++; continue; } printf("send string:%s\n",i_payload->data);
r_payload->num = 0; bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); while (bytes_rcvd <= 0) { usleep(10000); bytes_rcvd = read(fd, r_payload, sizeof(struct _payload) + payload_max_size); } r_payload->data[bytes_rcvd] = '\0'; printf("receive string:%s\n",r_payload->data);
if (interval) sleep(interval); }
free(i_payload); free(r_payload);
return 0;}


在main函数内添加新增函数条件:


编辑source/linux/ drivers/rpmsg/virtio_rpmsg_bus.c文件,代码如下:


保存所有代码

编译系统 烧录


1.5结果显示

在R5核调用rpmsg_test例程,向A55核发送信息

R5界面>rpmsg_test send 0 3 1>Sent: 123456789Received: 123456789
>rpmsg_test send 1 3 1>Sent: 123456789Received: 123456789
A55界面root@myd-jd9x:~# [ 22.223170] virtio_rpmsg_bus virtio0: virtio send susses[ 34.943644] sd,rpmsg-ipcc soc:ipcc@1: ipcc send susses

在A55核调用echo_test例程,向R5发送信息,打印如下:

A55界面root@myd-jd9x:~# echo_test -d virtio0.rpmsg-echo.-1.30 -c 1
Echo test startupdate rpmsg-mtu=496 from kernelsend string:Hello,RPMsg!receive string:Hello,RPMsg!
R5界面>Sending data (length 20): H e l l o , R P M s g !

MYC-YD9360核心板及商显板
  • 采用国产CPU:集成了6个ARM Cortex-A55@1.6GHz 高性能CPU和1个ARM Cortex-R5@800MHz;
  • 高性能的高安全HSM安全的处理器,支持TRNG、AES、RSA、SHA、SM2/3/4/9;
  • 它包含100GFLOPS 3D GPU以及H.264和H.265/VP8/VP9视频编/解码器,三屏异显;
  • 集成 PCIe3.0,USB3.0,2x千兆TSN以太网,4xCAN-FD,16xUART,SPI 等丰富的外设接口;
  • 工业级-40℃~85℃,邮票孔324PIN引脚,尺寸为52mmx50mm。
  • 应用:高端商显、新一代电力智能设备、工业互联网设备、工业控制设备、工业机器人、工程机械、轨道交通等


米尔电子最新“明星产品”速报





 米尔电子 
领先的嵌入式处理器模组厂商
关注“米尔MYiR”公众号
不定期分享产品资料及干货
第一时间发布米尔最新资讯

米尔电子嵌入式 米尔-领先的嵌入式处理器模组厂商,专业为您提供CPU模组,NXP、ST、全志、XILINX等核心板开
评论 (0)
  •   海上安全事件应急处置系统平台深度解析   一、平台概述   北京华盛恒辉海上安全事件应急处置系统平台融合现代信息技术、通信技术、GIS、大数据分析及 AI 等技术,旨在快速响应船舶碰撞、火灾、溢油等海上突发事件,实现科学决策与高效资源调配,保障海上生命财产安全、减少环境污染。   应用案例   目前,已有多个海上安全事件应急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上安全事件应急处置系统。这些成功案例为海上安全事件应急处置系统的推广和应用提供了有力支持
    华盛恒辉l58ll334744 2025-04-21 15:21 85浏览
  • 精益生产咨询师证/精益管理专业人员证/精益生产工程师证虽然在名称上有一些差异,但其实实际区别并不大,目前类似的证书以ILSSI-CLMP较为得到国际上的认可,当然,你不会因为有一张精益生产咨询师证,而会有人马上请你做咨询师,因为除了知识之外,你还要有充足经验、热诚、沟通能力等等,这些也是我们招聘咨询师的基本要求。那么,有没有必要取得CLMP证书呢?这主要取决于你自己对职业发展的规划和自我提升的意志。CLMP是什么?CLMP的全称是Certified Lean Management Profess
    优思学院 2025-04-21 14:29 45浏览
  •   有效数据智能分拣系统平台深度解析   一、系统概述   北京华盛恒辉有效数据智能分拣系统平台融合人工智能、机器视觉、物联网及大数据分析技术,为物流包裹、数据信息等提供高效精准的智能化分拣处理方案。通过自动化设备与智能算法协同运作,取代传统人工分拣模式,显著提升分拣效率、降低错误率,满足电商、快递及供应链不断增长的业务需求。   应用案例   目前,已有多个有效数据智能分拣系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效数据智能分拣系统。这些成功案例为有效数据智能分
    华盛恒辉l58ll334744 2025-04-21 16:22 118浏览
  •   电磁信号模拟平台解析   北京华盛恒辉电磁信号模拟平台作为模拟复杂电磁环境的系统,在无线通信、电子对抗等多领域广泛应用。以下从功能、技术特性、应用场景及发展趋势展开详细解读。   应用案例   目前,已有多个电磁信号模拟平台在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润电磁信号模拟平台。这些成功案例为电磁信号模拟平台的推广和应用提供了有力支持。   一、核心功能   复杂电磁环境建模:构建贴近真实的电磁环境,涵盖各类干扰因素。   多通道信号模拟:模拟多通道电磁信号
    华盛恒辉l58ll334744 2025-04-21 15:10 96浏览
  • 导读在智能汽车技术发展浪潮中,车辆控制系统的智能化、网络化已成为行业发展的必然趋势。虹科PEAK智行定位车控系统,集成了尖端科技,能够实现车辆全方位监控与控制。从实时GPS定位到CAN/CAN FD信号处理,虹科方案不仅提升了车辆的智能化水平,更在安全性和效率上迈出了革命性的一步。虹科PEAK智行定位车控系统,通过CAN/CAN FD信号实现车辆的精准控制,包括加减速、转弯、倒退等动作,模拟真实车辆平台的动态表现。该系统搭载了虹科各型号设备,通过紧密协作,实时反映车辆位置、总线报文等信息,实现车
    虹科汽车智能互联 2025-04-21 16:04 75浏览
  • 导读在汽车测试和现代工业领域,功耗控制与效率优化是工程师们不断追求的目标。虹科PCAN Router系列设备以其卓越的性能和灵活性,为CAN/CAN FD网络中的报文转换提供了高效解决方案。本文将探讨虹科PCAN Router系列设备如何在保持高效工作的同时,通过低功耗模式和高效唤醒功能,满足对能耗有严格要求的应用场景。虹科PCAN Router系列网关1 低功耗模式的优势与实现在实际的工作场景中,可能会出现一些对功耗要求存在限制的情况。鉴于此,可以灵活设置虹科PCAN Router系
    虹科汽车智能互联 2025-04-21 15:45 65浏览
  • 导读在当今快速发展的智能通讯领域,时间敏感网络(TSN)已成为确保网络通信高可靠性和低延迟的关键技术。IEEE 802.1 Qci作为TSN的一个重要组成部分,提供了一套强大的机制来管理网络流量,确保关键数据流的优先级和带宽得到保障。本文将深入探讨IEEE 802.1 Qci协议的基本概念、工作原理以及虹科提供的Qci解决方案,帮您理解如何通过精确的流量控制来提升网络的稳定性和效率。虹科TSN解决方案01# 技术简介时间敏感网络(TSN)通过IEEE 802.1 Qci标准定义了一种关
    虹科工业智能互联 2025-04-21 16:17 76浏览
  •   海上安全事件应急处置系统解析   北京华盛恒辉海上安全事件应急处置系统是为应对船舶碰撞、火灾等海上突发事件打造的综合管理体系,通过技术与协同机制,实现快速响应救援、优化资源配置,守护海上生命、财产与环境安全。以下从系统构成、功能、技术、应用及趋势展开阐述。   应用案例   目前,已有多个海上安全事件应急处置系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润海上安全事件应急处置系统。这些成功案例为海上安全事件应急处置系统的推广和应用提供了有力支持。   一、系统构成
    华盛恒辉l58ll334744 2025-04-21 15:50 68浏览
  • 北京贞光科技有限公司作为紫光同芯授权代理商,深耕电子元器件领域数十载,专为汽车与工业客户提供车规级安全芯片及配套服务。公司整合硬件供应、软件SDK与技术支持为一体,配备专业团队提供选型咨询与现场指导,助力客户实现完整的芯片应用解决方案。在全球芯片供应链重构的大背景下,我国车规级芯片产业正迎来前所未有的发展机遇。北京贞光科技有限公司作为紫光同芯授权代理商,深耕电子元器件领域数十载,专为汽车与工业客户提供车规级安全芯片及配套服务。公司整合硬件供应、软件SDK与技术支持为一体,配备专业团队提供选型咨询
    贞光科技 2025-04-21 16:10 78浏览
  • 导读Linux驱动程序领域再添新成员,PLIN驱动程序现已正式发布。这一新驱动程序为使用LIN接口的用户提供了一个便捷、高效的解决方案。本文将展示如何安装PLIN驱动程序,以及如何在Linux环境下进行基本的PLIN通信操作,确保您能够快速掌握并应用这一新工具。继我们在Linux环境下成功推出CAN/CAN FD接口驱动程序后,现在我们为LIN接口带来了同样兼容Linux的驱动程序。免费软件包中不仅包含了驱动程序本身,还提供实用工具和一份易于理解的快速入门指南。用户下载后,需要根据当前使用的Li
    虹科汽车智能互联 2025-04-21 14:56 60浏览
  •   有效数据智能分拣系统详解   北京华盛恒辉有效数据智能分拣系统融合人工智能、大数据分析与机器学习等前沿技术,实现海量数据自动化分类、筛选、整理及分配。凭借强大的数据处理效能,助力企业精准提取关键信息,优化决策流程,提升运营效率。以下从系统架构、核心功能、技术特性、应用场景及发展趋势展开解读。   应用案例   目前,已有多个有效数据智能分拣系统在实际应用中取得了显著成效。例如,北京华盛恒辉和北京五木恒润有效数据智能分拣系统。这些成功案例为有效数据智能分拣系统的推广和应用提供了有力支持。
    华盛恒辉l58ll334744 2025-04-21 16:46 105浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦