Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
MIMXRT1170-EVKB 多核示例问题... 这是我第一次使用低级(非 Linux)多核设备,所以这可能是一个愚蠢的问题...... 我正在浏览“ MIMXRT1170-EVKB 的 MCUXpresso SDK 入门指南”(修订版)的第 6.4 和 6.5 节。0 — 2022 年 12 月 31 日),指的是 SDKTOP/boards/evkbmimxrt1170/multicore_examples/hello_world。我正在使用 SDK-2-16-100_MIMXRT1170-EVKB。我还有一个 JLink 编程器,连接到 EVKB 上的 20 针接头。 我第一次就能够构建/加载/运行 cm4/cm7 应用程序,但我没有完全遵循说明,因为它们对我来说没有意义(我必须为两个核心运行 gdb/load)。 第 6.4 节说要“构建”每个应用程序。这很好;但是第 6.5 节说:“ ...主核心调试器负责将主核心和辅助核心应用程序刷入 SoC 闪存... ”。对吗?我发现我必须对每个核心执行“加载”操作(使用 gdb)才能使一切正常工作。 此外,我尝试对 CM4 代码进行微小更改,但它似乎不是编程。gdb 的“加载”是否也会在编程之前清除所有内容? 任何想法都将受到赞赏。 谢谢! 回复:MIMXRT1170-EVKB 多核示例问题…… 好的,我想我现在明白了…… @Pavel_Hernandez ,pdf 非常有用,但是线程只是一组指令,告诉您在 IDE 中要按哪些按钮。如果试图真正理解事物,那就没什么用了。 我现在看到 CM4 的图像实际上作为名为“.core1_code”的部分合并到 CM7 的图像中。CM7 的构建依赖于之前构建的 CM4 图像,因此 CM7 的构建步骤之一是将 CM4 图像合并到 CM7 的内存映射中。这解释了为什么在使用 cm4 的 gdb 中执行“加载”时,它没有被推送到实际的 SPI 闪存空间。我不太喜欢这样做,但没关系。至少我现在明白了。 非常感谢,帮助很大! 回复:MIMXRT1170-EVKB 多核示例问题…… 你好,我叫 Pavel,我会支持你的案例,我发现这个应用笔记可以帮助你更多地了解双核过程,请参阅第 2.1.2 章详细的启动流程。 有一些类似的论点,也许有助于理解。 “ ...主核心调试器负责将主核心和辅助核心应用程序刷入 SoC 闪存... ” i.MX RT1170 双核应用 也许这个其他线程可以帮助您在 IDE 上测试它。 如何使用 JLINK 调试 RT1170 双核 - NXP 社区 此致, 帕维尔 回复:MIMXRT1170-EVKB 多核示例问题…… 好吧,我不想声称这解决了这个问题,但我确实设法让两个核心都执行我的代码...... 我怀疑 gdb 如何告诉 JLINK 写入闪存,因此我没有使用连接到 jlink gdb 服务器的 gdb,而是创建了一个简单的 jlink 脚本来手动加载每个部分(见下文)。为此,我需要从 .elf 文件中提取每个可加载部分文件转换成自己的二进制文件。 对于创建的每个文件,我都可以运行此脚本: eoe 1 设备=MIMXRT1176DVMAA_cm7 速度 4000 si SWD r h 加载箱 elfsect_.flash_config.bin,0x30000400 加载箱 elfsect_.ivt.bin,0x30001000 加载箱 elfsect_.core1_code.bin,0x33fc0000 加载箱 elfsect_.interrupts.bin,0x30002000 加载箱 elfsect_.text.bin,0x30002400 加载箱 elfsect_.ARM.bin,0x30008d00 加载箱 elfsect_.init_array.bin,0x30008d08 加载箱 elfsect_.fini_array.bin,0x30008d0c 加载箱 elfsect_.data.bin,0x30008d10 去 出口 加载 CM7 一切正常。看起来,虽然 jlink 服务器表示它已验证下载,但验证失败了。 有人(NXP 支持)可以解释一下吗? 回复:MIMXRT1170-EVKB 多核示例问题…… 更多信息... 我刚刚注意到,在 gdb 中运行“load”后,我的 JLinkGDBServerCLExe 窗口显示以下错误...... 错误:准备目标时超时,RAMCode 没有及时响应! 无法执行 RAMCode-sidedPrepare() 确定闪存信息时出错(Bank @ 0x30000000)
記事全体を表示
HSEステータス登録簿の不正 参考までに以下の画像 S32K312 を使用しており、 HSE ファームウェアで問題が発生しています。 1.HSE ステータス レジスタ値が破損しているようです (0x4038C107)。 2.このステータス破損のため、HSE API にアクセスできません。 3.HSE ファームウェアの消去または再フラッシュの試みが失敗しました。 4.MU0_TR1 レジスタまたはメモリに書き込んで消去/リセット コマンドをトリガーすることはできません。 5. デバッガーがコネクテッドされているときに、単一の外部リセット中に複数のソフトウェア リセットが観察されました。 リクエスト: 1.S32K312 の HSE ファームウェアを消去して再フラッシュするための正しい手順を教えてください。 2. 現在の破損状態のために HSE ファームウェアの再フラッシュが不可能な場合、HSE を回復したり、ステータス レジスタの破損を解決したりするには、どのような手順を実行すればよいですか。 3. デバッガーを接続した状態でハードリセットを実行すると、複数のリセットが発生することが知られていますが、これに関する既知の問題や回避策はありますか? 4.破損した HSE ステータス レジスタの問題を解決し、HSE API へのアクセスを回復するにはどうすればよいですか? HSE ファームウェアのフラッシュ中に従う手順: ステップ 1: 提供された PINK ファイルを、IVT なしで、デモ アプリケーションおよびセキュア ブート アプリケーションの ELF ファイルとともにフラッシュしました。 ステップ2: リセット完了 ステップ3: HSE位置0x 005d4000とDCMレジスタに「??」マークが観測される ステップ4: アドレス0x 00400000のブートローダーとアドレス0x 00442000のアプリケーションを再フラッシュしました。 ステップ5: デバッガをコネクテッドした状態でハードリセットを実行すると、外部リセットコマンドを1つだけ発行したにもかかわらず、ソフトウェア側から複数のリセットがトリガーされることが観察されました。
記事全体を表示
HMB-N1905低成本雷达打造安全智能家居 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 先进的技术大大降低了 24 GHz 雷达系统的成本,带来了一系列新的应用。从历史上看,雷达由于应用成本高,一直纯粹用于军事和工业应用。随着最新一代 NXP BiCMOS 技术的出现,这种情况已经发生了改变。24 GHz 雷达前端现在可以完全集成到单个 IC 中,从而将成本和功耗降低到消费者水平。这开辟了一系列以前不可能实现的应用。本次讲座将展示雷达在不同应用领域的可能性,例如存在检测和消费级无人机防撞。将进行基于首批测试芯片与 ARM 处理器相结合的现场演示。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 先进的技术大大降低了 24 GHz 雷达系统的成本,带来了一系列新的应用。从历史上看,雷达由于应用成本高,一直纯粹用于军事和工业应用。随着最新一代 NXP BiCMOS 技术的出现,这种情况已经发生了改变。24 GHz 雷达前端现在可以完全集成到单个 IC 中,从而将成本和功耗降低到消费者水平。这开辟了一系列以前不可能实现的应用。本次讲座将展示雷达在不同应用领域的可能性,例如存在检测和消费级无人机防撞。将进行基于首批测试芯片与 ARM 处理器相结合的现场演示。 智能家居和智能建筑
記事全体を表示
NXP Rapid IoTデモ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
記事全体を表示
Varification of EMC Compliance for MYD-Y6ULX-CHMI The MYD-Y6ULX-CHMI Display Panel is an ultra-low cost Human Machine Interface (HMI) solution based on 528MHz NXPi.MX6UL/6ULL ARM Cortext-A7 processor. It is a Linux-ready device with ported QT, can be used in various applications including POS, Intelligent access control and more others. The panel provides a well-designed hardware with various peripherals and rich software resources to help users accelerate their time to the market. The MYD-Y6ULX-CHMI consists of an MYD-Y6ULX-HMI Development Board and a 7-inch capacitive LCD mounting on its top. The LCD offers 800x480 pixels display resolution. The MYD-Y6ULX-HMI Development Board provides peripherals and interfaces including RS232, RS485, Ethernet, USB Host/Device, LCD, Camera, TF card slot and etc. Considering wireless communication and dial-up functions, MYIR offers an optional IO board MYB-Y6ULX-HMI-4GEXP for the MYD-Y6ULX-CHMI Display Panel. The IO Board features on board AP6212 module for WiFi/Bluetooth and a Mini-PCIe interface for USB based 4G LTE module. Moreover, the IO Board has extended one more Ethernet interface and Audio in/out ports to further enhance the functionality of the panel, thus making a complete solution for HMI applications. The MYD-Y6ULX-CHMI has passed the verification of EMC Compliance.           MYD-Y6ULX-CHMI Display Panel                            MYD-Y6ULX-CHMI Display Panel + MYB-Y6ULX-HMI-4GEXP The MYD-Y6ULX-CHMI Display Panel is an ultra-low cost Human Machine Interface (HMI) solution based on 528MHz NXPi.MX6UL/6ULL ARM Cortext-A7 processor. It is a Linux-ready device with ported QT, can be used in various applications including POS, Intelligent access control and more others. The panel provides a well-designed hardware with various peripherals and rich software resources to help users accelerate their time to the market. The MYD-Y6ULX-CHMI consists of an MYD-Y6ULX-HMI Development Board and a 7-inch capacitive LCD mounting on its top. The LCD offers 800x480 pixels display resolution. The MYD-Y6ULX-HMI Development Board provides peripherals and interfaces including RS232, RS485, Ethernet, USB Host/Device, LCD, Camera, TF card slot and etc. Considering wireless communication and dial-up functions, MYIR offers an optional IO board MYB-Y6ULX-HMI-4GEXP for the MYD-Y6ULX-CHMI Display Panel. The IO Board features on board AP6212 module for WiFi/Bluetooth and a Mini-PCIe interface for USB based 4G LTE module. Moreover, the IO Board has extended one more Ethernet interface and Audio in/out ports to further enhance the functionality of the panel, thus making a complete solution for HMI applications. The MYD-Y6ULX-CHMI has passed the verification of EMC Compliance.           MYD-Y6ULX-CHMI Display Panel                            MYD-Y6ULX-CHMI Display Panel + MYB-Y6ULX-HMI-4GEXP
記事全体を表示
示例 MPC5777C-eQADC_Simple GHS714 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************** * 详细说明: * 初始化 eQADC 模块并循环转换所选通道,显示 * 将其放入终端窗口。 * 用户可以将 EVB 电位器的电位器连接到引脚接头 W(见下文)以查看有效 * 转换结果。 * ---------------------------------------------------------------------------------------------- * 测试硬件:MPC5777C-512DS Rev.A + MPC57xx 主板 Rev.C * 微控制器: PPC5777CMM03 2N45H CTZZS1521A *系统频率:PLL1 = core_clk = 264MHz,PLL0 = 192MHz * 调试器:Lauterbach Trace32 * 目标:internal_FLASH * 终端:19200-8-无奇偶校验-1停止位-eSCI_A上无流量控制 * EVB 连接:对于 ADC:J53-1(EVB 电位器的电位器)--> PW7 - ANB16 * PW8 - ANB17 * PW9 - ANB18 * PW10 - ANB19 ******************************************************************************** <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ******************************************************************************** * 详细说明: * 初始化 eQADC 模块并循环转换所选通道,显示 * 将其放入终端窗口。 * 用户可以将 EVB 电位器的电位器连接到引脚接头 W(见下文)以查看有效 * 转换结果。 * ---------------------------------------------------------------------------------------------- * 测试硬件:MPC5777C-512DS Rev.A + MPC57xx 主板 Rev.C * 微控制器: PPC5777CMM03 2N45H CTZZS1521A *系统频率:PLL1 = core_clk = 264MHz,PLL0 = 192MHz * 调试器:Lauterbach Trace32 * 目标:internal_FLASH * 终端:19200-8-无奇偶校验-1停止位-eSCI_A上无流量控制 * EVB 连接:对于 ADC:J53-1(EVB 电位器的电位器)--> PW7 - ANB16 * PW8 - ANB17 * PW9 - ANB18 * PW10 - ANB19 ********************************************************************************
記事全体を表示
SMI-N2000 固态射频电源相对于真空管的优势 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 自 20 世纪 20 年代初以来,微波能量的来源传统上一直是真空管和磁控管。尽管固态射频发电技术已经取得了许多进步,但当今的一些高功率射频应用仍然依赖真空管技术。本课程将介绍固态的技术优势,包括动态范围控制、光谱纯度、制造规模经济和产品寿命。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 自 20 世纪 20 年代初以来,微波能量的来源传统上一直是真空管和磁控管。尽管固态射频发电技术已经取得了许多进步,但当今的一些高功率射频应用仍然依赖真空管技术。本课程将介绍固态的技术优势,包括动态范围控制、光谱纯度、制造规模经济和产品寿命。 智能机械和工业自动化 回复:SMI-N2000 固态射频电源相对于真空管的优势 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我看到了射频介电加热的应用。并想制作一个像RFEM24-250一样的用于加热的仪器。ISM频段为40MHz,晶体管采用MRFE6VP6300H或MRFE6VP5150N。 我想找到参考设计
記事全体を表示
BD-SL-i.MX6 (Qt Company の Qt 5.4 を実行) <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> BD-SL-i.MX6(旧SABRE Lite)ボードは、低コストのi.MX6開発プラットフォームです。このボードの最も優れた特性の1つは、利用可能な重要なソフトウェアサポートです。この記事では、QT CompanyのQt5.4についてご紹介します。以下のビデオは、 Qt Company のエンタープライズデバイス作成製品、つまりQtに最適化された事前構築済みソフトウェアスタックを示しています。これにより、組み込みLinuxおよびAndroid開発用の実際のデバイスでのプロトタイピングをすぐに開始できます。デモはQt5.4を実行しており、BD-SL-i.MX6とNitrogen製品ファミリーの画像が利用可能です。以下は、いくつかの機能を示す短いビデオです。 上のビデオは、組み込みLinux用に作成された画像を示しており、具体的には 、Yocto Project と The Freescale Community BSPのツールを使用して構築されています。このため、製品はこれらのプロジェクトによって提供されるパッケージを活用でき、Yocto ビルド システムを使用してコンポーネントを統合し、ビルドを調整できます。 詳細については、http://qt.io または http://boundarydevices.com/qt-for-device-creation/ をご覧ください 全般
記事全体を表示
U4N: 如何在 FH6 中改进油门控制 如果您在东京霓虹灯闪烁的街道和富士山的山路上肆意驰骋,那么您一定会发现自己已经在东京的大街小巷和富士山的山路上肆意驰骋了。在《极限竞速地平线 6》中驾驶富士山时,您可能会注意到驾驶物理效果比以往的作品更接地气。动力输出强劲有力。 如果你把正确的扳机或油门踏板当作开/关开关,那么你不是在开车,你只是在把橡胶变成烟雾。要让汽车干净利落地转弯,需要真正的细微差别。以下是如何在 FH6 中掌握油门控制、停止打滑并缩短单圈时间的实用数据分析。 1.首先修复死区(0-100 规则) FH6 开箱即用,将您的控制器触发死区设置为默认 15 个内部、90 个外部。这意味着你的前15%扣动扳机绝对不起作用,一旦你达到90%,游戏的油门将达到100%。简而言之,你在战斗中仅使用触发器物理行程的75%来调节你的力量。 进入设置> 高级控制,立即应用这些更改: 加速轴内死区:将此值从 15 降至 0 或 2。 加速轴外部死区:将其从 90 提升至 98 或 100。 为什么数学很重要:通过将内部死区降低到0并将外部死区提高到100,可以将输入窗口从触发器机械范围的75%扩大到整整100%。如果你驾驶一辆后轮驱动的怪兽驶出一个狭窄的弯道,有额外的物理空间可以呼吸,这意味着你可以保持稳定的 45% 油门,而不会意外陷入打滑的境地。 2.角出口分析:50-70-100 级进阶 让我们来看一个具体的比赛场景。假设你正驾驶着一辆 S1 级 2024 年款福特野马黑马在 90 度街角转弯。 如果你在到达顶点的瞬间将油门踩到 100% ,你的后轮会立即失去牵引力,遥测数据会显示 100% 的摩擦力损失,你的车尾会猛地甩出去,当汽车陷入困境或打滑时,你会损失大约 1.5 到 2 秒钟。 取而代之的是分阶段线性应用: 转角阶段 目标节气门输入 汽车行为 顶点(剪切点) 30% - 50% 稳定底盘;在不破坏牵引力的情况下,将重量平稳地转移到后轮胎上。 中途出口(开卷轮) 60% - 75% 与前轮校直相匹配。随着转向锁的减少,抓地力也会增加。 直达 100% 一旦车轮完全打直,汽车稳定下来,就会全力以赴。 在短短 1.5 秒的时间内,将油门控制在 50-70-100 级之间,就能将滑移角保持在最小范围内,并最大限度地提高前行咬合力。 3.管理启动控制和 Wheelspin 在 FH6 中将汽车冲出底线是对右手食指的一大考验。如果你使用手动变速箱,按住刹车和油门会同时启动游戏中的启动控制。但是,一旦你松开刹车,你仍然必须积极管理转速。 如果你的车库里装满了顶级版本,那么手动管理会变得容易得多。如果玩家希望快速扩充自己的收藏,获得能驾驭重型动力的高级车辆,查看 U4N 等第三方市场可以提供捷径,其中出售的 FH6 车轮旋转等物品可让您立即存入信用点和稀有的地平线版车辆来进行练习。 一旦进入电网,请记住车轮打滑等于浪费能量。如果让大马力汽车在静止状态下以 8,000 RPM 的转速跳过转速限制器,由于静摩擦损失,实际前进加速度最多会下降 40% 。最佳位置是将油门保持在汽车峰值扭矩曲线附近--跑车的峰值扭矩曲线通常在 4,500 至 5,500 RPM 之间--然后在轮胎咬合时慢慢踩下 100% 油门。 4.通过遥测可视化您的功率 如果您想知道您的油门到底有多大,请不要猜测。进入控制绑定,将遥测功能映射到一个按钮上(如 D 键盘上的向下)。 在自由漫游时切换到摩擦和输入页面。注意油门杆。如果发现输入瞬间从 10% 跳转到 100% ,请检查控制器硬件。例如,如果你使用 Xbox Elite 控制器,请确保背面的物理触发开关完全关闭。触发锁将模拟触发信号变成数字按钮,这使得实际的油门调制实际上是不可能的。 在一款街机风格的赛车游戏中,放慢输入速度会让人感觉不自然,但《FH6》奖励的是精准的驾驶。平稳地在汽油上滚动总是比砸碎扳机更胜一筹。
記事全体を表示
Smart Device Gateway Smart Device Gateway In this post, I want to share a quick walkthrough of Smart Device Gateway, a FastAPI-based demo server that allows connected devices to use local GenAI capabilities accelerated by the Ara240 DNPU. The idea behind this demo is to centralize AI intelligence in one gateway instead of adding powerful AI hardware to every device. A connected device only needs a microphone, speaker, and network connection to become a voice-enabled assistant.   What It Does Smart Device Gateway enables devices such as appliances or embedded clients to send audio to a local server, process the request using speech recognition, RAG, an LLM running on Ara240 DNPU, and text-to-speech, then stream the spoken response back to the client. The current demo showcases intelligent device assistants for a generic oven and coffee machine/barista use case, using device manuals as the knowledge base for contextual responses.   Architecture Overview The Smart Device Gateway receives audio from a client over WebSocket, converts speech to text, retrieves relevant context from a device knowledge base, sends the prompt to the LLM through the eIQ AAF Connector, converts the generated response back to speech, and streams the audio response to the client. At a high level, the flow is: Audio Input → STT → RAG → eIQ AAF Connector / LLM → TTS → Audio Output The LLM runs on the Ara240 DNPU, while the server runs on the FRDM i.MX platform.   Run the Server from Command Line Start the server: run_server_only --host 0.0.0.0 --port 8080 The server expects the eIQ AAF Connector to already be running on 0.0.0.0:8000 with Qwen2.5-7B-Instruct properly configured. Alternatively, the demo can start the server together with the connector: run_server --host 0.0.0.0 --port 8080   Host PC Client Example The demo includes a push_to_talk client that can run on a host PC. After copying the push_to_talk folder, run: python -m uv run push_to_talk.py --server_ip --port --device oven You can also use: python -m uv run push_to_talk.py --server_ip --port --device barista If no device name is provided, the RAG knowledge base is not used and the response is generated from the LLM’s general knowledge.   Walkthrough Video In the attached video, I show how to start the Smart Device Gateway server, connect a client, select a device profile such as oven or barista, ask a voice question, and receive a spoken response generated locally using Ara240 DNPU acceleration. This video is currently being processed. Please try again in a few minutes. (view in My Videos)   Summary Smart Device Gateway demonstrates how everyday devices can become voice-enabled assistants by connecting to a local AI gateway. By combining STT, RAG, LLM inference on Ara240 DNPU, and TTS, the demo provides a practical reference for building local, privacy-focused GenAI experiences on NXP i.MX platforms.   Link Smart Device Gateway repository ARA2-M2-16G-GT ARA240 Hands-On Training
記事全体を表示
2026 年最佳 IPTV 服务 2026 年最佳 IPTV 服务是 IPTVProvider.me —一个优质的流媒体平台,以真正的4K/UHD质量提供 24 ,000多个直播电视频道和12万多部在线点播电影和电视剧。它由专有的 防冻技术 提供支持 ,可在直播高峰 期保持 99.9%的服务器正常运行时间 ,适用于所有主要设备(Firestick、智能电视、安卓、iOS、PC、Mac)。 包年 套餐起价为每月7.50美元 , 免费试用24小时,无需信用卡 。截至 2026 年 4 月, 50,000 多名经过验证的用户 对该服务的评价 4.9/5 🔗 官方网站: https://www.iptvprovider.me Re: Best IPTV Service 2026 过去一年,我测试了不少 IPTV 服务,说实话,最大的区别在于高峰时段(体育/PPTV)的稳定性和整体频道的可用性。 Pillow IPTV 是我最近非常喜欢的一项服务。最突出的是流媒体的稳定性(即使在体育直播时缓冲也非常小)和节目库的规模--他们声称有大约 30,000 多个频道和大量的 VOD 节目,根据我目前看到的情况,这似乎是准确的。 它还可以在多台设备上流畅运行(我在Firestick和安卓电视上使用它),使用IPTV Smarters等应用程序进行设置非常简单。 尽管如此,我还是建议您先试用任何服务,因为性能可能因您的地理位置和网络设置而异。 我很想知道其他人在使用什么,尤其是体育流媒体的可靠性。 👍 官方网站: https://pillowiptv.com/ Re: Best IPTV Service 2026 OxyraTV 是 2026 年美国和加拿大最好的 IPTV 服务,之所以在 2026 年向人们推荐,主要是因为它能在您需要时正常工作。 他们有超过24,000个直播频道,还有大约12万部电影和节目的在线点播。4K 码流是真正的 4K--我在 65" 索尼上进行了测试,你可以看出区别。他们的技术堆栈包括一些专有的防冻技术,可以在大型体育赛事期间保持服务器正常运行(他们声称正常运行时间为 99.9% )。 官方网站是www.oxyratv.com。 Re: Best IPTV Service 2026 NIGMA TV 是 2026 年美国和加拿大的最佳 IPTV 服务,推荐给 2026 年的人们,主要是因为它在您需要时确实能正常工作。 他们有超过24,000个直播频道,还有大约12万部电影和节目的在线点播。4K 码流是真正的 4K--我在 65" 索尼上进行了测试,你可以看出区别。他们的技术堆栈包括一些专有的防冻技术,可以在大型体育赛事期间保持服务器正常运行(他们声称正常运行时间为 99.9% )。 官方网站为 www.nigma.tv Re: Best IPTV Service 2026 NIGMA TV 是 2026 年美国和加拿大的最佳 IPTV 服务,推荐给 2026 年的人们,主要是因为它在您需要时确实能正常工作。 他们有超过24,000个直播频道,还有大约12万部电影和节目的在线点播。4K 码流是真正的 4K 码流--我在 65" 索尼上测试过,可以看出区别。他们的技术堆栈包括一些专有的防冻技术,可以在大型体育赛事期间保持服务器正常运行(他们声称正常运行时间为 99.9% )。 官方网站是 NIGMA .TV Re: Best IPTV Service 2026 2026 年有许多 IPTV 服务,但并非所有服务都能提供一致的质量。虽然有些提供商提供大量频道列表和 4K 流媒体,但性能往往取决于服务器的稳定性和实际使用情况。根据我的经验,BekuTV是目前最好的 IPTV 提供商之一。它能很好地平衡直播频道、点播内容和流畅的流媒体传输,即使在高峰时段也能将缓冲降至最低。它在Firestick、智能电视和移动平台等主要设备上也能很好地运行。如果您正在寻找可靠的一体化 IPTV 解决方案,而不仅仅是数字电视,那么BekuTV绝对值得考虑。 访问以了解更多信息:bekutv.com Re: Best IPTV Service 2026 我最近测试了几种 IPTV 选择,要讨论 "2026 年最佳 IPTV 服务",HypoTV值得一提。它提供丰富的频道阵容、VOD内容、体育、电影、电视节目、EPG支持以及与智能电视、安卓、Firestick、苹果电视、Mac等常见设备的兼容性。 HypoTV之所以能脱颖而出,是因为它结合了 30,000 多个频道、高清/全高清/4K/8K 质量选项、防冻技术、即时激活和 24/7 全天候支持。他们还提供 24 小时免费试用,这非常有用,因为用户可以在购买前测试流媒体质量。 对于任何比较2026年IPTV提供商的人,我建议您检查稳定性、设备兼容性、支持响应、频道质量和退款/试用选项。基于这些观点,Hy poT V看起来是将电视直播、体育、电影、VOD和成人内容合而为一的绝佳选择。 HypoTV 官方网站:https://hypotv.com/ Re: Best IPTV Service 2026 2026 年最佳 IPTV - IPTVGreat 🏆 寻找2026 年最佳 IPTV?IPTVGreat 提供 140,000 多个直播电视频道、100,000 多部电影& 系列以及零缓冲的超高速 4K 流媒体。只需一次强大的 IPTV 订阅,即可在任何设备上观看 2026 年 FIFA 世界杯直播,包括优质体育、电影和全球频道。 立即获取最佳 IPTV 提供商 :https://iptvgreat.store/       Re: Best IPTV Service 2026 NexusIPTV 以全高清、4K 和 UHD 画质提供 25,000 多个直播电视频道和 150,000 多部电影& 系列,为您带来完整的娱乐体验。 先进的防冻技术和高性能服务器专为体育和现场活动设计,让您享受超稳定的流媒体传输。 兼容 火筷子 智能电视 安卓& iPhone Windows& Mac MAG 设备 IPTV 应用程序 为什么选择 NexusIPTV? ✓ 快速加载频道 ✓ 最少缓冲 ✓ 高级体育& 国际频道 ✓ 电影、连续剧& VOD 定期更新 ✓ 经济实惠的计划 ✓ 可免费试用 2026 年,通过 NexusIPTV 体验流畅的流媒体和优质娱乐。 https://www.nexusiptv.live/ Re: Best IPTV Service 2026 Ipcanadatv.com 2026 年美国和加拿大最好的 IPTV 服务,推荐给 2026 年的人们,主要是因为当您需要它时,它确实可以工作。 他们有超过24,000个直播频道,还有大约12万部电影和节目的在线点播。4K 码流是真正的 4K--我在 65" 索尼上进行了测试,你可以看出区别。他们的技术堆栈包括一些专有的防冻技术,可以在大型体育赛事期间保持服务器正常运行(他们声称正常运行时间为 99.9% )。 官方网站是www.ipcanadatv.com。 Re: Best IPTV Service 2026 Ipplaytv.com是2026年美国和加拿大最好的IPTV服务,推荐给2026年的人们,主要是因为当你需要它的时候,它确实可以工作。 他们有超过24,000个直播频道,还有大约12万部电影和节目的在线点播。4K 码流是真正的 4K--我在 65" 索尼上进行了测试,你可以看出区别。他们的技术堆栈包括一些专有的防冻技术,可以在大型体育赛事期间保持服务器正常运行(他们声称正常运行时间为 99.9% )。 官方网站是www.ipplaytv.com。
記事全体を表示
i.MX95/i.MX952 - LPDDR5/LPDDR4X memory compatibility guide The purpose of this document is to provide extended guidance for selection of compatible LPDDR5 and LPDDR4x memory devices that are supported by the i.MX 95 and i.MX 952 processors. In all cases, it is strongly recommended to follow the DRAM layout guidelines outlined in the NXP Hardware Developer's Guides for the specific SoCs. Please note that some of the LPDDR4x devices may not support operation at low speeds and in addition, DQ ODT may not be active, which can impact signal integrity at these speeds. If low speed operation is planned in the use case, please consult with the memory vendor the configuration aspects and possible customization of the memory device so correct functionality is ensured. LPDDR5 - maximum supported densities SoC Max Data bus width Maximum density Assumed memory organization Notes i.MX 95 32-bit 128Gb/16GB dual rank, dual channel device with 17-row addresses and x8 (byte mode) organization 1, 3, 7 i.MX 952 32-bit 128Gb/16GB dual rank, dual channel device with 17-row addresses and x8 (byte mode) organization 1, 3, 7, 9   LPDDR5 - list of validated memories Note: The memory vendors often list their devices as LPDDR5x in their high-level product information while in fact, they are in most cases backward compatible with the LPDDR5 mode. This may lead to the false impression that there are not so many LPDDR5 devices on the market. In such cases, it is strongly recommended to check the full datasheet to confirm if the device is in fact LPDDR5/LPDDR5x or LPDDR5x only. The SoC cannot be used with devices that only support the LPDDR5X mode. The validation process is an ongoing effort - regular updates of the table are expected. SoC Density Memory Vendor  Validated Memory Part#  Notes i.MX 95 128Gb/16GB Micron MT62F4G32D8DV-023 FAAT:C - 64Gb/8GB  Samsung K3KL9L90QM-MHCT - 32Gb/4GB  Samsung K3KL8L80QM-MHCT 2 32Gb/4GB  Samsung K3KL8L80EM-MUCV 2        64Gb/8GB  SK HYNIX H58G66DK9VX067N 2 64Gb/8GB Micron MT62F2G32D4DS-023 FAAT:C 2, 6 32Gb/4GB Micron MT62F1G32D2DS-020 WT:D 2 16Gb/2GB Micron MT62F1G16D1DS-023 IT:B 2 64Gb / 8GB Rayson RS2G32LO5D24DB-31BT 2 32Gb/4GB Rayson ATL5X4G32M7E-31IT 2 64Gb / 8GB CXMT CXDB6CCBM-MA-A 2 i.MX 952 128Gb/16GB Micron MT62F4G32D8DV-023 FAAT:C 9 32Gb/4GB Micron MT62F1G32D2DS-020 WT:D 2   LPDDR5 - list of incompatible devices The SoC cannot be used with memory devices that only support the LPDDR5x mode. LPDDR4x - maximum supported densities SoC Max Data bus width Maximum density Assumed memory organization Notes i.MX 95 32-bit 128Gb/16GB dual rank, dual channel device with 17-row addresses 1 i.MX 952 32-bit 128Gb/16GB dual rank, dual channel device with 17-row addresses 1, 9   LPDDR4x - list of validated memories The validation process is an ongoing effort - regular updates of the table are expected. SoC Density Memory Vendor Validated Memory Part# Notes i.MX 95 64Gb/8GB Micron   MT53E2G32D4DE-046 AUT:C  5 8Gb/1GB Micron MT53E256M32D1KS-046 IT:L 2 128Gb/16GB Micron MT53E4G32D8GS-046 2 64Gb/8GB SK Hynix H54G66BYYVPX104 2 32Gb/4GB Intelligent Memory IMBG32L4KBB_V10 2 48Gb/6GB Micron MT53E1536M32D4DT-046 WT:A 3, 8 24Gb/3GB Micron MT53E768M32D4DT-053 AIT:E 3, 8 8Gb/1GB Samsung K4U8E3S4ADGHCL  2 32Gb/4GB Intelligent Memory IMBG32LK4BBG-046I 2 32Gb/4GB Alliance Memory AS4C1G32MD4V-046BIN 2 64Gb/8GB Rayson ATL4X8G32M2D-46IT 2 64Gb/8GB Rayson ATL4X8G32M2D-46AIT 2 64Gb/8GB DW DWCTB36HLC0 2 8Gb/1GB Alliance Memory AS4C256M32MD4V-062BAN 2 32Gb/4GB ISSI IS46LQ32K01S2A-046BLA2 2 32Gb/4GB Nanya NT6AT1024T32AV-J1 2 64Gb/8GB Nanya NT6AT2048F32AV-J1 2 i.MX 952 64Gb/8GB Micron   MT53E2G32D4DE-046 AUT:C  9   LPDDR4/4X - list of incompatible devices Note: This SoC supports LPDDR4x memory devices. This SoC is not compatible with memories that only support LPDDR4. Combo Devices that support both LPDDR4x and LPDDR4 are compatible with the SoC. Note 1: The numbers are based purely on the IP documentation for the DDR Controller and the DDR PHY, on the settings of the implementation parameters chosen for their integration into the SoC, SoC reference manual and on the JEDEC standards JESD209-5 (LPDDR5) and JESD209-4C/JESD209-4-1 (LPDDR4/4X). Therefore, they are not backed by validation, unless said otherwise and there is no guarantee that an SoC with the specific density and/or desired internal organization is offered by the memory vendors. Should the customers choose to use the maximum density and assume it in the intended use case, they do it at their own risk. Note 2: The memory part number did not undergo full JEDEC verification however, it passed all functional testing items. Note 3: Memory devices with binary densities (e.g., 1 GB, 2 GB, 4 GB) are preferred because they simplify memory management by aligning with system addressing schemes and reducing software complexity. Note 4: All memory parts are available at vendors unless stated otherwise. Checked Q2 2026 Note 5: Memory device supports both LPDDR4x and LPDDR4, however can only be used in LPDDR4x mode Note 6: Not validated by NXP but confirmed working on a non NXP Board Note 7: The maximum density supported may change in the future when DRAM vendors make higher density options available Note 8: This DRAM part number is not recommended for new designs Note 9: This SoC is in Pre-Production IMX95EVK
記事全体を表示
[RTD600 MCAL] S32K3X4EVB-T172 FlexCAN Wake-up This example project will show user how to use and configure the basic functionalities of ICU (WKPU) + CAN.   ------------------------------------------------------------------------------ * Test HW: S32K3X4EVB-T172 (SCH-53148 REV B2) * MCU: S32K344 * IDE: S32DS3.5 & S32DS v3.6.x * SDK release: RTD 6.0.0 * Debugger: PE Micro * Target: internal_FLASH  ------------------------------------------------------------------------------ This project configures both Can_43_FLEXCAN and CanIf modules for CAN communication, along with the ICU (WKPU) module for wake-up. Transmission is done via POLLING, while reception is configured via INTERRUPT.  Tx MB is set to STD ID 123h. Acceptance mask is set to 0x0 (accept all IDs). CAN messages are sent using Can_43_FLEXCAN_Write() and received using the CanIf_RxIndication() callback. After CanIf_bRxFlag is set, an ACK message is sent back. If TJA1153 transceiver is used, macro TJA1153_EVB_TRCV must be used. If not, use TJA1043_EVB_TRCV for standard transceiver initialization (CAN0_STB & CAN0_EN pins set to HIGH).  FlexCAN bitrate is calculated with: CAN bit timing calculator sheet. CAN classic (non-FD) 24Mhz clock 500Kbps 81.3% Sample Point Main routine: Waits for SW5 to be pressed, or for FlexCAN Rx interrupt. If SW5 is pressed, turns off green LED, disables FlexCAN and switches CORE_CLK to FIRC. It then configures PTA6 (CAN0_RX) for wakeup. If a CAN message is received (edge detect on PTA6), MCU wakes up and will enter main routine again. If a CAN frame is received, MCU will wake-up and wait for SW5 to be pressed again. Note: The first CAN frame may not be fully received since there will be some time for the MCU to warm up from STANDBY mode back to RUN mode, so the application may need to ignore the first CAN frame. Note 2: In order to test this example, another CAN node must be connected to CAN0_OUT. This example is provided as is with no guarantees and no support.
記事全体を表示
Flexera License Dongle Hello, We have been using CodeWarrior 5.2 and 11.1 for some time with the Flexera License keys. Everything was working correctly and then all of a sudden the CodeWarrior Suites do not seem to recognize the Dongle anymore.  lmtools correctly displays the FLEXid: I have the license.dat files at the following paths: C:\Program Files (x86)\Freescale\CWS12v5.2 C:\Freescale\CW MCU v11.1\MCU For CodeWarrior 5.2 I get the following error: And for 11.1 I get: The computer I am using is running Windows 11. We have some older laptops that are Windows 10 and have no issues on those. Any help will be greatly appreciated! Thank you, Zach
記事全体を表示
MPX5100 Voltage pins - Vout, V1, V2, Vex Hi there, I have been trying to test a few MPX5100DP units I received for calculating air flow. With a similar differential sensor I am able to see the expected pressure values. However, I cannot get Vout to change from its base voltage of 185/200mV. What is the purpose of V1, V2 and Vex and what do they correspond to? I'm sorry to ask, but I could not find an explanation for those pins in the datasheet or various application notes I found. Thank you for your help. Pressure Sensors Re: MPX5100 Voltage pins - Vout, V1, V2, Vex Hello Andrew, Thank you for writing. In this case, V1, V2 and VEX pins are used for factory trimming and it is recommended to leave these pins unconnected. Can you please share your schematic? How are you connecting the MPX5100DP device? Regards, David
記事全体を表示
使用MCUXpresso IDE构建和烧写应用 下面的步骤将指导您使用 MCUXpresso IDE 的 Cortex-M33 应用程序完成 hello_world 演示应用程序。MCUXpresso IDE 安装和 MCXN 系列的 SDK 可在本入门指南的 Get Software 部分找到。 在左下角找到快速启动面板。   然后点击导入 SDK 示例。 单击您正在使用的板选择可以在该板上运行的示例,然后单击 “下一步”。 使用箭头按钮展开 demo_apps 类别,然后单击 hello_world 旁边的复选框选择该项目。要使用 UART 进行打印(而不是默认的半托管),请在项目选项下选择 UART 作为 SDK 调试控制台复选框。然后点击完成 选择项目并通过单击上面提供的快捷方式中的 “生成图标” 或单击 “快速入门面板” 中的 “版本” 来版本项目 该项目应在控制台中不出现任何错误或警告的情况下构建 使用连接到 “MCU-LINK” 端口的 C 型 USB 线将板连接到计算机 。有关说明,请查看板的用户手册。 单击上方的 “调试” 图标或单击 “快速入门面板” 中的 “调试”,将应用程序下载到您的板上 选择 MCU-Link CMSIS-DAP 调试探针 打开串行终端,查看应用程序的输出。选择 "终端 "窗口并按下 "新终端 "图标 选择 "串行终端",然后将 UART 设置为 115200 波特率、8 位数据大小、无奇偶校验和 1 停止位。按确定 按 "运行 "图标运行应用程序。查看打印在终端上的输出结果
記事全体を表示
NETC IEEE 1588 timer software does not meet the requirement of RM In S32ZE NETC reference manual, "Document identifier: S32E27NETCRM Reference Manual Rev. 4, 2024-12-12", 3.2.5.3.1 Normal Mode with Drift and Error Adjustment, it claimed "During normal operation, any change to the 1588 timer configuration (for example TMROFF_H/L), except for TMR_ADD updates, requires that TSN related functionality such time gate scheduling, time specific departure scheduling, stream gating and rate policing, be disabled." But neither the gPTP software, nor the NETC device driver does meet this specification.  GPTP_STACK RTD Re: NETC IEEE 1588 timer software does not meet the requirement of RM We have a gPTP software module from NXP, is it correct? It will call the function "EthSwt_43_NETC_CorrectPtpClk" to update current time. I'm not talking about the "provide functions about correcting timer". My question is, while the gPTP is calling EthSwt_43_NETC_CorrectPtpClk() function to update current time, how to make the 802.1Qbv feature NOT be impacted? Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , ETH driver RTD2.0.1 follows ASR 21-11 that just includes some api functions for timestamp such as: For this reason, I think that they didn't provide functions about correcting timer as you said. Seems functions about correcting timer will be supported in ASR23-11 or gPTP have to make the request with changing the requirement if they need to use them in ASR21-11. Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Thanks for your attention. As you stated "driver just supported to get current timer from TMR  registers until now, not supports to configurate them", I do not understand.  How about gPTP software to change the OFFSET register? I do think the gPTP software definitely needs to change the OFFSET register. My question is, how to follow-up the RM, while the gPTP software is trying to change OFFSET register, to keep the TSN features, for example, the 802.1Qbv function working smoothly?  Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , I'll answer this topic for NETC driver. - The latest release was launched for ZE is RTD 2.0.1 that follows RM rev 3 and as far as I know, the next release RTD 2.0.2, still follows RM Rev 3. But if there is any update about RM version, SW team has a ticket to check change between new and old RM. I think that they can detect the change. - As far as I know, timestamp was supported in driver until now are default count TMR_CTRL[TE] = 0 and the feature EthEnableFreeRunningTimer just added to RTD 2.0.1 that works in 1588 timer TMR_CTRL[TE] = 1. Current timer will be gotten from 1588 registers TMR_FRT_L/H, but seem that there is an bug here because I didn't anywhere set TE (the ticket: ARTDCC1-593 for detail). Anyway, driver just supported to get current timer from TMR  registers until now, not supports to configurate them. The claim that you said seem just happen if user want to change 1588 register configuration. Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , You means want to stop TSN functionalities before changing 1588 list of registers, right? Current driver, I saw driver doesn't support the function to stop TSN. If you want to disable each features in TSN, seem you need to delete entries in each table. For example: - Rate policy: Netc_EthSwt_Ip_DeleteRatePolicerTableEntry(); - Netc_EthSwt_Ip_DeleteStreamGateControlListTableEntry(); -  EthSwt_43_NETC_StopTas(); Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , From my point of view, the problem is not only how many TSN features are enabled, because if the customer uses ASR context, these features enabled/disabled in precompile by macros but also are in each feature. As you know, each feature Rate policing, stream gate,... controlled through table as below: If user just configured elements in the configuration tool, then SW team can control how many entries with entry ID to delete them when disabling this feature. But in case, user adds elements by calling function, then SW has no way to know. But I think user can control this from their application. Maybe I missed something, but I understand TSN will refer to timer values, so it is make sense to stop them before changing timer configuration and start again to get new timer values. I believe that SW team can has deep insight when they analyzing that ticket.  Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , If you don't have any idea about ETH driver anymore, please remove RTD from this topic so that someone is from gPTP can answer you. Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi, Thanks for your great help. Please have me highlight one very import thing for AUTO customers, while they are using TSN IEEE802.1Qbv feature, of course, they need to enable gPTP as well per 802.1Qbv time sync requirement. They are concerning about whether the gPTP will impact the critical traffic which is in one 802.1 Qbv slot. We (NXP) need to clarify it and provide how to do it. This is a very dedicate and clear requirement. And it's a good example or use case for you to understand the situation. Yes, for sure, we do not know how many TSN features customer are enabling. But for everyone of possible using, we need a solution. Customer could make right selection based on their use cases. Thanks, Jeff  Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi, Yes, I still have a question. Please help to check how to dis-able/re-enable 802.1Qbv from Ethernet driver point of view. And please help analyze whether this kind of action will cause the critical traffic delay one of 802.1Qbv schedule cycle? Thanks, Jeff   Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi, It's NOT me want to disable the TSN feature before gPTP changed timer offset register. It's the requirement of NETC RM. Customer is asking for official solution to meet the RM specification from NXP: how to disable TSN features, i.e. IEEE802.1Qbv under this situation. Customer assume it should be provided by NXP, because it's hardware requirements and hardware related coding.  By the way, I'm thinking your suggestion need to be well designed. Especially for 802.1Qbv, how to make the application traffic NOT impact by the gPTP sync action. For example, is it possible that some traffic might be delay one Qbv schedule cycle?  Thanks, Jeff Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , From my point of view, it is difficult to meet this requirement from ETH driver with the official function that stop TSN . As you can see, to disable the Port Gate time schedule , just need to reset the bit Time Gate enable PTGSCR[TGE]. But for some TSN features, such as Rate Policy, this feature was enabled/disabled based on elements in this table. But from ETH, we can't know entries were added to this table to delete or update elements to disable them, upper layer can handle this better. For this reason, I suggested to call functions that delete entries in each table as my previous reply. In case, user didn't enable option features: rate Policing, stream gate control list,... they can disable TSN with the function  EthSwt_43_NETC_StopTas() . Anyway, I created the ticket ARTDCC1-607, you can follows it to get the analysis from SW team in case I missed something. And RM Rev4 hasn't applied to RTD release yet. If you don't have more idea about ETH for this topic, please let me know, I'll free this case to gPTP can continue answer you from their side.  Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi @shuangjunzhu , I saw the feature 802.1 Qbv supports both NETC and Switch. So, you can configure this feature through: - Eth_NETC: - Port switch: The functions are: For ETH_NETC: - Eth_43_NETC_StartTas() - Eth_43_NETC_StopTas() For Port switch: - EthSwt_43_NETC_StartTas()  -  EthSwt_43_NETC_StopTas()  For this question: "analyze whether this kind of action will cause the critical traffic delay one of 802.1Qbv schedule cycle", from my point of view, as you can look at the function Netc/PortSwt_Ip_ConfigPortTimeGateScheduling() that enable/disable this feature, to disable this feature, just need to reset one bit but enable this feature, need to enable Gate Time and set up Gate Time table. This time can measure.   I understand that you means about "one of 802.1Qbv schedule cycle" is the execution time of the Gate control list should be repeated, right? If it is, this can be configured.  Best regards, Nhi Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi, It looks like you still do not catch up my question. Please let me have a more detail description. Assume customer has a Qbv configuration and it's in running status with the parameter as below:  1. the cycle time is 10ms 2. in one 10ms time period, there are two slots, 5ms individually. In other words, there are two entries in the gate list. 3. Assume while the first time slot is open, NETC is transmitting the critical frames. At this time the gPTP start to update current time, per RM requirement, customer needs to disable/re-enable 802.1Qbv.  4. After the 802.1Qbv is re-enabled, It's possible that the NETC hardware might continue to open time slot 1, or go to gate list 2nd entry, or wait for new Qbc schedule cycle.  If the hardware go to 2nd entry, it means the critical frames in NETC queue will be transmit in next 10-ms cycle. And it might cause big delay and impact applications. 5. Customer is asking how to avoid this kind of situation. In other words, how to smoothly disable/re-enable Qbv to reduce the impact to the applications. Hope it will make thing clear. Thanks, Re: NETC IEEE 1588 timer software does not meet the requirement of RM Hi, I didn't see another way to enable/disable TAS except 2 functions that I mentioned in the previous reply. From my point of view, when disable time gate control, all of features of this also disabled, time interval, cycle,... Duration between disable and enable TAS, includes time to finish updating timer from gPTP. When enable TAS, base time will be updated with current time. Except new base time = next old interval time, if not can't see your requirement.  I have no more idea about this, I also updated this question in above ticket so that SW team can have suggestion for your case. Best regards, Nhi 
記事全体を表示
RT1170 MIPI-CSI カメラ - YUV422 (8 ビット) サポート こんにちは、 i.MX RT1170 MIPI-CSI インターフェースを使用して YUV422 (8 ビット) を出力するカメラ モジュールの使用方法を示すリファレンス デザイン、アプリケーション ノート、またはサンプル プロジェクトはありますか? RT1170 エラッタ ( https://www.nxp.com/docs/en/errata/IMXRT1170ACE.pdf ) を確認し、YUV422 10 ビット形式はサポートされていないことを理解しましたが、YUV422 8 ビット操作を具体的に示す公開例や確認は見つかりませんでした。 あらゆるガイダンス、動作が確認されている構成、またはカメラ モジュールの例があれば、大変助かります。 Re: RT1170 MIPI-CSI Camera - YUV422 (8 bit) support こんにちは@mtreloarさん、 NXP MIMXRTシリーズにご興味をお持ちいただきありがとうございます。 RT1170 MIPI-CSI は YUV422 (YUYV 8 ビット) 形式をサポートします。SDK のこのサンプル プロジェクトを参照できます。 よろしくお願いします、 ギャビン
記事全体を表示
eRPCの紹介 このチュートリアルでは、eRPC(埋め込みリモートプロシージャコール)オープンソースプロジェクトを紹介します。 eRPC(Embedded Remote Procedure Call)は、NXPが作成したリモートプロシージャコール(RPC)システムです。RPC は、単純なローカル関数呼び出しを使用してリモートシステム上のソフトウェアルーチンを呼び出すためのメカニズムです。リモートシステムは、ネットワーク経由のサーバー、マルチコアシステム内の別の CPU コアなど、任意の通信チャネルによって接続された任意の CPU です。クライアントにとっては、アプリケーションに組み込まれているライブラリの関数を呼び出すのと同じようなものです。唯一の違いは、通信チャネルによって生じる遅延や信頼性の低下です。 重要なリンク: eRPC 開発に関連するすべてのものはGitHub - eRPC baseに公開されています。 eRPC開発はGitHub - eRPC開発に公開されています。 eRPC のリリースはGitHub - eRPC Releasesに公開されています。 eRPCのドキュメントはGitHub - eRPC wikiに公開されています。 pypiでのeRPC PythonパッケージとしてのeRPC eRPC は、マルチコアおよびマルチプロセッサタイプのアプリケーションをサポートしています。 eRPCの例が見つかる場所 NXP MCUXpressoSDK パッケージには、eRPC マルチコアおよびマルチプロセッサの例が豊富に含まれています。これらのパッケージを構成、ビルド、ダウンロードするには、https://mcuxpresso.nxp.comにアクセスしてください。 マルチコアサポート(eRPCを含む)を備えたボードリストを取得するには、ミドルウェアに基づくフィルタリングを使用し、「multicore」という文字列を検索してください。選択したマルチコアミドルウェアを含むパッケージをダウンロードしたら、 /boards/ /multicore_examples で eRPC マルチコアの例 (RPMsg_Lite またはメッセージングユニットトランスポートを使用) または /boards/ /multiprocessor_examples で eRPC マルチプロセッサの例 (UART または SPI トランスポートを使用) を参照してください。 eRPC の例では、「erpc_」という名前のプレフィックスを使用しています。 NXP MCUXpressoSDK eRPC マルチコアおよびマルチプロセッサの例を取得するもう1つの方法としては、mcux-sdk Github リポジトリを使用します。West ツールを使用して mcuxsdk リポジトリを複製および更新する方法については、readme の「概要」セクションの説明に従ってください。完了すると、armgcc eRPCの例は mcuxsdk/examples/ /multicore_examples または mcuxsdk/examples/ /multiprocessor_examples フォルダで見つかります。 例えば、board_name として evkmimxrt1170 を使用することができます。MCUXpressoSDK パッケージと同様に、eRPC の例では「erpc_」という名前のプレフィックスを使用します。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Kunal様、あなたの質問がこちらで取り上げられているようです。 eRPCをiMx6sxに実装するためのステップバイステップの手順が必要です。 · 問題 #5 · EmbeddedRPC/erpc-imx-demos · GitHub  Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> HI [email protected]‌, MPC5748GでのeRPCの公式な使用法についてはわかりません。念のために言っておくと、eRPCはプログラム言語、OS、トランスポート層に依存します。ボード固有のファイルはありません。したがって、FreertosとC言語が使用されている場合、ほぼ問題なく動作します。必要なのは、使用したいトランスポートを移植することだけです(まだである場合)。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan,       eRPCはNXP MPC5748Gに移植されていますか?参照できるサンプルコードはありますか? よろしくお願いいたします。 Alex Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi [email protected], 私はこの分野での経験があまりありません。最近、複数のタスクから複数のerpc呼び出しが行われた際に、いくつかのミューテックスを追加する必要がありました。でも、あなたのアイデアは気に入りました。 すぐにソースコードを確認しましたが、ユースケースを指定する必要があります。しかし、これは RPSMG を使用する Mcore と iMX Linux のどちらが優れているかの問題だと思います。この場合、私たちと同じようにミューテックスを追加できると思います(これにより、eRPC呼び出しがシリアル化されます。performRequest 関数のどこかに追加する必要があります。)スレッドごとにエンドポイントを作成するのは良さそうに聞こえますが、解決しなければならない問題がまだあります。より小さなソリューションは次のようになります。トランスポート初期化関数は(タスクの数に基づいて)より多くのエンドポイントを初期化し、クライアント側のeRPC rpmsg送受信機能を未使用のエンドポイントを使用して送信し、同じエンドポイントを使用してメッセージを受信するように変更し、サーバーのeRPC rpmsg受信機能はすべてのエンドポイントでメッセージを待つ必要があります。 あなたにとってこれが簡単な作業なのか、それとももっと複雑な作業なのかわかりませんが、コードを変更しないとマルチスレッド呼び出しができなくなるのではないか心配です。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan, 私はここCubicでチャンディーニと一緒に働いています。複数のスレッドから呼び出されたときに、eRPCに関する追加情報を取得したいと思いました。現在、私たちは単一のエンドポイントを使用しており、次の呼び出しを行う前に完了する一度限りの呼び出しに、これを使用しています。現在、複数のスレッドから複数の呼び出しを行う可能性があるため、これを行う最善の方法を検討しています。 実際、私の知識不足から、同時に他の電話をかけてみましたが、問題が発生するまでそれを行っていることに気づきませんでした。 現在、eRPCから通信失敗エラーコードが返されていることが確認できます。 これには単一のエンドポイントを使用できますか。つまり、クライアント側でスレッドセーフにすべきでしょうか。 そうでない場合、スレッドごとに別々のエンドポイントを使用すべきでしょうか。 それとも、何か他のことをすべきでしょうか? よろしくお願いします。 リー Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi [email protected]‌, お知らせいただきありがとうございます。面白いですね、今日は別のプロジェクトでこのことを読みました(笑顔の顔文字) Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan, 迅速なご返信をありがとうございます。 クライアントとサーバーの両方のソケット接続で以下の API 呼び出しを使用して Nagle アルゴリズムを無効にすることで、TCP でより良いパフォーマンス(マイクロ秒単位の応答)を実現できました。 int result = setsockopt(sock, /* 影響を受けるソケット */                         IPPROTO_TCP,     /* TCPレベルでオプションを設定する */                         TCP_NODELAY,     /* オプションの名前 */ (char *) &flag、/* キャストは歴史的な名残です */                         sizeof(int));    /* オプション値の長さ */ 参考資料: TCP_NODELAY: 2018年のTCP最適化のベストプラクティス | ExtraHop ありがとうございます サシダラン。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi [email protected]‌, おそらくGitHubで(同じトピックで、または新しいトピックを作成して)質問すると良いでしょう。TCP を使って何かをしている人が少なくとも 2 人います。 github: GitHub - EmbeddedRPC/erpc: Embedded RPC スレッド1:複数の接続を処理する TCP トランスポートを備えたサーバー · 問題 #32 · EmbeddedRPC/erpc · GitHub スレッド2: TCP サンプルクライアント/サーバーコード · 問題 #39 · EmbeddedRPC/erpc · GitHub 個人的にこれを見つけましたが、これがあなたのケースに当てはまるか、役立つかどうかはわかりません: linux - Ubuntuでの低遅延TCP設定 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan, eRPCをTCPソケットに移植したいと思います。 仮想シリアル(Linux内)でサンプルテストコード(test_arrays)を実行したところ、シリアルの応答時間は1ミリ秒未満でした。 同じサンプルコードをTCP経由で実行したところ、TCPの応答時間は約90ミリ秒でした。 遅延を減らし、シリアルと同様に TCP 上のパフォーマンスを向上させる方法はありますか。 ありがとうございます サシダラン。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, Dusan. 助かりました。ちなみに、ヘッダーファイルに例が挙げられていました。 A9 からの関数呼び出しは正常に動作し、M4 はデータを返します。 しかし、現在の問題はM4が関数を呼び出すときに発生します。エラーがA9に表示されています。「MU送信バッファ空のタイムアウトが発生しました。 うーん、imx_mu_rpmsg_send()が失敗しました:-5」。  このエラーの後、他の側でもデータ関数の呼び出しが機能しなくなります: 「rpmsg_multiept rpmsg0: virtqueue_add_outbuf failed: -5」 何を確認すればよいでしょうか? ご協力ありがとうございます。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Vadim, 一般的には2つのタスクが必要です。1つはクライアント用、もう1つはサーバー用です。問題は、erpc_arbitrated_client_initからの出力をinitサーバーのパラメータとして設定する必要があることです。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、ドゥシャンさん、マレクさん、コミュニティの皆様。 eRPC を使用していくつかのアプリケーションを作成しました。M4(クライアント)-A9(サーバー)または M4(サーバー)-A9(クライアント)は問題なく動作しますが、各側でクライアント/サーバーアプリケーションを使用したいと考えています。しかし、今は動作しておらず、片側からの機能が1回しか実行されず、アプリケーションがハングします。 コードの全体的な構造を確認したいです。 何が問題なのでしょう。 M4上でクライアントとサーバーに2つの別々のFreeRTOSタスクを使用すべきですか。 M4 . . erpc_transport_t transport = erpc_transport_rpmsg_lite_rtos_remote_init(.....); erpc_mbf_t message_buffer_factory = erpc_mbf_rpmsg_init(transport); erpc_server_init(transport, message_buffer_factory); erpc_add_service_to_server(create_TEST_service()); erpc_arbitrated_client_init(transport, message_buffer_factory); while (true) { erpc_server_poll(); function1(....); } A9 . . erpc_transport_t transport = erpc_transport_rpmsg_linux_init(......); erpc_mbf_t message_buffer_factory = erpc_mbf_dynamic_init(); erpc_server_init(transport, message_buffer_factory); erpc_add_service_to_server(create_TEST_service()); erpc_arbitrated_client_init(transport, message_buffer_factory); while (true) { erpc_server_poll(); function2(....); } Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> vadimfilippenko様、Python バージョンの使用にまだ興味がある場合は、こちらのスレッド「MPU パッチをカーネルに追加する - 新しいモジュールが表示されません · 問題 #2 · EmbeddedRPC/erpc-imx-demos · GitHub」をご覧ください。mhanuel26の少なくとも最後の2つのメッセージ では、Pythonアプリケーションを使用できているということですので、あなたにとって興味深い内容となっているでしょう。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Dusan, Marek, ついに、修正されたeRPCの例を正常に起動することができました。しかし、Linux側ではCを使用し、M4では6つのパラメーターを持つerpc 1.5.0のrpmsg初期化関数を使用しています(6番目のパラメーターに関するDusanのヒントはGitHubにあります)。サポートありがとうございます。まだ質問させていただきます。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Python アプリの前に M4 アプリを実行する必要があります。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Vadim, こちらに投稿してください:ls /sys/class/rpmsg ネームサービスが M4 から送信されなかったようです (M4 は正しいファームウェアで実行されていますか?)。このため、M4から動的にアナウンスされたチャネルを持つフォルダが作成されなかったため、Pythonはrpmsgトランスポートを作成できません...M4コアの出力を確認してください。よろしくお願いします。 Marek Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Vadim,  他のコメントをご覧のとおり、できるだけ早く回答するよう努めておりますが、今週(そしておそらく来週)は忙しくしております。 ただ、私がエラーで見たところでは、transport.py 内の RpmsgTransport クラスにある init 関数を比較する必要があります。 こちらもご確認ください。 erpc-imx-demos/sysfs.py at master · EmbeddedRPC/erpc-imx-demos · GitHub   - クラス RpmsgEndpoint GitHub - EmbeddedRPC/erpc-imx-demos: eRPC demos for i.MX devices が最新であり、サブリポジトリが erpc-imx-demos と整合しており、コミット時にチェックアウトされていることを確認してください。 おそらく、ここで何が問題なのか、mareknovakが教えてくれるでしょう。 以下のようになります。 if self.id == -1: raise Exception() is returning -1 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 以下の問題について、どなたかお手伝いいただけますか。 私は、iMX6COM ボード上の erpc-imx-demos から eRPC デモの例を使用しています。 M4側でデモアプリケーションを開始しています。 "ハードウェアが初期化されました eRPCが初期化されました MatrixMultiplyサービスが追加されました" Linuxでドライバーを追加中です。 "root@imx6sxea-com:~# modprobe -v rpmsg_multiept insmod /lib/modules/4.1.15-2.0.3+geb0b90b/kernel/drivers/rpmsg/rpmsg_multiept.ko" (システムから、rpmsgチャネルが作成されたことや、sys/class/rpmsgの下のrpmsgフォルダが空であることに関するフィードバックはありません) Linuxでapplデモを開始します。 トレースバック(最後の呼び出し): ファイル「example.py」、 の111 行目 transport = erpc.transport.RpmsgTransport() ファイル「build/bdist.linux-armv7l/egg/erpc/transport.py」、__init__の199行目 ファイル「build/bdist.linux-armv7l/egg/rpmsg/sysfs.py」__init__ の116行目 例外 例外タイプエラー: > の 追伸: cmake と eclipse を使用してM4 eRPC デモアプリを作成しました。 M4 rpmsg デモアプリケーションは正常に動作しています。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Vakul, 申し訳ありません、コメントを見逃しました。現在、暗号化トランスポートはサポートされていません。しかし、eRPC はモジュール式であるため、この機能を eRPC プロジェクトに簡単に追加できると思います。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi eRPC通信は、何らかの暗号化通信プロトコルを使用して保護できますか(例:TLS)。 よろしくお願いします。 Vakul Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、Evgenyさん。現時点ではその見積もりはありません。しかし、erpc_malloc/erpc_free関数の独自の実装を書くことで、独自のアロケータを作成または使用できると考えています。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan, erpcMatrixMultiply_shim の生成された同等物など、追加部分に静的メモリ割り当てを追加する予定はありますか。すべての入力引数が、コーデックからデータを入力する前に動的に割り当てられ、関数呼び出し後に解放される場所のはどこですか。 事前に割り当てられたメモリを(ユーザーアプリによって静的に)フレームワークに渡すようなものですか。 ありがとうございます Evgeny Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Evgeny様、これは MCUExpresso プロジェクトファイル/IDE の問題のようです。フォルダー名の最上位層は仮想ディレクトリである必要があり、将来的にはそこに表示されなくなります。ディスク上のパッケージでは、eRPCはGitHubと同様のディレクトリ構造を持つ必要があります。Github のディレクトリ構造が推奨されています。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan, erpc は実行時に大量の動的メモリ割り当てを使用しているようです。さらに組み込み向けにして、静的メモリ割り当てスキームを追加する予定はありますか。 編集: 最初の質問についてですが、申し訳ありません。リポジトリに erpc_setup_mbf_static.cpp があるのは確認できました。問題は、私のコードはMCUXpresso SDK-frdmk66f_multiprocessor_examples_erpc_server_matrix_multiply_spi & frdmk66f_multiprocessor_examples_erpc_client_matrix_multiply_spiで提供されている例に基づいて作成されているということです。リポジトリ内のコードとはディレクトリ構造がまったく異なります。 再度確認させていただきます。SDKサンプルのディレクトリ構造を使用するべきか、それともリポジトリを使用するべきかですか。これらは大きく違うのですか。 ありがとうございます Evgeny  Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Evgeny, まず、開発ブランチのsmac.erpc(およびここでビルドされたアプリ)を使用していますか。私の場合、このバージョンが動作しています。 現在、erpcgen アプリのバージョンと残りの eRPC コードが接続されています。ですから、GitHubからビルドした新しいerpcgenアプリを使用する場合は、GitHubのerpc_c/*ファイルをGitHubから例にコピーする必要があります。その後、新しい erpcgen アプリでコードを再生成し、アプリケーション(erpc init + transport)関数を更新すれば、すべてが正常に機能するはずです。そうではなく、erpc_c ファイルを更新しない場合は、提供されている erpcgen アプリを使用する必要があります。 このページの下部「はじめに · EmbeddedRPC/erpc Wiki · GitHub」をご覧ください。新しい erpcgen バージョンでは最新の状態になっているはずです。 確証はありませんが、最新のコミットで SPI が変更される可能性があるため、代わりに古い実装を使用してください。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hey Dusan, 私がビルドした erpcgen.exe を使用すると、smac.erpc の例で同じエラーが発生します。 エラー: ファイル smac.erpc:135:5: 構文エラー、予期しない識別子、'}' を期待しています 私が言及していたディレクトリ構造は、リポジトリの erpc_c で、次のとおりです。 SDKのサンプルでは、どのディレクトリ構造が正しいのでしょうか。新しく生成したファイル(私が作成したもの)を SDK のサンプルコードで使用しても安全でしょうか。 ありがとうございます Evgeny Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi evgenyerlihman‌, 推奨されるコードは常に GitHub の develop ブランチにあります。このコードが新規リリースの要件を満たしたら、マスターブランチにマージし、アプリケーションのバイナリも提供します。開発ブランチでのこれらの更新は、Kinetis SDK のリリースよりも頻繁に行われます。既存の eRPC トランスポートが Kinetis SDK で使用されているトランスポートのバージョンと一致しない場合は、古い eRPC トランスポートと新しいものを比較するか、git リポジトリでファイルの変更を確認できます。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hey dusancervenka-b51352, 迅速なご返信ありがとうございます。devブランチをクローンしました。erpc_c ディレクトリ構造が Kinetis SDK に付属する例とは大きく異なることがわかります。どちらが好ましいですか。 ありがとうございます Evgeny Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi evgenyerlihman‌, 実のところ、より頻繁に更新を行っています。ブランチを開発するにはスイッチが必要です。 GitHub - EmbeddedRPC/erpc at develop. 最後のコード更新は昨日でした。ただし、そこで erpcgen アプリケーションをビルドする必要があります。そのsmacでIDLは動作するはずです。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi dusancervenka-b51352, 複数の NXP Kinetis デバイスを使用する新製品に erpc フレームワークを使用することを検討しています。erpc GitHubの最終更新は6か月前に行われたようです。お尋ねしたいのは、これがまだ保守/修正/開発されているのかどうかです。GitHubのサンプルを試しました。 erpcgen.exe smac.erpc エラーが発生し、cppソースコードの生成に失敗しました。 erpcgen 実行可能ファイルは、MCUXpresso SDKからのものです。 ありがとうございます Evgeny Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、チャンディーニさん 大丈夫です。私も長期休暇中でした。楽しんでいただけたのであれば幸いです。 コミュニティ・メッセージング・システム (プライベート・メッセージ) を通じてあなたにメールを送りました。 メールで詳細を話し合うことができます。基本的には、GitHubでフォークを作成し、開発ブランチにチェックアウトし、変更を適用し、コミットを作成し、プルリクエストを作成する必要があります。私たちはあなたの変更を確認し、変更を提案し、開発ブランチにマージします。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan , ご返信が遅くなり、申し訳ございません。長期休暇を取っていました。戻ってきましたところで、ここにいるメンバーと相談しました。リソースを転送できるように、メールアドレスを教えていただけますか。NXPの方針で、あなたの GitHub に直接入れることができません。 よろしくお願い申し上げます。 チャンディーニ Re: Introducing eRPC こんにちは、ドゥサンさん はい、先輩に相談してプルリクエストを作成します。現在休暇中です。返信が遅くなり申し訳ありません。 よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Chandini様、ご成功を収められたことを嬉しく思います。もし特別な提案をさせていただけるなら、新しく作成したトランスポートレイヤーを使用して、eRPCのGitHubの開発ブランチにプルリクエストを送信していただけますか。新しい eRPC で動作させるには、多少の作業が必要になるかもしれません。しかし、あなたがそれを更新したくない場合は、こちらでそれを行うことができます。(ウィンクの顔文字) GitHubのプルリクエストを使用すれば、コントリビューター履歴に常に表示される貴重なコントリビューターになっていただけます。eRPC があなたにとって良い解決策となることを願っております。いつでもこちら/または GitHub よりお手伝いさせていただきます(ウインクの顔文字) Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi dusancervenka-b51352 , b50844 , novakma7   ようやく動作しました。LinuxでC++コードを使ってデモが正常に動作しています。 質問にすべて答えてくださり、本当にありがとうございます。(笑顔の顔文字) Dusan様に感謝いたします。(笑顔の顔文字) よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> HI Dusan , 他の作業で忙しかったので、昨日は何も試すことができませんでした。今日は試してみて、結果をを知らせします。 自分の機能を少し変えて試してみる必要があると思います。これまでは、送信関数と受信関数に char* だけを渡していました。 すぐにご連絡いたします。 よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Chandini様、その通りです。社外にいたので、機能の正確な名前はわかりませんでした。あなたの場合、これはうまく動作していますか。 Re: Introducing eRPC こんにちは、ドゥサン お返事ありがとうございます : write(fd, message->getBuffer() , message->getUsed()😞 9e18d069aeae19a6e80a5e8783903bc63bd9b567 · EmbeddedRPC/erpc · GitHub の erpc/ message_buffer.h に getused 関数が記載されていますが、getbuffer 関数は見つかりませんでした。 バッファを取得するには以下の関数を使用する必要があると思います。これは正しいでしょうか。 /*! * @brief この関数は、読み取り/書き込み用のバッファへのポインターを返します。 * * @return 読み取り/書き込みするバッファへのポインタ。 */ uint8_t *get() { m_buf を返します; } そしで、私の関数は次のようになります。 send :erpc_status_t send(MessageBuffer *message) { write(fd, message->get, message->getUsed())};  よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、chanidi さん。別の方法で行う必要があります。transport.h を使用しなければなりません。それを使わないと、うまくいきません。 おそらく、前述のように ioctl コマンドを使用することができるでしょう。 erpc_status_t receive(MessageBuffer *message) {int fd = open("/dev/rpmsg_ept1024.1", O_RDWR);} 送信 :erpc_status_t send(MessageBuffer *message) { write(fd, message->getBuffer(), message->getUsed())}; 読み取り: erpc_status_t receive(MessageBuffer *message){size_t size = read(fd, message->getBuffer(), 500);message->setUsed(size)}; novakma7 手順を確認いただけますか。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Dusan , Marek はい、私もそのファイルを言及していますが、 trasport.hを使用して、トランスポートレイヤーを作成しています。しかし、引数の不一致の問題に直面しています。 transport.h の send 関数と receive 関数はMessagebufferを引数として取ります。          virtual erpc_status_t receive(MessageBuffer *message) = 0;          virtual erpc_status_t send(MessageBuffer *message) = 0; example.py に従って、以下の引数が必要な RPMSGendPoint クラスを作成しました。       RpmsgEndpoint::receive(int maxlen) RpmsgEndpoint::send(char *buffer,int dst) 私の理解では、Linuxから /dev/rpmsg_ept1024.1デバイスを読み書きするだけでよいと考えています。   ですから、transport.h を使用する代わりに、独自の transport.h バージョンを作成する必要があるのではないかと考えています。 皆様、ありがとうございました。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> どういたしまして。/erpc-imx-demos/middleware/erpc/transport/フォルダからヒントを得ることができます。いくつかのトランスポート手段があります。 Re: Introducing eRPC ドゥサンさん、早速返信ありがとうございます それで、私は同じ道を進み続け、すぐにあなたに戻ってきます。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Chandini様、おっしゃる通り、それが正しい手順です。transport.h からクラスを継承するクラスを作成する必要があります。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marek 私は再び質問があります。 現時点の作業のステータスは以下の通りです。 C++でRpmsgEndpointクラスを取得しました。 現在、クライアントアプリケーションを動作させる方法を検討しています。 erpc-imx-demos/MPU/example_erpc at master · EmbeddedRPC/erpc-imx-demos · GitHub の Python example.py で、Transport クラスから継承された RpmsgTransport を呼び出します。 transport.hを使用すべきかどうかというのが質問です。これは、/erpc-imx-demos/middleware/erpc/erpc_c/infra にあり、アプリケーションを動作させています。 そうすることで、RpmsgTransport クラスを作成し、これをクライアントアプリケーションと呼ぶことができるようになります。 この考え方で正しいでしょうか。 よろしくお願いいたします チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> はい、その通りです。 Python が行うのは、ファイルに対する IO 操作(読み取り/書き込み)だけです。これは C/C++ を含むあらゆる言語で実行できます。Python は、Linux ユーザースペースでの人気から、実行方法をを示すために選ばれましたが、もちろん C に移植することも可能です。 これで認識が一致していると思います。 幸運を祈っています。 これからもよろしくお願いいたします。 Marek Re: Introducing eRPC こんにちは、マレク ご返信ありがとうございます。疑問がいくつか解消されました。 freeRTOSを両方使う予定はありません。 私たちのプランは次のようなものです。   M4-FreeRTOS ----これはお客様のデモにあります。 A7-Linux -----デモにはカーネルRPMSG実装を利用するためのPythonコードが含まれています。   私たちに必要なのは、PythonではなくCまたはC++です。 PythonコードはCまたはC++に簡単に移植できるのですよね。 よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはチャンディーニ・インダバラ・バサヴァラジュさん、 RPMSg-Lite は RPMsg プロトコルの実装であり、FreeRTOS またはベアメタルを実行する M4 側のみを対象としています。Linux/A7 側では、カーネル内の RPMsg 実装で問題ないでしょう。(こちらにある通りです: GitHub - EmbeddedRPC/erpc-imx-demos: i.MX デバイス用の eRPC デモ) それとも、M4コアとA7コアの両方でFreeRTOSを実行する予定ですか。その場合も機能しますが、これは標準的なユースケースではありません。Aコア用の移植レイヤーを作成し、そこでFreeRTOSを実行する必要があります。 これで何らかの方向性が見えることを願っております。 Marek Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Marek どういうわけかあなたのメッセージを見逃してしまいました。申し訳ありません。 どうもありがとうございます。(笑顔の顔文字)すぐに新しいバージョンを試してみます。 RPMSG トランスポート層に関する最後の質問にお答えいただけますか。 ありがとうございます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、分かりました。 新しいものを作成する必要があります(また、GitHubのプルリクエストを使用して、必要に応じてリポジトリに追加できます)。 Linux 側では、/dev/ttyRPMSG を使用できます(システムに存在する場合)。   たとえば、こちらの erpc_c/transports で新しいトランスポートを作成します。 init は次のようになります: int fd = open("/dev/ttyRPMSG", O_RDWR); 送信:write(fd, buffer, buffer_size); read: size_t size = read(fd, buffer, 予想サイズ); このように名前が付けられたデバイスがない場合は、Python コードからヒントを得ることができます。RPMSGは私の好みではありません。Linuxでどのように使用すべきかわかりません。ご質問をMarekに転送します。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan , Marek 私が計画していること: M4(freertos)およびA7(Linux)の両方でrpmsg-liteを使用する 必要なもの M4とA7の両方で使用できるRPMSG Cラッパー(erpc_c/setup内) M4とA7の両方で使用できるRPMSGトランスポートレイヤー(erpc_c/transports内) 質問があります。 教えていただけますか、そのためのトランスポート層をお持ちですか? または rpmsg-pythonを参照して同様に記述する必要がありますか。 どんのようなご提案でもとても役立ちます。 皆様、ありがとうございました。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは。必要なもの(Linux側用のCトランスポート)があるかどうかわかりませんが、新しいものを作成するのは簡単なはずです。/dev/ttyRPMSG から読み取りと書き込みができます(システムに存在する場合)。 以下にその例をご紹介します。 init は次のように見えます: int fd = open("/dev/ttyRPMSG", O_RDWR); 送信:write(fd, buffer, buffer_size); read: size_t size = read(fd, buffer, expected size) mareknovakがこの問題にさらに答えをくれるはずです。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan , アップデートについてお知らせいただき、ありがとうございます。 今は手元にあるerpcで大丈夫だと思います。rpmsgクライアントアプリケーションが動作するようになったら、erpcのバージョンも更新できます。 rpmsg-lite、M4プラットフォームファイルを含むものを探していたところです。 A7プラットフォーム用の製品はありますか。あるいは、何か情報があれば大変助かります。主な目的は、トランスポートレイヤーとしてRPMSgを使用し、C言語でクライアントアプリケーションを作成することです よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ご自分で問題解決を進めておられるとのこと、嬉しく思います(開発者にとってそれほど複雑ではないということでしょうから)。また、mareknovakは、上記のコメントで言及されている通り、リポジトリ内の imx デモアプリケーションをすでに更新しています。次のステップでは、新しいRPC機能を使用しているため、そのバージョンをお使いいただけます。(ウィンクの絵文字) Re: Introducing eRPC 返信ありがとうございます、ドゥサン それが私が探していた情報です。TCP用のCラッパーを作成し、erpcでいくつか修正した後、うまくいきました。 次のステップは、TCP層をrpmsgに置き換えることです。 再度ありがとうございます チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはチャンディーニ・インダバラ・バサヴァラジュさん、 GitHub - EmbeddedRPC/erpc-imx-demos: eRPC demos for i.MX devices リポジトリが eRPC 1.4.0 と RPMSg-Lite 1.1.0 を使用するように更新しました。 コード生成に使用されるビルド済みの erpcgen アプリケーションをこちらからダウンロードできます: Release v1.4 · EmbeddedRPC/erpc · GitHub  ダウンロードセクションで、アーキテクチャを選択してください。 その後、./erpcgen-gpy nameOfInterfaceDefinitionLanguageFile.erpc のように呼び出します。ERPC、Pythonのシリアル化と逆シリアル化のシムコードが生成されます。-gpy を省略するか、-gc を指定すると、C シムコードが得られます。 ser/des shimコードもerpc-imx-demosリポジトリの最新のコミットで更新されているので、気軽にご利用ください。 プルリクエストの形で変更を送信してください。 よろしくお願いいたします。eRPC & RPMsg-Liteをご利用いただきありがとうございます。 Marek Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、現在githubリポジトリに例がありませんが、C(c ++)テストがあります。Linux または Mac に慣れていれば、それを例として使用できます。その他のオプションは上記の通りです。 1. サポートされているボード用の SDK をダウンロード -> マルチコア・マルチプロセッサ C/Python の例。 2. この記事をお読みください:はじめに · EmbeddedRPC/erpc Wiki · GitHub Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan PythonではなくCのクライアントアプリケーションのサンプルがあるか、あるいは、作成の予定があるか教えていただけますかすでにあれば、とても便利で役に立ちます。 よろしくお願いいたします チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ようやく動くようになりました。ご協力いただき、ありがとうございます。(笑顔の顔文字) Dusan 申し訳ありませんが、パッチを添付するためのオプションが見つかりませんでした。以下に貼り付けました。 From 7a5b152524a3c82b5bced4a72ed396f21860b666 Mon Sep 17 00:00:00 2001 日付: 2017年5月8日(月)11:33:05 +0100 件名: [PATCH] eRPC_demo実行のための修正 --- erpc_c/infra/transport.h | 4 +- erpc_c/setup/erpc_server_setup.cpp | 36 ++++- erpc_c/setup/erpc_server_setup.h | 2 +- erpc_c/setup/erpc_setup_rpmsg_lite_rtos_remote.cpp | 54 +++++++ erpc_c/setup/erpc_transport_setup.h | 18 ++- erpc_c/transports/rpmsg_lite_rtos_transport.cpp | 158 ++++++++++++++++++ erpc_c/transports/rpmsg_lite_rtos_transport.h | 177 +++++++++++++++++++++ erpc_c/transports/rpmsg_rtos_transport.h |147 +++++++++++++++++ erpc_python/erpc/transport.py | 21 +++ 9 ファイル変更、602 挿入(+)、15 削除(-) 作成モード 100644 erpc_c/setup/erpc_setup_rpmsg_lite_rtos_remote.cpp 作成モード 100644 erpc_c/transports/rpmsg_lite_rtos_transport.cpp 作成モード 100644 erpc_c/transports/rpmsg_lite_rtos_transport.h 作成モード 100644 erpc_c/transports/rpmsg_rtos_transport.h diff --git a/erpc_c/infra/transport.h b/erpc_c/infra/transport.h index eb7ec71..fd4862a 100644 --- a/erpc_c/infra/transport.h +++ b/erpc_c/infra/transport.h @@ -48,7 +48,7 @@ //////////////////////////////////////////////////////////////////////////////// namespace erpc { - +class MessageBuffer; /*! * @brief トランスポートレイヤーの抽象インターフェース。 * @@ -89,7 +89,7 @@ public: * * @return 送信の実装に基づいています。 */ - virtual erpc_status_t send(MessageBuffer *message) = 0; + virtual erpc_status_t send(const MessageBuffer *message) = 0; /*! * @brief 受信メッセージをポーリングします。 diff --git a/erpc_c/setup/erpc_server_setup.cpp b/erpc_c/setup/erpc_server_setup.cpp index 51fa799..5cd4346 100644 --- a/erpc_c/setup/erpc_server_setup.cpp +++ b/erpc_c/setup/erpc_server_setup.cpp @@ -33,8 +33,10 @@ #include "basic_codec.h" #include "manually_constructed.h" #include "simple_server.h" -#include +#include "message_buffer.h" +#include "erpc_config_internal.h" #include +#include #if !(__embedded_cplusplus) using namespace std; @@ -43,6 +45,29 @@ using namespace std; using namespace erpc; //////////////////////////////////////////////////////////////////////////////// +// Classes +//////////////////////////////////////////////////////////////////////////////// + +class BasicMessageBufferFactory : public MessageBufferFactory +{ +public: + virtual MessageBuffer create() + { + uint8_t *buf = new (nothrow) uint8_t[ERPC_DEFAULT_BUFFER_SIZE]; + return MessageBuffer(buf, ERPC_DEFAULT_BUFFER_SIZE); + } + + virtual void dispose(MessageBuffer *buf) + { + assert(buf); + if (*buf) + { + delete[] buf->get(); + } + } +}; + +//////////////////////////////////////////////////////////////////////////////// // Variables //////////////////////////////////////////////////////////////////////////////// @@ -50,29 +75,32 @@ using namespace erpc; static ManuallyConstructed s_server; SimpleServer *g_server; +static ManuallyConstructed s_msgFactory; static ManuallyConstructed s_codecFactory; //////////////////////////////////////////////////////////////////////////////// // Code //////////////////////////////////////////////////////////////////////////////// -void erpc_server_init(erpc_transport_t transport, erpc_mbf_t message_buffer_factory) +void erpc_server_init(erpc_transport_t transport) { // ファクトリを初期化します。 + s_msgFactory.construct(); s_codecFactory.construct(); // 提供されたトランスポートでサーバーを初期化します。s_server.construct(); s_server->setTransport(reinterpret_cast (transport)); + s_server->setMessageBufferFactory(s_msgFactory); s_server->setCodecFactory(s_codecFactory); - s_server->setMessageBufferFactory(reinterpret_cast (message_buffer_factory)); g_server = s_server; } - void erpc_server_deinit() { + s_msgFactory.destroy(); s_codecFactory.destroy(); s_server.destroy(); + } void erpc_add_service_to_server(void *service) diff --git a/erpc_c/setup/erpc_server_setup.h b/erpc_c/setup/erpc_server_setup.h インデックス 8e6a6ef..e4e9eaa 100644 --- a/erpc_c/setup/erpc_server_setup.h +++ b/erpc_c/setup/erpc_server_setup.h @@ -60,7 +60,7 @@ extern "C" { * * この関数は、サーバーの実行に必要なすべてのコンポーネントを使用してサーバーを初期化します。 */ -void erpc_server_init(erpc_transport_t transport, erpc_mbf_t message_buffer_factory); +void erpc_server_init(erpc_transport_t transport); /*! * @brief この関数はサーバーの初期化を解除します。 diff --git a/erpc_c/setup/erpc_setup_rpmsg_lite_rtos_remote.cpp b/erpc_c/setup/erpc_setup_rpmsg_lite_rtos_remote.cpp new file mode 100644 index 0000000..b480d42 --- /dev/null +++ b/erpc_c/setup/erpc_setup_rpmsg_lite_rtos_remote.cpp @@ -0,0 +1,54 @@ + /* + * Copyright (c) 2014-2016, Freescale Semiconductor, Inc. + * + * ソースおよびバイナリ形式での再配布および使用は、変更の有無にかかわらず、+ * 以下の条件を満たしている場合に限り許可されます。 + *+ * o ソースコードの再配布には、上記の著作権表示、この条件の一覧、および + * 以下の免責事項を含める必要があります。 + * + * o バイナリ形式での再配布では、上記の著作権表示、この + * 条件リスト、 および以下の免責事項をドキュメントおよび/または 配布物に付属する他の資料に複製する必要があります。+ * + * o Freescale Semiconductor, Inc.の名前もその + * 貢献者の名前も、この + * ソフトウェアから派生した製品の推奨または宣伝に使用することは、書面による事前の特別な許可なしにできません。 + * + * このソフトウェアは、著作権所有者およびコントリビューターによって「現状のまま」提供され、 + * 明示的であるかまたは黙示的であるかにかかわらず、商品性および特定目的への適合性に関する黙示の + * 保証を含むがこれに限定されない、いかなる保証も + * 否認されます。いかなる場合も、著作権者またはコントリビューターは、 + * 直接的、間接的、付随的、特別、例示的、または結果的な損害 + *(代替の商品やサービスの調達を含むがこれらに限定されない、 + * 使用、データ、または利益の喪失、あるいは事業の中断を含むが、これらに限定されない) + * あらゆる責任理論(契約、厳格責任、または不法行為を含む)について、 + *(過失を含むか否かにかかわらず)この + * ソフトウェアの使用から生じるいかなる形でも、そのような損害の可能性について知らされていたとしても、責任を負わないものとします。+ */ + +#include "manually_constructed.h" +#include "rpmsg_lite_rtos_transport.h" +#include "erpc_transport_setup.h" + +using namespace erpc; + +//////////////////////////////////////////////////////////////////////////////// +// Variables +//////////////////////////////////////////////////////////////////////////////// + +static ManuallyConstructed s_transport; + +//////////////////////////////////////////////////////////////////////////////// +// Code +//////////////////////////////////////////////////////////////////////////////// + +erpc_transport_t erpc_transport_rpmsg_lite_rtos_remote_init( + unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, void (*ready_cb)(void), bool send_nameservice) +{ + s_transport.construct(); + s_transport->init(src_addr, dst_addr, start_address, rpmsg_link_id, ready_cb, send_nameservice); + return reinterpret_cast (s_transport.get()); +} + + diff --git a/erpc_c/setup/erpc_transport_setup.h b/erpc_c/setup/erpc_transport_setup.h index 798d92f..6c3959e 100644 --- a/erpc_c/setup/erpc_transport_setup.h +++ b/erpc_c/setup/erpc_transport_setup.h @@ -34,6 +34,7 @@ #include "erpc_version.h" #include +#include /*! * @addtogroup transport_setup @@ -48,7 +49,7 @@ //! @brief 不透明なトランスポートオブジェクトタイプ。 typedef struct ErpcTransport *erpc_transport_t; //! @brief トランスポートの準備完了コールバックオブジェクトタイプ。 -typedef void (*rpmsg_ready_cb)(void); +//typedef void (*rpmsg_ready_cb)(void); //////////////////////////////////////////////////////////////////////////////// // API @@ -106,21 +107,21 @@ erpc_transport_t erpc_transport_rpmsg_lite_master_init(unsigned long src_addr, /*! * @brief RPMsg-Lite ゼロコピー転送を作成します。 */ -erpc_transport_t erpc_transport_rpmsg_lite_zc_master_init(unsigned long src_addr, - unsigned long dst_addr, - int rpmsg_link_id); +//erpc_transport_t erpc_transport_rpmsg_lite_zc_master_init(unsigned long src_addr, +// unsigned long dst_addr, +// int rpmsg_link_id); /*! * @brief RPMsg-Lite トランスポートを作成します。 */ erpc_transport_t erpc_transport_rpmsg_lite_remote_init( - unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, rpmsg_ready_cb ready); + unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, void (*ready_cb)(void), bool send_nameservice); /*! * @brief RPMsg-Lite ゼロコピー・トランスポートを作成します。 */ -erpc_transport_t erpc_transport_rpmsg_lite_zc_remote_init( - unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, rpmsg_ready_cb ready); +//erpc_transport_t erpc_transport_rpmsg_lite_zc_remote_init( +// unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, rpmsg_ready_cb ready); /*! * @brief RPMsg-Lite RTOS トランスポートを作成します。 @@ -133,7 +134,8 @@ erpc_transport_t erpc_transport_rpmsg_lite_rtos_master_init (unsigned long src_ad * @brief) RPMsg-Lite RTOSトランスポートを作成します。*/ erpc_transport_t erpc_transport_rpmsg_lite_rtos_remote_init( - unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, rpmsg_ready_cb ready); + unsigned long src_addr, unsigned long dst_addr, void *start_address, int rpmsg_link_id, void (*ready_cb)(void), bool send_nameservice); + //@} diff --git a/erpc_c/transports/rpmsg_lite_rtos_transport.cpp b/erpc_c/transports/rpmsg_lite_rtos_transport.cpp new file mode 100644 index 0000000..e04ae91 --- /dev/null +++ b/erpc_c/transports/rpmsg_lite_rtos_transport.cpp @@-0,0 +1,158 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * + * ソース形式およびバイナリ形式での再配布および使用は、変更の有無にかかわらず、 + * 以下の条件を満たしている場合に限り許可されます。 + * + * o ソースコードの再配布には、上記の著作権表示、この条件の一覧 + * および以下の免責事項を含める必要があります。 + * + * o バイナリ形式での再配布では、上記の著作権表示、この + * 条件リスト、 および以下の免責事項をドキュメントおよび/または 配布物に付属する他の資料に複製する必要があります。 + * + * o Freescale Semiconductor, Inc.の名前もその + *コントリビューターの名前も、この + *ソフトウェアから派生した製品の推奨または宣伝に使用することは、書面による事前の特別な許可なしにできません。 + * + * このソフトウェアは、著作権所有者およびコントリビューターによって「現状のまま」提供され、 + * 明示的であるかまたは黙示的であるかにかかわらず、商品性および特定目的への適合性に関する黙示の + * 保証を含むがこれに限定されない、いかなる保証も + * 否認されます。いかなる場合も、著作権者またはコントリビューターは、 + * 直接的、間接的、付随的、特別、例示的、または結果的な損害 + *(代替の商品やサービスの調達を含むがこれらに限定されない、 + * 使用、データ、または利益の喪失、あるいは事業の中断を含むが、これらに限定されない) + * あらゆる責任理論(契約、厳格責任、または不法行為を含む)について、 + *(過失を含むか否かにかかわらず、このソフトウェアの使用から生じるいかなる形で、そのような損害の可能性について知らされていたとしても、責任を負わないものとします。 + */ + +#include "rpmsg_lite_rtos_transport.h" +#include + +#if !(__embedded_cplusplus) +using namespace std; +#endif + +using namespace erpc; + +//////////////////////////////////////////////////////////////////////////////// +// Variables +//////////////////////////////////////////////////////////////////////////////// +uint8_t RPMsgRTOSTransport::s_initialized = 0; +struct rpmsg_lite_instance *RPMsgRTOSTransport::s_rpmsg; + +//////////////////////////////////////////////////////////////////////////////// +// Code +//////////////////////////////////////////////////////////////////////////////// + +RPMsgRTOSTransport::RPMsgRTOSTransport() +: Transport() +, m_dst_addr(0) +{ +} + +RPMsgRTOSTransport::~RPMsgRTOSTransport() +{ + rpmsg_lite_deinit(s_rpmsg); + s_initialized = 0; +} + +erpc_status_t RPMsgRTOSTransport::init( + unsigned long src_addr, unsigned long dst_addr, void *base_address, unsigned long length, int rpmsg_link_id) +{ + if (!s_initialized) + { + s_rpmsg = rpmsg_lite_master_init(base_address, length, rpmsg_link_id, RL_NO_FLAGS); + s_initialized = 1; + } + + m_rpmsg_queue = rpmsg_queue_create(s_rpmsg); + m_rpmsg_ept = rpmsg_lite_create_ept(s_rpmsg, src_addr, rpmsg_queue_rx_cb, m_rpmsg_queue); + + m_dst_addr = dst_addr; + return m_rpmsg_ept == RL_NULL ? kErpcStatus_InitFailed : kErpcStatus_Success; +} + +erpc_status_t RPMsgRTOSTransport::init( + unsigned long src_addr, unsigned long dst_addr, void *base_address, int rpmsg_link_id, void (*ready_cb)(void), bool send_nameservice) +{ + if (!s_initialized) + { + s_rpmsg = rpmsg_lite_remote_init(base_address, rpmsg_link_id, RL_NO_FLAGS); + + /* 他のコアに準備ができたことを知らせます */ + if (ready_cb != NULL) + { + ready_cb(); + } + + while (!rpmsg_lite_is_link_up(s_rpmsg)) + { + } + + s_initialized = 1; + } + + m_rpmsg_queue = rpmsg_queue_create(s_rpmsg); + m_rpmsg_ept = rpmsg_lite_create_ept(s_rpmsg, src_addr, rpmsg_queue_rx_cb, m_rpmsg_queue); + + if(send_nameservice) + { + rpmsg_ns_announce(s_rpmsg, m_rpmsg_ept, + "rpmsg-openamp-demo-channel", + 0); + } + + m_dst_addr = dst_addr; + return m_rpmsg_ept == RL_NULL ? kErpcStatus_InitFailed : kErpcStatus_Success; +} + +erpc_status_t RPMsgRTOSTransport::receive(MessageBuffer *message) +{ + int ret_val = rpmsg_queue_recv(s_rpmsg, m_rpmsg_queue, &m_dst_addr, (char *)message->get(), kRpmsgMessageBufferSize, + NULL, RL_BLOCK); + return ret_val != RL_SUCCESS ? kErpcStatus_ReceiveFailed : kErpcStatus_Success; +} + +erpc_status_t RPMsgRTOSTransport::send(const MessageBuffer *message) +{ + int ret_val = + rpmsg_lite_send(s_rpmsg, m_rpmsg_ept, m_dst_addr, (char *)message->get(), message->getUsed(), RL_BLOCK); + return ret_val != RL_SUCCESS ? kErpcStatus_SendFailed : kErpcStatus_Success; +} + +MessageBuffer RPMsgMessageBufferFactory::create() +{ + uint8_t idx = 0; + while (((m_freeBufferBitmap & idx) == 0) && (idx < kInitCountMessageBuffers)) + { + idx++; + } + + assert(idx < kInitCountMessageBuffers); + + m_freeBufferBitmap &= ~(1 << idx); + + uint8_t *buf; + buf = m_buffers[idx]; + + assert(NULL != buf); + return MessageBuffer(buf, kRpmsgMessageBufferSize); +} + +void RPMsgMessageBufferFactory::dispose(MessageBuffer *buf) +{ + assert(buf); + uint8_t *tmp = buf->get(); + + if (tmp) + { + uint8_t idx = 0; + while ((tmp != m_buffers[idx]) && (idx < kInitCountMessageBuffers)) + { + ++idx; + } + m_freeBufferBitmap |= 1 << idx; + } +} diff --git a/erpc_c/transports/rpmsg_lite_rtos_transport.h b/erpc_c/transports/rpmsg_lite_rtos_transport.h new file mode 100644 index 0000000..f1aec8a --- /dev/null +++ b/erpc_c/transports/rpmsg_lite_rtos_transport.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * + * ソースおよびバイナリ形式での再配布および使用は、修正の有無にかかわらず、 + * 以下の条件が満たされている場合に許可されます。 + * + * o ソースコードの再配布には、上記の著作権表示、この条件のリスト、 + * および以下の免責事項を保持する必要があります。 + * + * o バイナリ形式での再配布では、上記の著作権表示、この + * 条件リスト、 および以下の免責事項をドキュメントおよび/または 配布物に付属する他の資料に複製する必要があります。 + * + * o Freescale Semiconductor, Inc.の名前もその + *貢献者の名前も、この + *ソフトウェアから派生した製品の推奨または宣伝に使用することは、書面による事前の特別な許可なしにできません。 + * + * このソフトウェアは、著作権所有者およびコントリビューターによって「現状のまま」提供されます。 + * 明示的であるかまたは黙示的であるかにかかわらず、 + * 商品性および特定目的への適合性に関する黙示の保証を含むがこれに限定されない、いかなる保証も + * 否認されます。いかなる場合も、著作権者またはコントリビューターは、 + * 直接的、間接的、付随的、特別、例示的、または結果的な損害、+ *(代替の商品やサービスの調達を含むがこれらに限定されない、 + * 使用、データ、または利益の喪失、あるいは事業の中断を含むが、これらに限定されない)+ * あらゆる責任理論(契約、厳格責任、または不法行為を含む)について、 + *(過失を含むか否かにかかわらず)この + * ソフトウェアの使用から生じるいかなる形で、そのような損害の可能性について知らされていたとしても、責任を負わないものとします。 + */++#ifndef _EMBEDDED_RPC__RPMSG_LITE_RTOS_TRANSPORT_H_+#define _EMBEDDED_RPC__RPMSG_LITE_RTOS_TRANSPORT_H_++#include "transport.h"+#include "message_buffer.h"+#include "rpmsg_lite.h"+#include "rpmsg_queue.h"+#include 「rpmsg_ns.h」+ +/*! + * @addtogroup rpmsg_lite_rtos_transport + * @{ + * @file + */ + +//////////////////////////////////////////////////////////////////////////////// +// Definitions +//////////////////////////////////////////////////////////////////////////////// + +enum +{ + kRpmsgMessageBufferSize = RPMSG_BUFFER_SIZE, + kInitCountMessageBuffers = 2, +}; + +//////////////////////////////////////////////////////////////////////////////// +// Classes +//////////////////////////////////////////////////////////////////////////////// + +namespace erpc +{ +/*! + * @brief プロセッサ間メッセージングに RPMsg RTOS API を使用するトランスポート。 + * + * @ingroup rpmsg_lite_rtos_transport + */ +class RPMsgRTOSTransport : public Transport +{ +public: + /*! + * @brief コンストラクタ。 + *+ * この関数はオブジェクトの属性を初期化します。+ */+ RPMsgRTOSTransport();++ /*!+ * @brief RPMsgRTOSTransport デストラクタ+ */+ virtual ~RPMsgRTOSTransport();++ /*!+ * @brief この関数は、RPMsg RTOS 初期化関数を呼び出します - RPMsg マスターとして+ *+ * @Param[in] src_addr ソースアドレス。+ * @Param[in] dst_addr 宛先アドレス。 + * @Param[in] base_address 共有メモリ内の RPMsg ベースアドレス。 + * @Param[in] length RPMsg 共有メモリ領域の長さ。 + * @Param[in] rpmsg_link_id どのコア間で通信が行われるかの選択。 + *+ * @retval kErpcStatus_Success rpmsg init 関数が正常に実行されたとき。 + * @retval kErpcStatus_InitFailed rpmsg init 関数が正常に実行されなかったとき。 + */ + virtual erpc_status_t init( + unsigned long src_addr, unsigned long dst_addr, void *base_address, unsigned long length, int rpmsg_link_id); + + /*! + * @brief この関数は RPMsg RTOS 初期化関数を呼び出します - RPMsg リモートとして + * + * @Param[in] src_addr 送信元アドレス。 + * @Param[in] dst_addr 宛先アドレス。 + * @Param[in] base_address 共有メモリ内の RPMsg ベースアドレス。 + * @Param[in] rpmsg_link_id どのコア間で通信が行われるかの選択。 + * @Param[in] ready_cb RPMsgの初期化が完了し、コアの準備が整った後に呼び出されるコールバック。 + * @Param[in] send_nameservice true の場合、RPMsg マスターはネームサービスによって通知されます。 + * + * @retval kErpcStatus_Success rpmsg init 関数が正常に実行されたとき。 + * @retval kErpcStatus_InitFailed rpmsg init 関数が正常に実行されなかったとき。 + */ + virtual erpc_status_t init( + unsigned long src_addr, unsigned long dst_addr, void *base_address, int rpmsg_link_id, void (*ready_cb)(void), bool send_nameservice); + + /*! + * @brief 受信メッセージをメッセージバッファに保存します。 + * + * メッセージが来ない間、ループを繰り返します。 + * + * @Param[in] message 受信メッセージが格納されるメッセージバッファ。 + * + * @retval kErpcStatus_ReceiveFailed メッセージバッファの受信に失敗しました。 + * @retval kErpcStatus_Success すべてのデータを正常に受信しました。 + */ + virtual erpc_status_t receive(MessageBuffer *message); + + /*! + * @brief 用意されたメッセージを送信する関数。 + * + * @Param[in] message 送信するメッセージバッファを渡します。 + * + * @retval kErpcStatus_SendFailed メッセージバッファの送信に失敗しました。 + * @retval kErpcStatus_Success すべてのデータを正常に送信しました。 + */ + virtual erpc_status_t send(const MessageBuffer *message); + +protected: + /* リモートデバイス */ + struct remote_device *m_rdev; /*!< 2 番目のコアを表すデバイス。*/ + struct rpmsg_channel *m_app_rp_chnl; /*!< 2つのデバイス(2つのコア)間の接続を表します。*/ + unsigned long m_dst_addr; /*!< rpmsg が使用する宛先アドレス。*/ + rpmsg_queue_handle m_rpmsg_queue; /*!< RPMsg キューのハンドル。*/ + struct rpmsg_lite_endpoint *m_rpmsg_ept; /*!< RPMsg Lite エンドポイント構造体へのポインター。*/ + + static struct rpmsg_lite_instance *s_rpmsg; /*!< RPMSG lite のインスタンスへのポインター。*/ + static uint8_t s_initialized; /*!< rpmsg-lite が初期化されたかどうかを表す情報。*/ +}; + +class RPMsgMessageBufferFactory : public MessageBufferFactory +{ + uint8_t m_freeBufferBitmap; + uint8_t m_buffers[kInitCountMessageBuffers][kRpmsgMessageBufferSize]; + +public: + /*! + * @brief コンストラクター。 + */ + RPMsgMessageBufferFactory() + : m_freeBufferBitmap(0xFF) + { + } + /*! + * @brief RPMsgMessageBufferFactory destructor + */ + virtual ~RPMsgMessageBufferFactory() {} + /*! + * @brief この関数は、デバイス間の通信に使用されるメッセージバッファを作成します。 + */ + virtual MessageBuffer create(); + /*! + * @brief この関数は、デバイス間の通信に使用されるメッセージバッファを破棄します。 + */ + virtual void dispose(MessageBuffer *buf); +}; + +} // namespace erpc + +/*! @} */ + +#endif // _EMBEDDED_RPC__RPMSG_LITE_RTOS_TRANSPORT_H_ diff --git a/erpc_c/transports/rpmsg_rtos_transport.h b/erpc_c/transports/rpmsg_rtos_transport.h new file mode 100644 index 0000000..ad1d229 --- /dev/null +++ b/erpc_c/transports/rpmsg_rtos_transport.h @@-0,0 +1,147 @@+/*+ * Copyright (c) 2015, Freescale Semiconductor, Inc.+ *+ * ソースおよびバイナリ形式での再配布および使用は、変更の有無にかかわらず、+ * 以下の条件を満たす場合に許可されます。+ *+ * o ソースコードの再配布には、上記の著作権表示、この条件のリスト+ * および以下の免責事項を含める必要があります。+ * + * o バイナリ形式での再配布では、上記の著作権表示、この + * 条件リスト、 および以下の免責事項をドキュメントおよび/または 配布物に付属する他の資料に複製する必要があります。 + * + * o Freescale Semiconductor, Inc.の名前もその + *貢献者の名前も、この + *ソフトウェアから派生した製品の推奨または宣伝に使用することは、書面による事前の特別な許可なしにできません。 + * + * このソフトウェアは、著作権所有者およびコントリビューターによって「現状のまま」提供され、 + * 明示的であるかまたは黙示的であるかにかかわらず、商品性および特定目的への適合性に関する黙示の + * 保証を含むがこれに限定されない、いかなる保証も + * 否認されます。いかなる場合も、著作権者またはコントリビューターは、 + * 直接的、間接的、付随的、特別、例示的、または結果的な損害、 + *(代替の商品やサービスの調達を含むがこれらに限定されない、 + * 使用、データ、または利益の喪失、あるいは事業の中断を含むが、これらに限定されない) + * あらゆる責任理論(契約、厳格責任、または不法行為を含む)について、 + *(過失を含むか否かにかかわらず)この + * ソフトウェアの使用から生じるいかなる形で、そのような損害の可能性について知らされていたとしても、責任を負わないものとします。 + */ + +#ifndef _EMBEDDED_RPC__RPMSG_RTOS_TRANSPORT_H_ +#define _EMBEDDED_RPC__RPMSG_RTOS_TRANSPORT_H_ + +#include "transport.h" +#include "message_buffer.h" + +extern "C" { +#include "rpmsg.h" +#include "rpmsg_rtos.h" +#include "rpmsg.h" +} + +/*! + * @addtogroup rpmsg_rtos_transport + * @{ + * @file + */ + +//////////////////////////////////////////////////////////////////////////////// +// Definitions +//////////////////////////////////////////////////////////////////////////////// + +enum +{ + kRpmsgMessageBufferSize = RPMSG_BUFFER_SIZE, +}; + +//////////////////////////////////////////////////////////////////////////////// +// Classes +//////////////////////////////////////////////////////////////////////////////// + +namespace erpc +{ +/*! + * @brief プロセッサ間メッセージングに RPMsg RTOS API を使用するトランスポート。 + * + * @ingroup rpmsg_rtos_transport + */ +class RPMsgRTOSTransport : public Transport +{ +public: + /*! + * @brief コンストラクタ。 + * + * この関数はオブジェクトの属性を初期化します。 + */ + RPMsgRTOSTransport(); + + /*! + * @brief RPMsgRTOSTransport destructor + */ + virtual ~RPMsgRTOSTransport(); + + /*! + * @brief この関数は rpmsg rtos init 関数を呼び出します。 + * + * @Param[in] dev_id デバイスID番号。 + * @Param[in] role デバイスロール番号。 + * + * @retval kErpcStatus_Success rpmsg init 関数が正常に実行されたとき。 + * @retval kErpcStatus_InitFailed rpmsg init 関数が正常に実行されなかったとき。 + */ + virtual erpc_status_t init(int dev_id, int role); + + /*! + * @brief 受信メッセージをメッセージバッファに保存します。 + * + * メッセージが送信されない間、ループを繰り返します。 + * + * @Param[in] message 受信メッセージが格納されるメッセージバッファ。 + * + * @retval kErpcStatus_ReceiveFailed メッセージバッファの受信に失敗しました。 + * @retval kErpcStatus_Success すべてのデータを正常に受信しました。 + */ + virtual erpc_status_t receive(MessageBuffer *メッセージ); + + /*! + * @brief 用意されたメッセージを送信する関数。. + * + * @Param[in] message 送信するメッセージバッファを渡します。 + * + * @retval kErpcStatus_SendFailed メッセージバッファの送信に失敗しました。 + * @retval kErpcStatus_Success すべてのデータが正常に送信されました。 + */ + virtual erpc_status_t send(const MessageBuffer *メッセージ); + +protected: + /* リモートデバイス */ + static struct remote_device *m_rdev; /*!< 2 番目のコアを表すデバイス。*/ + static struct rpmsg_channel *m_app_rp_chnl; /*!< 2つのデバイス(2つのコア)間の接続を表します。*/ +}; + +class RPMsgMessageBufferFactory : public MessageBufferFactory +{ +public: + /*! + * @brief コンストラクタ。 + */ + RPMsgMessageBufferFactory() {} + /*! + * @brief RPMsgMessageBufferFactory destructor + */ + virtual ~RPMsgMessageBufferFactory() {} + /*! + * @brief デバイス間の通信に使用するメッセージバッファを作成する関数です。 + */ + virtual MessageBuffer create(); + /*! + * @brief この関数は、デバイス間の通信に使用されるメッセージバッファを破棄します。 + */ + virtual void dispose(MessageBuffer *buf); +}; + +} // namespace erpc + +/*! @} */ + +#endif // _EMBEDDED_RPC__RPMSG_RTOS_TRANSPORT_H_ diff --git a/erpc_python/erpc/transport.py b/erpc_python/erpc/transport.py index 0765e9f..c335943 100644 --- a/erpc_python/erpc/transport.py +++ b/erpc_python/erpc/transport.py @@ -31,6 +31,8 @@ import struct import serial +from rpmsg.sysfs import RpmsgEndpoint +import time import socket import threading from .crc16 import crc16 @@ -107,6 +109,25 @@ class SerialTransport(FramedTransport): class ConnectionClosed(Exception): pass +class RpmsgTransport(Transport): + def __init__(self): + self.ept = RpmsgEndpoint( + RpmsgEndpoint.rpmsg_openamp_channel, + RpmsgEndpoint.LOCAL_DEFAULT_ADDRESS, + RpmsgEndpoint.Types.DATAGRAM) + + def send(self, message): + self.ept.send(message, RpmsgEndpoint.REMOTE_DEFAULT_ADDRESS) + + def receive(self): + while True: + ret = self.ept.recv(2048) + if len(ret[1]) != 0: + return ret[1] + else: + time.sleep(0.001) + return ret[1] + class TCPTransport(FramedTransport): def __init__(self, host, port, isServer): super(TCPTransport, self).__init__() -- 2.7.4 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ドゥシャン、ありがとうございます 。デモが動作したら、プルリクエストを作成いたします。 再度の返信ありがとうございます。Pythonファイルを受け取りました。デモを実行し、すぐに結果をお知らせします。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、その調子です。(笑顔のウィンクの顔文字)必要に応じて、imxデモリポジトリにプルリクエストを作成して修正できます。mareknovak がそれを確認し、リポジトリにマージできます。 Python コードを生成するには、他のアプリケーションと同様に、コマンドラインで「erpcgen --help (-h も機能します)」を実行できます。 python -gpy idl_file -> gpy は Python を生成することを意味します。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 素晴らしいですね。更新まで同じ安定したバージョンで作業を続けることができます。 いくつかの修正により、MCUデモがビルドされ、正常に実行されるようになりました。情報を提供していただき、ありがとうございます。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan 修正したら、MCUデモが正常に動作するようになりました。安定したバージョンを教えてくださり、ありがとうございます。 erpcgen ツールを使用して Python コードを生成する方法を教えていただけますか。 よろしくお願い申し上げます。 チャンディーニ Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、最短で明日です。しかし、明日になるとはお約束できません。私の同僚mareknovakは本日勤務していません。ですが、あまり時間はかからないはずです。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> いつ更新するのか教えていただけますか。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、関心をお寄せいただきありがとうございます。その後、erpc によって生成されたファイルは、Marek がコミットで提供したものとは異なる erpcgen によって生成されたようです(私たちのミスです)。最善の解決策としては、そのデモを最新の安定した erpc および erpcgen バージョンに更新する必要があるようです。GitHub - EmbeddedRPC/erpc: Embedded RPCのマスターブランチからこれを試していただけます(erpcgen プリビルド 1.4.0 もあります)が、どれだけの変更が必要なのかわかりません。代わりに更新を待っていただくことも可能です。 mareknovak Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Dusan あなたが参照されたのと同じeRPCライブラリを使用していました。 私が従った手順は以下の通りです。  erpc-imx-demosのクローン作成、(eRPC GitHub - 232afb209f0a0cfceb25a1be11879f7d1934e065 の MarekNovakNXP/erpc をクローンする)サブモジュールを含む 1. git clone --recursive https://github.com/EmbeddedRPC/erpc-imx-demos.git 2. erpc-imx-demos/middleware/erpc フォルダに移動し、以下のように erpcgen をビルドしました。 必要なパッケージflex/bisonおよびboostをインストール eprcを作成する eprcgenを作成する sudoメイクインストール erpcgen を正常に取得しました 3.以下のようにerpc_matrix_multiply.erpcを使用して、独自の出力ファイルの作成を試みました。 erpcgen -I erpc-imx-demos/MCU/example_erpc/service -o test/erpc-imx-demos/MCU/example_erpc/service erpc_matrix_multiply.erpc 以下のファイルを正常に取得しました。 erpc_matrix_multiply.h erpc_matrix_multiply_server.cpp erpc_matrix_multiply_server.h erpc_matrix_multiply_client.cpp 4. MCU/example_erpc/build/armgcc/imx7d_sdb_m4/build_all.shのビルドを試みました。 エラーが発生して失敗しました。 /home/basavarajuc/test/erpc-imx-demos/MCU/example_erpc/service/erpc_matrix_multiply_server.cpp: 関数内 'void* create_MatrixMultiplyService_service()': /home/basavarajuc/test/erpc-imx-demos/MCU/example_erpc/service/erpc_matrix_multiply_server.cpp:168:56: エラー: 抽象クラス型 'MatrixMultiplyService_service' の new-expression が無効です new (nothrow) MatrixMultiplyService_service() を返します。 再度質問して申し訳ありませんが、きちんと理解したいと考えています。 1. GitHub の eRPC ライブラリ (232afb209f0a0cfceb25a1be11879f7d1934e065 の MarekNovakNXP/erpc) を使用している場合、 デモを正常に実行するには、デモを更新する必要がありますか。 2.erpc-imx-demos/MCU/example_erpc/service at master · EmbeddedRPC/erpc-imx-demos · GitHub からの出力ファイルは、どのバージョンの erpcgen で生成されているか教えていただけますか? 古いerpcgenを使用して、すぐに自分のファイルを作成できるようにしたいのです。 お手数をおかけしますが、どうぞよろしくお願い申し上げます。 チャンディーニ   Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちは、コメントをありがとうございます。ご指摘の例は、お使いの erpcgen ビルドよりも古いバージョンです。mareknovak は、当時の公式リリースにはなかったいくつかの小さな変更により、公式 eRPC リポジトリのフォークも作成しました。ミドルウェアフォルダーのerpc-imx-demosリポジトリからeRPC参照をクリックすると、eRPCリポジトリにリダイレクトされます。そのバージョンから erpcgen をビルドする必要があります。将来的にはデモを更新したいと考えています。 お役に立てたなら幸いです。ご不明な点がございましたら、どうぞお気軽にお問い合わせください。 Re: eRPCの紹介 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi 基本的な質問であれば申し訳ございません。 NXP の erpcgen ツールの使用方法を理解しようとしています。 サンプルデモを正常に実行しました。こちらを参照しました:https://github.com/EmbeddedRPC/erpc-imx-demos 次のアプローチは、erpcgen をビルドし、同じ erpc_matrix_multiply.erpcを使用して独自の出力ファイルを作成し、同じデモを再度実行して、erpcgen ツールの使用に慣れることでした。 出力ファイルを取得しましたが、同じ erpc_matrix_multiply.erpc を使用しているにもかかわらず、私のファイルはサンプルファイルと異なります。 変更点は以下の通りです: 例示デモの出力ファイルは次のとおりです (erpc_matrix_multiply_server.h): erpc_status_t erpcMatrixMultiply_shim(erpc::Codec * in, erpc::Codec * out, uint32_t sequence); 私のファイル(erpc_matrix_multiply_server.h): erpc_status_t erpcMatrixMultiply_shim(erpc::Codec * codec, uint32_t sequence); ファイルが異なる理由、欠けている設定があれば教えてください。 erpc_matrix_multiply_server.h および erpc_matrix_multiply_server.cpp を手動で編集する必要がありますか。 よろしくお願いいたします チャンディーニ
記事全体を表示
CSEc Error I'm using CSEc with S32K144, when does it return KEY_INVAILD error at BOOT_DEFINE? I hope to get answers and have a happy day! Re: CSEc Error Hi @xiaozhi  I can't see a reason for such error when calling BOOT_DEFINE function. This function can be called even if BOOT_MAC_KEY is not provisioned yet, so it does not require a key.  Regards, Lukas
記事全体を表示