Multi Source Translation Content

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

Multi Source Translation Content

ディスカッション

ソート順:
S32S247 バージョン 2019.07 のプラットフォーム ソフトウェア統合 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 製品リリースのお知らせ 車載用マイクロコントローラ/マイクロプロセッサ プラットフォームソフトウェアの統合 S32S247バージョン2019.07の場合   NXP Semiconductorsの プラットフォームソフトウェアインテグレーションチーム であるAutomotive Microcontrollers and Processorsは 、 S32S247バージョン2019.07の Platform Software Integration のリリースを発表できることを嬉しく思います。 このリリースには、S32S247プラットフォーム用の一連の参照統合例が含まれています。詳細については、添付のリリースノートをご覧ください。   FlexNetの場所: https://www.nxp.com/webapp/swlicensing/sso/downloadSoftware.sp?catid=SW32S2XX-PTFM01D 参考例
記事全体を表示
i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Linphoneは、インターネット電話またはVoice Over IP電話(VoIP)です。 Linphoneを使用すると、 音声、ビデオ、テキストのインスタントメッセージングを使用して、インターネットを介して人々と自由にコミュニケーションをとることができます。 Linphoneは、インターネット電話のオープンスタンダードであるSIPプロトコルを利用しています。Linphoneは、 無料のSIPオーディオ/ビデオサービス を含む 、任意のSIP VoIPオペレーターで使用できます 。 Linphoneは フリーソフトウェア (またはオープンソース)であり、 無料でダウンロードして再配布できます。 Linphoneは、デスクトップコンピューター(Linux、Windows、Mac OSX)、および携帯電話(Android、iPhone、Blackberry)で使用できます。 Linphone-androidは、Android SDKに基づくJavaコードとネイティブCODEC、ネットワークプロトコルの統合を示す良い例です。XBMC-Androidとは異なり、ほぼ完全なc ++ / cプロジェクトです。 linphone-android プロジェクトをビルドするには、次の手順を実行します。 1. git clone git://git.linphone.org/linphone-android.git --recursive 2. sudo apt-get install autoconf automake libtool pkg-config 3. "cd" を "git clone" のルートに移動 : cd /home/user/linphne-android // git の linphone-android は 4. export PATH=/home/user/android-ndk:$PATH //android-ndk、android-sdkツール、platform-tools、ANTが保存されている場所ならどこでも。 例えば、私のPCで。      export PATH=/home/alanz/android-ndk-r8d:/home/alanz/android-sdk-linux/tools:/home/alanz/android-sdk-linux/platform-     tools:/home/alanz/bin/apache-ant-1.8.4/bin:$PATH 注: PATH には、ndk、sdk、および ant が含まれています。 5. ネットワークが機能していることを確認してから、linphone-android ルートで "./prepare_sources.sh" を実行します 6.その後、「/home/alanz/android-ndk-r8d/ndk-build」を実行すると、終了するまでに時間がかかります 7. Makefile を次の例のように変更し、それに応じて変更します。      NDK_PATH=/home/alanz/android-ndk-r8d      SDK_PATH=/home/alanz/android-sdk-linux/tools SDK_PLATFORM_TOOLS_PATH=/home/alanz/android-sdk-linux/platform-tools      ..................... generate-libsを使用します。 $(NDK_PATH)/ndk-build の.......(このコマンドラインの最後に -j$(NUMCPUS) を削除してください) 8. 「make」を実行すると、終了後、apkファイルはbin /サブディレクトリの下にあります。 Android i.MX53 i.MX6DL i.MX6Quad Re:i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, アナログ電話アダプタの設計にi.MX6を使用できるかどうかについて、どなたかご存知ですか?i.MX6DにはどのようなSWアプリケーションを実装する必要がありますか? Re:i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> VPU は使用しません。ハードウェアエンコーダーを使用するプラグインを作成する必要があります。gstreamer appsrcプラグインを使用して、それを新しいmediastreamer2プラグインと組み合わせてみることができます Re:i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> CPUのハードウェアエンコーダーを使用するAndroid用のLinphoneはありますか? imx53またはimx6で使用すると、VPUが使用されますか? Re:i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 最新のlinphone-androidソースには prepare_sources.sh ファイルはありません。linphone-android gitソースのREADMEの指示に従ってlinphoneをビルドし、Androidフォンで実行することができました。 Re:i.MX6用のLinphone Androidをビルドする <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> こんにちはあなたの助けに感謝しますが、 "./prepare_sources.sh"を実行している間、私は5番目のステップでエラーを下回っています =========================================================================== cp ./patch_pic.diff SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_ARM_v1.0.9 cd SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_ARM_v1.0.9 & /usr/bin/patch -p0 < patch_pic.diff パッチ適用ファイル Makefile ハンク#1は26で失敗しました。 1 hunk FAILED -- リジェクトをファイル Makefile.rej に保存します Makefile:420: ターゲット 'SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_ARM_v1.0.9' のレシピが失敗しました メーカー: *** [SILK_SDK_SRC_v1.0.9/SILK_SDK_SRC_ARM_v1.0.9]エラー 1 SILK オーディオ プラグインの準備状態に失敗しました。 ./prepare_sources.sh: 41 行目: xxd: コマンドが見つかりません ./prepare_sources.sh: 47行目: xxd: コマンドが見つかりません ===================================================================== 主な問題は、これらのエラーが発生した場合、すべての手順を完了し、先に進んでEclipseでコードをインポートし、実行して、このコードをコメントするとGCMRegisterクラスでjava.lang.NoClassDefFoundExceptionが発生することです。このコードにコメントすると、LinphoneActivity.javaに対して同じエラーが発生します。このエラーを取り除き、このコードを正常に実行してテストする方法をガイドしてください。よろしくお願いいたします。
記事全体を表示
飞思卡尔 BLE Beacon 用户指南 V1.0 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 1. Overview BLE 信标是低功耗蓝牙的常见用途,它会以一定的间隔广播广告。飞思卡尔 BLE 信标演示使用飞思卡尔 Kinetis KL16 低功耗 MCU 和 EMC EM9301 蓝牙控制器实现信标参考设计。飞思卡尔 BLE 信标具有低功耗的特点,平均功耗为 50uA,间隔为 600ms。 Freescale Kinetis KL16通过SPI接口与EM9301配合。 查看附件以了解更多信息
記事全体を表示
i.MX Yocto 项目:我如何为社区做出贡献? <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Yocto 项目是开源的,因此任何人都可以做出贡献。无论您的贡献是什么(修复错误或新的元数据),贡献都会通过补丁发送到社区列表。许多人会注视着你的补丁,在某个时候它要么被拒绝,要么被接受。请按照以下步骤进行贡献: 确保您之前已配置您的个人信息 $ git config --global user.name "此处输入您的名字" $ git config --global 用户.email " your_email@example.com " 订阅飞思卡尔 Yocto 项目邮件列表 下载 `master` 分支 fsl社区bsp$repo init\ -u https://github.com/Freescale/fsl-community-bsp-platform \ -b 主服务器 Update fsl-community-bsp$repo 同步 创建本地分支,这样你的工作就不会在主分支上完成 fsl-community-bsp $ repo start --all 其中 ` ` 是您想要赋予本地分支的任何名称(例如`fix_uboot_recipe`、`new_gstreamer_recipe` 等) 在任何与 Freescale 相关的文件夹中进行更改(例如来源/meta-fsl-arm)。如果您修改了配方(.bb)或包含(.inc)文件,请不要忘记*bump*(增加 值减一)`PR` 或 `INC_PR` 值 使用“git”提交您的更改。在这个例子中,我们假设您的更改是在“meta-fsl-arm”文件夹上 sources/meta-fsl-arm $ git add 源/meta-fsl-arm$git提交 在提交日志中,标题必须以文件名更改或引入的内容开头,然后是补丁目标的简要描述,最后是详细描述。确保遵守标准 (输入 ` git log --pretty=oneline` 来查看之前的提交) 创建补丁 源/meta-fsl-arm $ git format-patch -s --subject-prefix='<meta-fsl-arm> 最后一个参数(`-1`)表示修补最后一次提交。如果您想为较旧的提交创建补丁,只需指出正确的索引。 如果您的补丁是在其他文件夹中完成的,只需确保更改“--subject-prefix”值。 发送您的补丁或补丁 git 发送电子邮件——至 meta-freescale@yoctoproject.org 其中 ` ` 是由 `git format-patch` 创建的文件。 在邮件列表中跟踪补丁的响应。如果您需要重新制作补丁,请重复这些步骤,但这次补丁的主题更改为“--subject-prefix='<meta-fsl-> 一旦你的补丁被批准,你就可以删除你的工作分支 fsl-community-bsp $ repo abandon Linux Yocto Project
記事全体を表示
i.MX6 VDD_SNVS_CAP 组件推荐 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> SNVS LDO 输出 (VDD_SNVS_CAP) 需要外部电容器。飞思卡尔的最新建议是,这应该是一个 0.22 uF 电容器。 飞思卡尔正在努力使文件保持一致。截至 2013 年 2 月,一些文档(例如原理图或用户指南)显示单个 0.22 uF 电容器,而其他文档则没有。 i.MX6DL i.MX6 双核 i.MX6 四核 i.MX6S
記事全体を表示
【S32K144】RTD に LinIf.xdm がありません。Tresos でモジュール LinIf を作成できない Hello, TresosのRTDからのLinIfプラグインの使用について質問があります。 Tresos に LinIf モジュールを追加しようとすると、次のエラーが返されます。 モジュール "LinIf_TS_T40D2M30I0R0" (プラグイン "LinIf_TS_T40D2M30I0R0" で定義) は、スキーマ ファイル "config/LinIf.xdm" を定義します。見つからない (ファイルが署名または暗号化されている場合は、META-INF\CRYPTOMANIFEST で参照する必要があります。MF)です。 他のモジュールとは異なり、LinIf フォルダには LinIf.xdm があるべき場所に config フォルダがありません これは間違ったインストールですか、それともLinIf.xdmを何らかの方法で個別に生成する必要がありますか? 古い RTD インストールにも LinIf.xdm はありません。 ありがとうございます! Re: [S32K144] RTD に LinIf.xdm がありません。Tresos でモジュール LinIf を作成できない Hi @nbgddddd, RTD リリース (バージョン 3.0.0) のリリース ノートを参照してください。「サポートおよび配信されたドライバー」セクションでは、RTDに付属のLinIfドライバーはスタブのみであり、構成をサポートしていないことがわかります。 これは、私たちの側からのテスト目的のみを目的としています。Elektrobit(EB)、VectorなどのサードパーティプロバイダーのCanIf、EthIf、およびLinIfを使用する必要があります。 よろしくお願いいたします ジュリアン
記事全体を表示
S32 Design Studio 3.3 - 适用于 S32V234 1.2.0 的视觉扩展包现已推出!         产品发布公告 汽车微控制器和处理器 S32 Design Studio 适用于 S32V234 1.2.0 的 v3.3 视觉扩展包          新增内容 集成VSDK 1.6.0 安装说明 该更新可用于在线安装(通过 S32DS 扩展和更新)或离线安装(直接下载链接)  安装: 进入菜单"帮助" -> "S32DS 扩展和更新" 对话框 从可用项目中选择,然后点击“安装/更新”按钮 离线安装: 前往 S32 Design Studio for S32 Platform 产品页面 -> 下载部分或使用直接链接下载更新存档 zip 文件       启动 S32 Design Studio,转到“帮助”->“S32DS 扩展和更新”,然后单击“转到首选项”链接 通过“添加...”新增仓库,浏览以选择上一步中下载的更新压缩包文件       选择“S32 Design Studio for Power Architecture Device Package”和“使用 S32 SDK 3.0.2 更新”对于 Power Architecture 包并单击“安装/更新”按钮。   此时将启动更新安装过程。 激活 | 安装 | 许可 | 安装程序下载 概述 SDK
記事全体を表示
PN7642のホストインターフェイスを介してユーザーファームウェアを更新するためのステップバイステップガイド 一部のお客様は、ホストインターフェイスと「DownloadLibEx1」デモを使用してPN7642のユーザーファームウェアを更新しようとしており、SFWUMakerを使用して.esfwuを作成しています.binのファイルreadmeファイルに従いましたが、ファームウェアの更新に失敗しました。これがそのためのステップバイステップガイドです。SDK主導のブリンキーデモを使用して、Esfwuファイルを生成し、LPC5516ホストを搭載したPN7642ボードにプログラムします。LEDブリンキーのデモはpn7642_MCUXpresso_SDK_02-15-00_Pubにあります。PN7642の製品ページからダウンロードできます。高性能NFCリーダー、カスタマイズ可能なMCU、セキュリティツールボックスを備えたシングルチップソリューション | NXPセミコンダクターズ ステップ1:pnev7642fama_led_blinkyデモをコンパイルします フラッシュサイズが180KBであることを確認してください。デフォルトでは、MCUXpresso IDEを使用した場合の出力フラッシュサイズは180KBです。 ステップ2:ビンファイルの生成 バイナリ(.bin)ファイルはデフォルトでは生成されませんが、次の手順で手動で生成できます。 ターゲットアプリケーションを構築してください MCUXpressoでデバッグ/リリースフォルダを開きます *.axf ファイルを右クリックします。 メニューで「バイナリユーティリティ」→「バイナリの作成」を選択してください .binが表示されるはずです ステップ3: ESFWUファイルを作る binファイルをESFWUファイルに変換するには、ESFWUメーカーユーティリティ(sw810311)を使用できます。PN7642の製品ページからダウンロードできます。これは安全なファイルで、入手するには有効なNDAが必要です。 このユーティリティを実行するには、tomlファイルが非常に重要です。プロジェクトに合わせて出力名とバイナリ名を変更し、正しいaes_root_keyを使用する必要があります。他のパラメータについては、そのままにしておきました。 3.1 出力名とバイナリ名を変更してください 3.2 正しいaes_root_keyを設定します SWDでフラッシュされたアプリケーションはbinファイルで、暗号化されておらず、ブートローダーでもフラッシュされません。ホストインターフェイス経由の.esfwuファイルは、独自のブートローダーによって暗号化され、フラッシュされます。キーは有効でなければなりません。有効でないと、ブートローダーは受信したファイルを復号化できません。 ユーザーアプリケーションのファームウェアを作成するために正しいキーを使用していることを確認してください。これは非常に重要であり、それがなければ、いずれにせよ機能しません。デフォルトのキーは、データシートにトランスポート キーとして記載されています。下の写真を参照してください。ただし、独自のキーをプロビジョニングすることを強くお勧めします。詳細については、セキュアキーモードのアプリケーションノートをご覧ください。 ルートキーをプロビジョニングしたかどうかわからない場合は、SKM demo を実行して SKM の状態を確認できます。ルートキーがプロビジョニングされている場合は、プロビジョニングされたルートキーを使用してください。下の図から、app_root_keyがプロビジョニングされていないため、デフォルトのトランスポートキーを使用していることがわかります。   3.3 EsfwuMaker コマンドを使用して Esfwu ファイルを生成します。 このコマンドを実行すると、esfwuファイルを取得できます。 ステップ4: 安全なファームウェアのダウンロード ファームウェアのダウンロード例を使用して、PN7642ファームウェアを更新します。ホストソフトウェアパッケージに含まれており、PN7642と対話するためにLPC55S16およびMCUXpressoで使用する例を保持しています。LPC55S16ホストソフトウェアは、PN7642製品ページからダウンロードできます。 LPC55S16ホストソフトウェアバージョン02.01.00(nxp.com) デモを実行するには、ファームウェアの場所を編集する必要があります。Libex1.cのファイルダウンロード60行目について。 以下のように正しいハードウェア設定を行ってください。PNEV7642A Rev-B開発ボードをLPC55S16-EVKボードの上に積み重ねなければなりません。 PNEV7642A Rev-B開発ボードのJ36のピン1をLPC55ボードのJ9のピン1に合わせます。LPCボードのJ12の最後の4ピン(17〜20)は接続されていません。また、J10のピン1-4は、下の写真に示すように未接続のままです。 lPC55s16でファームウェアのダウンロードデモを実行します。以下のログ出力を参照してください。オプション「6」を選択して、アプリケーションのファームウェアを更新してください。更新にはしばらく時間がかかるかもしれません。最後に、「ファームウェアのアップロードに成功しました」というプロンプトが表示され、アップデートが成功したことが示されます。 正常に終了したことを確認するために、このデモを行います。J65を開いたままにしてください。D7(赤いLED)が点滅します(レート0.5HZ)。pnev7642fama_led_blinky.esfwuが必要な場合は、教えてください。 NFCコントローラーソリューション NFCフロントエンド・ソリューション NFCリーダー・ライブラリ
記事全体を表示
GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> メモ: 最初に再生パイプラインを実行し、次にストリーミング パイプラインを実行します。 上記の例では、H263 ビデオと AMR オーディオ データをストリーミングしています。必要に応じてコーデック形式を変更します。 iMXがストリーミングマシンの場合、オーディオエンコーダー「amrnbenc」 を事前にインストールする必要があります。このシナリオはテストされていません シェル変数とパイプライン 再生機(受信機) # プレイバックマシンで、IMX2PCまたはPC2IMX変数を設定し、パイプラインを実行します ## IMX2PC:PCが再生を行う場合 AUDIO_DEC_SINK="rtpamrdepay !AMRNBDEC !アルサシンク " VIDEO_CAPS="\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998\"" VIDEO_DEC_SINK="rtph263pdepay !ffdec_h263 !オートビデオシンク」 ## IMX2PC設定終了 ## PC2IMX:iMXが再生を行う場合 AUDIO_DEC_SINK="rtpamrdepay !mfw_amrdecoder !アルサシンク " VIDEO_CAPS="\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998\"" VIDEO_DEC_SINK="rtph263pdepay !vpudec!mfw_v4lsink " ## PC2IMX設定終了 PLAYBACK_AUDIO="udpsrc caps=\"application/x-rtp,media=(string)audio,clock-rate=(int)8000,encoding-name=(string)AMR,encoding-params=(string)1,octet-align=(string)1\" \             port=5002 ! rtpbin.recv_rtp_sink_1 \         rtpbin. ! $AUDIO_DEC_SINK \      udpsrc port=5003 ! rtpbin.recv_rtcp_sink_1 \ rtpbin.send_rtcp_src_1!udpsink port=5007 sync=false async=false" PLAYBACK_VIDEO="udpsrc caps=$VIDEO_CAPS port=5000 !rtpbin.recv_rtp_sink_0\         rtpbin. ! $VIDEO_DEC_SINK \         udpsrc port=5001 ! rtpbin.recv_rtcp_sink_0 \ rtpbin.send_rtcp_src_0!udpsink port=5005 sync=false async=false" PLAYBACK_AV="$PLAYBACK_VIDEO $PLAYBACK_AUDIO" # 再生パイプライン gst-launch -v gstrtpbin name=rtpbin $PLAYBACK_AV ストリーミングマシン(送信者) # ストリーミングマシンで、IMX2PCまたはPC2IMX変数を設定し、パイプラインを実行します ## IMX2PC: iMXがストリーミングを行う場合 IP=x.x.x.x # 再生マシンのIPアドレス VIDEO_SRC="mfw_v4lsrc" VIDEO_ENC="vpuenc codec=h263 !RTPH263PPAY " AUDIO_ENC="audiotestsrc !AMRNBENCの!rtpamrpay」 ## IMX2PC設定の終了 ## PC2IMX: PCがストリーミングを行う場合 IP=y.y.y.y # 再生マシンのIPアドレス     VIDEO_SRC="v4l2src" VIDEO_ENC="ffenc_h263 !RTPH263PPAY " AUDIO_ENC="audiotestsrc !AMRNBENCの!rtpamrpay」 # END PC2PC設定 STREAM_AUDIO="$AUDIO_ENC !rtpbin.send_rtp_sink_1\ rtpbin.send_rtp_src_1!udpsink ホスト=$IP ポート=5002 \ rtpbin.send_rtcp_src_1!udpsink host=$IP port=5003 sync=false async=false \ udpsrc ポート=5007 !rtpbin.recv_rtcp_sink_1」 STREAM_VIDEO="$VIDEO_SRC ! $VIDEO_ENC ! rtpbin.send_rtp_sink_0 \         rtpbin.send_rtp_src_0 ! queue ! udpsink host=$IP port=5000 \ rtpbin.send_rtcp_src_0!udpsink host=$IP port=5001 sync=false async=false \ udpsrc ポート=5005 !rtpbin.recv_rtcp_sink_0」 STREAM_AV="$STREAM_VIDEO $STREAM_AUDIO" # ストリームパイプライン gst-launch -v gstrtpbin name=rtpbin $STREAM_AV i.MX6_All Linux マルチメディア 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi, UDPプロトコルに基づいて、iMXからAndroidへの電話RTPストリーミングビデオ伝送を構築したいと考えています。これを試しましたか?アドバイスする人もいますか?      感謝!      キーレルズ 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Hi Leonardo, 上記のgstreamerコマンドをimx6で使用しようとしていますが、次のエラーが発生します-誤ったパイプライン:要素 "amrnbenc"がありません Yocto 1.6を使用しています。これを修正する方法を教えていただけますか? 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> フレームレートを半分に落とすか、エンコード前に1080から720にスケーリングする推奨される方法は何でしょうか?できれば、ハードウェアアクセラレータを活用するアプローチ。 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> PCからiMXへのストリーミングを機能させるのに運が良かった人はいますか?4.1.0で約0.8fpsになっていますBSPの 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 「gstreamer を使用した RTP ストリーミングが失敗する - gstrtpbin 要素がありません」を参照してください。何らかの形の紛争があったようです 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> gst-plugin-good プラグイン内にあるその要素を含める必要があります。 日時:GStreamer RTPストリーミング <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> これはどのバージョンの BSP でテストされましたか?im6をレシーバーとして使用すると、「no element name gstrtpbin」というエラーが表示されます。BSP 4.1.0
記事全体を表示
基于 MCUXPresso 工具的 MCXN 系列装配项目 大多数情况下,生成并使用C项目。但是汇编项目有它自己的优势,有了汇编项目,您可以直接使用汇编语言编程,可以使用汇编助记符测试汇编指令。一般来说,C语言效率较低,所以为了测试内核的性能,或者得到外设的最高性能,需要汇编工程。 该文档讨论了创建汇编语言项目的过程,最后给出了一个切换 LED 的示例,演示了如何用汇编语言初始化 NVIC、CTimer、GPIO。并给出了子程序的例子。 1.基于 MCUXPresso 工具创建汇编语言项目的步骤 1.1 加载 MCUXPresso 工具并将 SDK 拖到已安装的 SDK 菜单 然后点击“创建一个新的C/C++项目” 1.2 选择主板或处理器,然后点击“下一步”软件按钮 1.3 命名项目并选择驱动程序。 在菜单中,使用默认配置即可,然后单击“完成” 1.4 使用 C 语言创建一个名为 MCXN947_project 的新项目 1.5 删除MCXN947_project.c并添加 main.s 右键点击“源”组,点击“新建”->“源文件” 1.6 添加main.s如下图,点击“完成” 1.7 最终项目如下: 2.0在 main.s 中编写汇编代码 这是 main.s 中的代码 /* 该汇编文件使用 GNU 语法 */ .equ SYSCON_ANGCLKCTRLSET0,0x40000220 .equ SYSCON_AHBCLKCTRLSET1,0x40000224 .equ SYSCON_AHBCLKCTRLSET2,0x40000228 .equ SYSCON_CTIMER4CLKSEL,0x4000027C .equ SYSCON_CTIMER4CLKDIV,0x400003E0 /*PIO3_4 LED 蓝色*/ .equ PORT3_PCR_BASE,0x40119000 .equ PORT3_PCR4,PORT3_PCR_BASE+0x90 .equ GPIO3_BASE,0x4009C000 .equ GPIO3_PDDR,GPIO3_BASE+0x54 .equ GPIO3_PDOR,GPIO3_BASE+0x40 /*PIT配置*/ .equ CTIMER4_BASE,0x40010000 .equ CTIMER4_IR,CTIMER4_BASE+0x00 .equ CTIMER4_TCR,CTIMER4_BASE+0x04 .equ CTIMER4_MCR,CTIMER4_BASE+0x14 .equ CTIMER4_MR0,CTIMER4_BASE+0x18 .equ CTIMER4_MSR0,CTIMER4_BASE+0x78 .equ CTIMER4_PWMC,CTIMER4_BASE+0x74 /*NVIC配置*/ /*参考Cortex-M4通用用户指南.pdf中的4.2嵌套向量中断控制器*/ .equ NVIC_ISER0,0xE000E100 .equ NVIC_ISER1,0xE000E104 .equ NVIC_ICPR0,0xE000E284 .equ NVIC_ICPR1,0xE000E288 .equ NVIC_IPR12,0xE000E430 .equ NVIC_IPR14,0xE000E438 .全局__user_mem_buffer1,__user_mem_buffer2 。文本 .section .rodata     .align  2 .LC0: 。文本     .thumb     .align  2 .global main .全局CTIMER0_IRQHandler .type主要功能 主要的: 推 {r3, lr}     add r3, sp, #4     nop BL 外设初始化     nop     nop     nop     nop     NOP     /*cpsie i*/ 环形: b 环 mov r3, #0 mov r0, r3 弹出 {r3, pc} /*子程序1*/ /* 从一个地方复制 10 个单词到另一个地方 */ .type MyFunc 函数 .函数 MyFunc: 推 {r0,r1,r2,lr} MOV R2,#0x00 LDR R0,=USER_MEM_BUFFER1 MOV R1,#0x00 循环1:     NOP 力量 R1,[R0] 添加 R1,#0x10 添加 R0,#4 添加 R2,#1 CMP R2,#0x10 BNE 环路1 并且 R5,R1,R5; ASR R3,R2,#1     ORR R5,R1,R5 添加 R3,R2,R3 ADC R3、R2、R3 AND R2,R1,R2 ; /*#0x0F*/ LDR R0,=0x1234 /*LDR R0,[R1],#4*/     nop 弹出 {r0,r1,r2,pc} .endfunc /***************************************/ /*子程序2*/ .type peripheralInit 函数 .函数 外设初始化: //启用CTimer4门控时钟 LDR R0,=0x400000 LDR R1,=SYSCON_AHBCLKCTRLSET2     nop 力量 R0, [R1] MOV R0,#0x03 //选择 LDR R1,=SYSCON_CTIMER4CLKSEL     nop 力量 R0, [R1] MOV R0,#0x09 //选择 LDR R1,=SYSCON_CTIMER4CLKDIV     nop 力量 R0, [R1] /*设置CTimer0*/ //设置Ctimer0_IR MOV R3,#0x01 LDR R1,=CTIMER4_IR     Nop LDR R2,[R1]     ORR R2,R2,R3 力量 R2,[R1] //设置CTIMER4_MCR MOV R3,#0x03 LDR R1,=CTIMER4_MCR LDR R2,[R1]     ORR R2,R2,R3 力量 R2,[R1] LDR R0,=6000000 LDR R1,=CTIMER4_MR0 力量 R0,[R1] LDR R0,=6000000 LDR R1,=CTIMER4_MSR0 力量 R0,[R1] MOV R0,#00 LDR R1,=CTIMER4_PWMC 力量 R0,[R1]     nop     nop //lop1: //  b lop1 /*设置中断,Ctimer4 IRQ 56*/ LDR R1,=NVIC_ISER1 LDR R0,[R1] LDR R3,=0x01000000     ORR R0,R0,R3 力量 R0,[R1] LDR R1,=NVIC_ICPR1 LDR R0,[R1] LDR R3,=0x01000000     ORR R0,R0,R3 力量 R0,[R1] MOV R0,#0x00 LDR R1,=NVIC_IPR14 力量 R0,[R1] /*引脚复用设置*/ /*启用PORT3和GPIO3门控时钟*/ LDR R0,=0x410000 LDR R1,=SYSCON_ANGCLKCTRLSET0     nop 力量 R0, [R1] /*设置GPIO3_4为GPIO输出模式*/ LDR R0,=#0x1000 LDR R1,=PORT3_PCR4 力量 R0,[R1]     LDR R1,=GPIO3_PDDR LDR R0,[R1] LDR R3,=0x10     ORR R0,R0,R3 力量 R0,[R1] /*CTimer4启动*/ MOV R3,#0x01 LDR R1,=CTIMER4_TCR LDR R0,[R1]     ORR R0, R0,R3 力量 R0,[R1]     nop     nop     nop     /*cpsid i*/ BX LR .endfunc /*********************************************/ /*子程序 3*/ 。文本 .type testcal 函数 .函数 测试校准: LDR R0,=0x12345678 MOV R1,#0x0F AND R0,R1 /*测试饱和函数*/ LDR R0,=0x8234 LDR R1,=0x8234 /*添加 R5,R0,R1*/ QADD16 R6,R0,R1 /*饱和发生,R6将变为负最小值0x8000*/     nop     /***8888888*/ LDR R0,=0x6234 LDR R1,=0x6234 /*添加 R5,R0,R1*/ SADD16 R6,R0,R1     nop QADD16 R6,R0,R1 /*饱和发生,R6将变为负最小值0x7FFF*/     nop SMUAD R6,R0,R1 BX LR .endfunc /*********************************************/ /*中断服务程序*/ .全局 CTIMER4_IRQHandler 。文本     .align 2     .type CTIMER4_IRQHandler function .函数 CTIMER4_IRQ处理程序: /*清除中断*/ 推 {R0,R1,LR}     nop     nop     nop LDR R1,=CTIMER4_IR LDR R0,[R1] /*虚拟读数*/ MOV R4,#0x10;     ORR R0,R0,R4 力量 R0, [R1] /*切换 LED*/     LDR R1,=GPIO3_PDOR LDR R0,[R1] LDR R3,=0x10 EOR R0、R0、R3 力量 R0,[R1]     NOP 弹出 {R0,R1,PC} .endfunc /******************************************************/ /*中断服务程序*/     .global SVC_Handler 。文本     .align 2 .type SVC_Handler 函数 .函数 SVC_Handler: 推 {R0,R1,LR}            NOP 弹出 {R0,R1,PC} /******************************************************/     .align  2 .L3:     .word     .align 4 .section .contantData 你好_TXT: .space 0x100 Hello_END:     .ALIGN 4   /*.lcomm */ .lcomm USER_MEM_BUFFER1 0x100 .lcomm USER_MEM_BUFFER2 0x100     .end 3.0代码解释 在代码中,必须定义主函数,在核心执行完在 startup_mcxn847_cm33_core0.c 中定义的代码 ResetISR(void) 后,它会跳转到 main() 函数 示例代码实现了初始化CTimer、GPIO和NVIC、SYSCON模块的功能,使得CTimer可以产生中断,在CTimer的ISR中,LED会进行切换。 运行代码后,你可以看到 LED 被切换了。 peripheralInit子程序用于初始化 CTimer、NVIC、GPIO、SYSCON 模块,以便 CTimer 可以触发中断并切换 LED。CTIMER4_IRQHandler是 CTimer4 的 ISR,它在 startup_mcxn847_cm33_core0 中定义。   MyFunc函数和testCal子程序只是为了测试特定的汇编指令,以及测试如何创建和调用子程序,它们没有特定的目标。
記事全体を表示
TfLite NPU 実行エラー op_layout_inference.cc:MapAxis:177 マップ軸が失敗しました みなさん ごめんなさい。私は、Pythonから変換されたプログラムである独自のC ++プログラムを構築して、私のボードimx8m plusの人々を検出するための簡単なモデルを実行しようとしました。 コード: 1. main.cpp // main.cpp #include "detector.h" #include int main(int argc, char* argv[]) { if (argc != 2) { std::cerr << "Usage: " << argv[0] << " " << std::endl; return 1; } std::string image_path = argv[1]; std::string model_path = "model.tflite"; std::string delegate_path = "/usr/lib/libvx_delegate.so"; cv::Size input_size(192, 192); float score_th = 0.5; float nms_th = 0.4; Detector detector(model_path, delegate_path, input_size, score_th, nms_th); if (!detector.init_model()) { return 1; } cv::Mat image = cv::imread(image_path); if (image.empty()) { std::cerr << "Failed to load image from " << image_path << std::endl; return 1; } auto [bboxes, scores] = detector.detect(image); for (size_t i = 0; i < bboxes.size(); ++i) { cv::rectangle(image, bboxes[i], cv::Scalar(0, 255, 0), 2); std::cout << "Detected bbox: " << bboxes[i] << " with score: " << scores[i] << std::endl; } // cv::imshow("Detections", image); cv::waitKey(0); return 0; } 2. 検出器.h // detector.h #ifndef DETECTOR_H #define DETECTOR_H #include #include #include #include #include #include #include #include "delegate_main.h" class Detector { public: Detector(const std::string& model_path, const std::string& delegate_path, const cv::Size& input_shape, float score_th, float nms_th); bool init_model(); std::pair<:vector><:rect>, std::vector > detect(const cv::Mat& image); private: std::string model_path_; std::string delegate_path_; cv::Size input_shape_; float score_th_; float nms_th_; std::unique_ptr<:interpreter> interpreter_; std::pair<:mat> preprocess(const cv::Mat& image, const cv::Size& input_size); std::tuple<:vector><:rect>, std::vector , std::vector > postprocess(cv::Mat& outputs, const cv::Size& img_size, float ratio, float score_th, float nms_th); void meshgrid(const cv::Range& x_range, const cv::Range& y_range, cv::Mat& xv, cv::Mat& yv); std::tuple<:vector><:rect>, std::vector , std::vector > nms(const std::vector<:rect>& bboxes, const std::vector & scores, float score_th, float nms_th); }; #endif // DETECTOR_H 3. detector.cpp // detector.cpp #include "detector.h" #include Detector::Detector(const std::string& model_path, const std::string& delegate_path, const cv::Size& input_shape, float score_th, float nms_th) : model_path_(model_path), delegate_path_(delegate_path), input_shape_(input_shape), score_th_(score_th), nms_th_(nms_th) {} bool Detector::init_model() { auto model = tflite::FlatBufferModel::BuildFromFile(model_path_.c_str()); if (!model) { std::cerr << "Failed to load model from " << model_path_ << std::endl; return false; } auto ext_delegate_option = TfLiteExternalDelegateOptionsDefault(delegate_path_.c_str()); auto ext_delegate_ptr = TfLiteExternalDelegateCreate(&ext_delegate_option); if (!ext_delegate_ptr) { std::cerr << "Failed to create external delegate" << std::endl; return false; } tflite::ops::builtin::BuiltinOpResolver resolver; resolver.AddCustom(kNbgCustomOp, tflite::ops::custom::Register_VSI_NPU_PRECOMPILED()); tflite::InterpreterBuilder builder(*model, resolver); builder(&interpreter_); if (!interpreter_) { std::cerr << "Failed to build interpreter" << std::endl; return false; } interpreter_->ModifyGraphWithDelegate(ext_delegate_ptr); if (interpreter_->AllocateTensors() != kTfLiteOk) { std::cerr << "Failed to allocate tensors" << std::endl; return false; } return true; } std::pair<:mat> Detector::preprocess(const cv::Mat& image, const cv::Size& input_size) { float ratio = std::min(static_cast (input_size.width) / image.cols, static_cast (input_size.height) / image.rows); cv::Size new_size(static_cast (image.cols * ratio), static_cast (image.rows * ratio)); cv::Mat resized_image; cv::resize(image, resized_image, new_size, 0, 0, cv::INTER_LINEAR); cv::Mat padded_image = cv::Mat::ones(input_size, CV_8UC3) * 114; resized_image.copyTo(padded_image(cv::Rect(0, 0, resized_image.cols, resized_image.rows))); std::vector<:mat> channels(3); cv::split(padded_image, channels); cv::Mat chw_image(3, input_size.height * input_size.width, CV_32F); for(int i = 0; i < 3; ++i) { channels[i].convertTo(channels[i], CV_32F); std::memcpy(chw_image.ptr (i), channels[i].data, channels[i].total() * sizeof(float)); } cv::Mat reshaped_image = chw_image.reshape(1, {1, 3, input_size.height, input_size.width}); return std::make_pair(reshaped_image, ratio); } std::tuple<:vector><:rect>, std::vector , std::vector > Detector::postprocess(cv::Mat& outputs, const cv::Size& img_size, float ratio, float score_th, float nms_th) { std::vector<:rect> bboxes; std::vector scores; std::vector class_ids; std::vector strides = {8, 16, 32}; std::vector<:mat> grids; std::vector<:mat> expanded_strides; for (int stride : strides) { int hsize = img_size.height / stride; int wsize = img_size.width / stride; cv::Mat xv, yv; meshgrid(cv::Range(0, wsize - 1), cv::Range(0, hsize - 1), xv, yv); cv::Mat grid; cv::hconcat(xv.reshape(1, 1), yv.reshape(1, 1), grid); grids.push_back(grid.reshape(2, 1)); expanded_strides.push_back(cv::Mat(grid.size(), CV_32F, cv::Scalar(stride))); } cv::Mat grid_cat, stride_cat; cv::vconcat(grids, grid_cat); cv::vconcat(expanded_strides, stride_cat); outputs.colRange(2, 4).convertTo(outputs.colRange(2, 4), CV_32F); cv::Mat exp_colRange(outputs.colRange(2, 4).size(), CV_32F); cv::exp(outputs.colRange(2, 4), exp_colRange); outputs.colRange(0, 2) = (outputs.colRange(0, 2) + grid_cat) * stride_cat; outputs.colRange(2, 4) = exp_colRange.mul(stride_cat); cv::Mat predictions = outputs.row(0); cv::Mat bboxes_mat = predictions.colRange(0, 4); cv::Mat scores_mat = predictions.col(4).mul(predictions.colRange(5, predictions.cols)); scores.assign(scores_mat.begin (), scores_mat.end ()); std::vector<:rect> bboxes_xyxy(bboxes_mat.rows); for (int i = 0; i < bboxes_mat.rows; ++i) { float x_center = bboxes_mat.at (i, 0); float y_center = bboxes_mat.at (i, 1); float width = bboxes_mat.at (i, 2); float height = bboxes_mat.at (i, 3); float x_min = x_center - width / 2.0; float y_min = y_center - height / 2.0; float x_max = x_center + width / 2.0; float y_max = y_center + height / 2.0; bboxes_xyxy[i] = cv::Rect(cv::Point(x_min / ratio, y_min / ratio), cv::Point(x_max / ratio, y_max / ratio)); } return nms(bboxes_xyxy, scores, score_th, nms_th); } void Detector::meshgrid(const cv::Range& x_range, const cv::Range& y_range, cv::Mat& xv, cv::Mat& yv) { cv::Mat x_coords = cv::Mat(x_range.size(), 1, CV_32F); cv::Mat y_coords = cv::Mat(y_range.size(), 1, CV_32F); for (int i = 0; i < x_range.size(); ++i) { x_coords.at (i,0) = x_range.start + i; } for (int i = 0; i < y_range.size(); ++i) { y_coords.at (i,0) = y_range.start + i; } cv::repeat(x_coords, 1, y_range.size(), xv); cv::repeat(y_coords.t(), x_range.size(), 1, yv); } std::tuple<:vector><:rect>, std::vector , std::vector > Detector::nms(const std::vector<:rect>& bboxes, const std::vector & scores, float score_th, float nms_th) { std::vector<:rect> bboxes_filtered; std::vector scores_filtered; std::vector class_ids_filtered; std::vector indices; cv::dnn::NMSBoxes(bboxes, scores, score_th, nms_th, indices); for(int idx : indices) { bboxes_filtered.push_back(bboxes[idx]); scores_filtered.push_back(scores[idx]); class_ids_filtered.push_back(0); } return std::make_tuple(bboxes_filtered, scores_filtered, class_ids_filtered); } std::pair<:vector><:rect>, std::vector > Detector::detect(const cv::Mat& image) { cv::Mat temp_image = image.clone(); auto [preprocessed_image, ratio] = preprocess(temp_image, input_shape_); std::cout << "Preprocess Completed"<<:endl>tensor(interpreter_->inputs()[0]); const uint input_width = input_data->dims->data[3]; const uint input_height = input_data->dims->data[2]; const uint input_channels = input_data->dims->data[1]; const uint batch_size = input_data->dims->data[0]; std::cout << "Expected dimension: "<< batch_size << "x" << input_channels << "x" << input_height << "x" << input_width << std::endl; const uint image_width = preprocessed_image.size[3]; const uint image_height = preprocessed_image.size[2]; const uint image_channels = preprocessed_image.size[1]; const uint image_batch_size = preprocessed_image.size[0]; std::cout << "Image dimension: "<< image_batch_size << "x" << image_channels << "x" << image_height << "x" << image_width << std::endl; if(input_data->type !=kTfLiteFloat32){ std::cerr << "input tensor is not of type float" << std::endl; return std::make_pair(std::vector<:rect>(), std::vector ()); } if(input_data->data.f == nullptr) { std::cerr << "input tensor data pointer is null" << std::endl; return std::make_pair(std::vector<:rect>(), std::vector ()); } std::memcpy(input_data->data.f, preprocessed_image.ptr (0), batch_size * input_width * input_height * input_channels * sizeof(float)); if(memcmp(input_data->data.f, preprocessed_image.ptr (0),batch_size * input_width * input_height * input_channels * sizeof(float)) != 0){ std::cerr << "data copy to input tensor failed" << std::endl; return std::make_pair(std::vector<:rect>(), std::vector ()); } else{ std::cout << "Set up Input Tensor Completed"<<:endl>Invoke(); std::cout << "Inference Completed"<<:endl>typed_output_tensor (0); size_t output_size = interpreter_->tensor(interpreter_->outputs()[0])->bytes / sizeof(float); cv::Mat results(1, output_size, CV_32F, output_tensor); std::cout << "Get Results Completed"<<:endl> result_rect_list; for (size_t i = 0; i < bboxes_xyxy.size(); ++i) { result_rect_list.push_back(bboxes_xyxy[i]); } // Returning the list of rectangles and the associated scores return {result_rect_list, scores}; } 私のボードイメージはNanbield 6.6.3_1.0.0フルイメージです VX DelegateとNPUを使用して実行しようとしましたが、コードを実行すると問題が発生しました root@imx8mpevk:/run/media/SD CARD-sda1/test_npu# ./detector_app lena_color_512.tif INFO: Vx delegate: allowed_cache_mode set to 0. INFO: Vx delegate: device num set to 0. INFO: Vx delegate: allowed_builtin_code set to 0. INFO: Vx delegate: error_during_init set to 0. INFO: Vx delegate: error_during_prepare set to 0. INFO: Vx delegate: error_during_invoke set to 0. Preprocess Completed Expected dimension: 1x3x192x192 Image dimension: 1x3x192x192 Set up Input Tensor Completed E [/usr/src/debug/tim-vx/1.1.88-r[ 126.612163] audit: type=1701 audit(1695250801.923:18): auid=4294967295 uid=0 gid=0 ses=4294967295 pid=1270 comm="detector_app" exe=2F72756E2F6D656469612F534420434152442D736461312F746573745F6E70752F6465746563746F725F617070 sig=6 res=1 0/src/tim/transform/ops/op_layout_inference.cc:MapAxis:177]Map axis failed. detector_app: /usr/src/debug/tim-vx/1.1.88-r0/src/tim/transform/ops/op_layout_inference.cc:178: uint32_t tim::transform::OpLayoutInfer::MapAxis(const std::vector &, uint32_t): Assertion `false' failed. Aborted (core dumped) また、gdb debugを実行しようとしましたが、次のようなものが返されます。 (gdb) set args lena_color_512.tif (gdb) run Starting program: /run/media/SD CARD-sda1/test_npu/detector_app lena_color_512.tif [Thread debugging using libthread_db enabled] Using host libthread_db library "/usr/lib/libthread_db.so.1". INFO: Vx delegate: allowed_cache_mode set to 0. INFO: Vx delegate: device num set to 0. INFO: Vx delegate: allowed_builtin_code set to 0. INFO: Vx delegate: error_during_init set to 0. INFO: Vx delegate: error_during_prepare set to 0. INFO: Vx delegate: error_during_invoke set to 0. Preprocess Completed Expected dimension: 1x3x192x192 Image dimension: 1x3x192x192 Set up Input Tensor Completed [New Thread 0xfffff146cf00 (LWP 1660)] E [/usr/src/debug/tim-vx/1.1.88-r0/src/tim/transform/ops/op_layout_inference.cc:MapAxis:177]Map axis failed. detector_app: /usr/src/debug/tim-vx/1.1.88-r0/src/tim/transform/ops/op_layout_inference.cc:178: uint32_t tim::transform::OpLayoutInfer::MapAxis(const std::vector &, uint32_t): Assertion `false' failed. Thread 1 "detector_app" received signal SIGABRT, Aborted. __pthread_kill_implementation (threadid= , signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 44 pthread_kill.c: No such file or directory. (gdb) bt #0 __pthread_kill_implementation (threadid= , signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:44 #1 0x0000fffff69c0568 in __pthread_kill_internal (signo=6, threadid= ) at pthread_kill.c:78 #2 0x0000fffff697acd0 in __GI_raise (sig=sig@entry=6) at /usr/src/debug/glibc/2.38+git-r0/sysdeps/posix/raise.c:26 #3 0x0000fffff6966ef0 in __GI_abort () at abort.c:79 #4 0x0000fffff69743f8 in __assert_fail_base (fmt=0xfffff6a8a8e8 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0xfffff1ffdcf0 "false", file=file@entry=0xfffff1fff568 "/usr/src/debug/tim-vx/1.1.88-r0/src/tim/transform/ops/op_layout_inference.cc", line=line@entry=178, function=function@entry=0xfffff1fff5d8 "uint32_t tim::transform::OpLayoutInfer::MapAxis(const std::vector &, uint32_t)") at assert.c:92 #5 0x0000fffff6974470 in __assert_fail (assertion=0xfffff1ffdcf0 "false", file=0xfffff1fff568 "/usr/src/debug/tim-vx/1.1.88-r0/src/tim/transform/ops/op_layout_inference.cc", line=178, function=0xfffff1fff5d8 "uint32_t tim::transform::OpLayoutInfer::MapAxis(const std::vector &, uint32_t)") at assert.c:101 #6 0x0000fffff1fa5f74 in tim::transform::OpLayoutInfer::MapAxis(std::vector > const&, unsigned int) () from /usr/lib/libtim-vx.so #7 0x0000fffff1f6a1b0 in ?? () from /usr/lib/libtim-vx.so #8 0x0000fffff1f4e5f4 in tim::transform::layout_inference_impl::HandleLayoutInfer(std::shared_ptr<:transform::layout_inference_impl::layoutinfercontext>&, std::shared_ptr<:vx::operation> const&) () from /usr/lib/libtim-vx.so #9 0x0000fffff1f531f4 in tim::transform::LayoutInference(std::shared_ptr<:vx::graph> const&, std::shared_ptr<:vx::context>&, std::map<:shared_ptr><:vx::tensor>, std::shared_ptr<:transform::ipermutevector>, std::less<:shared_ptr><:vx::tensor> >, std::allocator<:pair><:shared_ptr><:vx::tensor> const, std::shared_ptr<:transform::ipermutevector> > > >) () from /usr/lib/libtim-vx.so #10 0x0000fffff23d85ac in vx::delegate::Delegate::Invoke(vx::delegate::OpData const&, TfLiteContext*, TfLiteNode*) () from /usr/lib/libvx_delegate.so #11 0x0000fffff7be9d9c in tflite::Subgraph::InvokeImpl() () from /usr/lib/libtensorflow-lite.so.2.14.0 #12 0x0000fffff7bea388 in tflite::Subgraph::Invoke() () from /usr/lib/libtensorflow-lite.so.2.14.0 #13 0x0000fffff7bd440c in tflite::impl::Interpreter::Invoke() () from /usr/lib/libtensorflow-lite.so.2.14.0 #14 0x0000aaaaaaaa62e0 in Detector::detect (this=this@entry=0xfffffffff890, image=...) at /home/ubuntu/imx-yocto-bsp/sdk/sysroots/armv8a-poky-linux/usr/include/c++/13.2.0/bits/unique_ptr.h:199 #15 0x0000aaaaaaaa35b0 in main (argc= , argv= ) at /home/ubuntu/imx-yocto-bsp/tflite_test/build_minim/main.cpp:29 誰かが何が間違っているのか手がかりを持っていますか?ここで何が起こったのかわからないからです。しかし、私が知っているのは、op_layout_inference.cc:MapAxis:177 Map axisのアサーションがアサーションエラー(? よろしくお願いいたします i.MX 8ファミリ | i.MX 8QuadMax (8QM) | 8QuadPlus Re:TfLite NPU実行エラー op_layout_inference.cc:MapAxis:177マップ軸が失敗しました 問題の原因を見つけました。どうやらこの行がエラーの原因となったようです。 resolver.AddCustom(kNbgCustomOp, tflite::ops::custom::Register_VSI_NPU_PRECOMPILED()); だから今のところ、私はそれを無効にするだけで、魔法のように機能します。誰かがなぜそれがエラーを引き起こすのかを説明できるかもしれませんが、今のところ、私はついに私のアプリ開発を続けることができます。 モデルについては、Pythonコードを使用してチェックしますが、エラーは発生していないようですので、モデル自体はNPUの実行と互換性があります。 ありがとうございます Re:TfLite NPU実行エラー op_layout_inference.cc:MapAxis:177マップ軸が失敗しました モデルが NPU/VX デリゲート実行と互換性がない可能性はありますか? bc CPUで実行しようとすると、別のエラーが発生しました(StridedSliceレイヤーの1つに関連していますが、CPUの実行についてまだ適切にチェックしていません) Re:TfLite NPU実行エラー op_layout_inference.cc:MapAxis:177マップ軸が失敗しました Hello, あなたが知っている限り、ゼロ引数コンストラクタを呼び出すことを不可能にしたという主張は、プライベートであるため、呼び出しが発生した場合、そのアサーションはエラーごとに違反されていると言うためにそこにあるように見えます。 よろしくお願いします。
記事全体を表示
探索 MCU-Link Pro 的功能 探索 MCU-Link Pro 的功能 MCU-Link Pro是恩智浦最新的ARM Cortex-M系列核心调试工具。它的一些功能是从过去的LPC-LINK2继承而来的。但总体而言,它经过重新设计并引入了许多新功能。这些附加功能使 MCU-Link Pro 成为一个非常强大的调试工具。本文将探讨这些功能并重点介绍一些有趣且有用的功能。这些功能主要包括以下几个方面。 社工工作+社工工作 电流和功耗的测量 MCU-Link pro 获得新 blhost 支持 适用于 Windows、Ubuntu Linux 和 MacOS 的 LIBUSBSIO 库 板上有辅助芯片LPC804   社工工作+社工工作 MCU-Link Pro 仅支持 SWD。它不支持JTAG。开发板的主控制器是LPC55S69。端口和LPC55S69之间有电平转换电路。使得电路板可以调试目标板在1.2V至5V下工作。它具有参考电压跟踪电路,用于跟踪目标板电压。它可以自动跟踪端口,无需任何设置。MCU-Link Pro 还可以提供 1.8V/3.3V到目标板。最大电流为350mA。这是通过连接 J6 并通过 J5 选择来完成的。 SWO的最大速度为9.6Mbit/s。 与 电流和功耗的测量 MCU-Link pro提供了非常有趣的电流和电压测量实时功能。它可以以高达 100ksps 的速度捕获目标电流使用情况、目标电源电压、屏蔽电流、模拟输入、调试接口参考电压或目标功耗的突发样本。该信息以图表形式显示,也可以导出以供进一步分析。还可以显示所收集数据的平均值。并且根据电流和电压数据,还可以计算出功耗并以图表形式显示。下图中画红线的地方就是鼠标所在时间点的实时电压。 更有趣的是,能量测量功能不需要激活调试来捕获数据,它是离线的,并且具有单独的数据通道。但如果存在这样的调试会话,它也可以链接到会话。这对于调试各种低功耗应用非常有用。不仅可以看到每一步命令下的功耗变化,还可以查看系统运行时较长一段时间内的功耗变化规律。由于有单独的数据通道,您甚至可以在 KEIL 中调试程序并在 MCUXpresso 中观察当前的变化。 MCU Link Pro 有两种电流测量配置,每种配置都有一个最大可测量电流。这是为了针对各种不同的目标实现最高的测量精度。每种配置都有两个自动控制范围,以提供更高的精度。从低电流测量到高电流测量的自动切换完全由硬件控制。 每次 MCU Link Pro 通电时,测量电路都会自行校准。由于使用晶体管将传感电路与目标电源隔离以避免争用并确保在校准期间向系统施加已知电压,因此校准前无需断开/重新连接 MCU Link Pro。 在高采样率下,MCUXpresso IDE 可能无法捕获所有数据,因此可能需要使用工具中的能量测量配置设置中的配置选项来调整采样率。 如果目标电流超过所选范围内的最大电流,测量将会饱和并截止,因此不准确。 Blhost 和 MCU-Link Pro MCU Link Pro最值得关注的是其USB转SPI和I2C桥接功能。这使得计算机能够直接通过 USB 发送 I2C 和 SPI 信号。 blhost也没有忽视这个强大的功能。新版本的blhost可以支持该功能,并增加了新的命令参数‘-L’。具体来说,“- L SPI”指的是SPI接口,“- L I2C”指的是I2C接口。下图是在frdm-k64f上的测试结果。图中可以清楚看到MCU Link Pro的SPI接口可以与k64上的mcuboot固件进行通信,将加密程序下载到flash中。 除了KINETIS,这个功能最适合i.MXRT600和i.MXRT500。这两款芯片都支持串行ISP模式,可以通过SPI或者I2C口把程序下载到RAM中,然后直接运行,很多用户都有这种用法。之前SDK里的例子中,需要用到一块twr-kv46或者twr-k65或者frdm-kl25的板子,用来接收UART的命令和数据,并转换成SPI和I2C的命令。由于这些板子没有直接的接口,需要飞线,非常麻烦。而且NXP只提供了这三块板子的固件,如果要用其他芯片或者板子,也必须移植固件,也非常麻烦。但是有了MCU Link Pro,一切都变得非常轻松愉快。 LIBUSBSIO 库 为了更好地扩展桥接功能的使用,NXP提供了libusbsio库。通过调用此库,您可以在自己的应用程序中实现USB转SPI\I2C\GPIO的功能。还根据NXP提供的libusbsio库制作了烧写kinetis ezport和flash的上位机工具。我在上一篇文章中详细介绍了这一点。有兴趣的朋友可以看看我的文章。 提供基于windows和linux的库是不够的。NXP 还提供了一个 python 库。该库基于python3,可以通过以下命令安装 >pip 安装 libusbsio libusbsio 文档中没有详细描述它的用法。这里做一个大概的介绍。以下是libusbsio的初始化过程。 import logging import logging.config from libusbsio import * # enable basic console logging logging.basicConfig() # load DLL from default directory sio = LIBUSBSIO(loglevel=logging.DEBUG) # the main code # calling GetNumPorts is mandatory as it also scans for all connected USBSIO devices numports = sio.GetNumPorts() print("SIO ports = %d" % numports) if numports > 0 and sio.Open(0): print("LIB version = '%s'" % sio.GetVersion()) print("SPI ports = %d" % sio.GetNumSPIPorts()) print("Max data size = %d" % sio.GetMaxDataSize()) if(sio.GetNumSPIPorts() > 0): spi = sio.SPI_Open(1000000, portNum=0, dataSize=8, preDelay=100) if spi: data, ret = spi.Transfer(spi_ssel[0], spi_ssel[1], b"Hello World") sio.Close() else: print("No USBSIO device found") ​ 第9行是打开libusbsio库的实例; 第14行:获取所有USB桥接器的usbsio端口数量; 第18、19、20行分别是读取的版本信息、SPI端口数量以及SPI缓存的最大大小; 第22行:打开SPI接口; 第24行,开始传输数据。 从上面可以看出使用过程比较简单。并且这些命令与C语言库的命令非常相似。 板上有一个辅助控制器 LPC804 MCU Link Pro 板上还有一个 lpc804。这个芯片在这里很令人困惑。它是用来做什么的?其UART、SPI、I2C端口均连接外部使用。但这有什么用呢?一种可以想象的应用是,UART端口连接到新添加的vcom2,然后SPI或I2C以从属模式工作。它作为监听器,监听需要调试的SPI或者I2C总线,并显示在计算机终端上。 LPC804调试接口与MCU Link Pro的调试端口相同。也许该板本身就是一个开发板,以便用户可以开发lpc804程序?另外,它的UART-ISP端口连接到LPC55S69的UART端口。看来以后可以通过新版本的CMSIS-DAP固件互相通信了。让我们期待未来新的玩法。 Freedom开发平台
記事全体を表示
i.MX8QM 音频 mclk 未启用 Hello, 我有一块带有 i.MX8QM 的定制板,我注意到 mclk0 输出未启用。这在 Linux 5.15 上运行良好,但现在我升级到 Linux 6.1 后,mclk0 不再工作。请参阅下面的时钟摘要...时钟频率是正确的,但未启用。如何启用 mclk? cat /sys/kernel/debug/clk/clk_summary enable prepare protect duty hardware clock count count count rate accuracy phase cycle enable ------------------------------------------------------------------------------------------------------- audio_rec_clk0_clk 0 0 0 24576000 0 0 50000 Y aud_rec_clk0_lpcg_clk 0 0 0 24576000 0 0 50000 ? acm_aud_clk0_sel 0 0 0 24576000 0 0 50000 Y acm_aud_clk1_sel 0 0 0 24576000 0 0 50000 Y acm_mclkout0_sel 0 0 0 24576000 0 0 50000 Y mclkout0_lpcg_clk 0 0 0 24576000 0 0 50000 ? acm_mclkout1_sel 0 0 0 24576000 0 0 50000 Y mclkout1_lpcg_clk 0 0 0 24576000 0 0 50000 ? 设备树: sound_card: sound-card { compatible = "simple-audio-card"; simple-audio-card,name = "PCM3168A"; simple-audio-card,aux-devs = <&>; simple-audio-card,widgets = "Speaker", "Channel1out", "Speaker", "Channel2out", "Speaker", "Channel3out", "Speaker", "Channel4out", "Speaker", "Channel5out", "Speaker", "Channel6out", "Speaker", "Channel7out", "Speaker", "Channel8out", "Microphone", "Channel1in", "Microphone", "Channel2in", "Line", "Channel3in", "Line", "Channel4in", "Microphone", "Channel5in", "Microphone", "Channel6in"; simple-audio-card,routing = "Channel1out", "AOUT1L", "Channel2out", "AOUT1R", "Channel3out", "AOUT2L", "Channel4out", "AOUT2R", "Channel5out", "AOUT3L", "Channel6out", "AOUT3R", "Channel7out", "AOUT4L", "Channel8out", "AOUT4R", "Channel1in", "AIN1L", "Channel2in", "AIN1R", "Channel3in", "AIN2L", "Channel4in", "AIN2R", "Channel5in", "AIN3L", "Channel6in", "AIN3R"; simple-audio-card,dai-link@0 { format = "left_j"; bitclock-master = <&snd_cpu>; frame-master = <&snd_cpu>; mclk-fs = <512>; snd_cpu: cpu { sound-dai = <&sai0>; clocks = <&mclkout0_lpcg 0>; dai-tdm-slot-num = <8>; dai-tdm-slot-width = <32>; }; pcm3168_dac: codec { sound-dai = <&pcm3168a 0>; dai-tdm-slot-num = <8>; dai-tdm-slot-width = <32>; }; }; simple-audio-card,dai-link@2 { format = "left_j"; bitclock-master = <&mic_cpu>; frame-master = <&mic_cpu>; mclk-fs = <512>; mic_cpu: cpu { sound-dai = <&sai0>; clocks = <&mclkout0_lpcg 0>; dai-tdm-slot-num = <8>; dai-tdm-slot-width = <32>; }; pcm3168_adc: codec { sound-dai = <&pcm3168a 1>; dai-tdm-slot-num = <8>; dai-tdm-slot-width = <32>; }; }; }; &sai0 { #sound-dai-cells = <0>; assigned-clocks = <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>, <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>, <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>, <&sai0_lpcg 0>; assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>; clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai0>; status = "okay"; }; &i2c0 { #address-cells = <1>; #size-cells = <0>; clock-frequency = <100000>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c0>; status = "okay"; // Audio Codec (8-channel output, 6-channel input) pcm3168a: audio-codec@44 { compatible = "ti,pcm3168a"; reg = <0x44>; reset-gpios = <&lsio_gpio4 24 GPIO_ACTIVE_LOW>; clocks = <&mclkout0_lpcg 0>; clock-names = "scki"; clock-frequency = <24576000>; assigned-clocks = <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>, <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>, <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>, <&mclkout0_lpcg 0>; assigned-clock-rates = <786432000>, <49152000>, <24576000>, <49152000>; #sound-dai-cells = <1>; VDD1-supply = <&reg_3v3>; VDD2-supply = <&reg_3v3>; VCCAD1-supply = <&reg_5v0>; VCCAD2-supply = <&reg_5v0>; VCCDA1-supply = <&reg_5v0>; VCCDA2-supply = <&reg_5v0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_codec_clk &pinctrl_audio_reset>; }; }; pinctrl_codec_clk: codec_clk { fsl,pins = < IMX8QM_MCLK_OUT0_AUD_ACM_MCLK_OUT0 0xc0000020 >; }; 回复:i.MX8QM 音频 mclk 未启用 我明白了问题所在。在音频放大器节点中,我在 6.1 内核中设置不正确,导致它无法工作。奇怪的是,dmesg 中没有错误,但是在修复这个错误配置后,mclk 开始工作。感谢您的帮助! 回复:i.MX8QM 音频 mclk 未启用 Hi @joanxie, 以下是 5.15 版时钟和 dmesg 的输出: root@neuralplex:~# cat /sys/kernel/debug/clk/clk_summary enable prepare protect duty hardware clock count count count rate accuracy phase cycle enable ------------------------------------------------------------------------------------------------------- audio_rec_clk0_clk 1 1 0 24576000 0 0 50000 Y aud_rec_clk0_lpcg_clk 1 1 0 24576000 0 0 50000 ? acm_aud_clk0_sel 0 0 0 24576000 0 0 50000 Y acm_aud_clk1_sel 0 0 0 24576000 0 0 50000 Y acm_mclkout0_sel 1 1 0 24576000 0 0 50000 Y mclkout0_lpcg_clk 1 1 0 24576000 0 0 50000 ? acm_mclkout1_sel 0 0 0 24576000 0 0 50000 Y mclkout1_lpcg_clk 0 0 0 24576000 0 0 50000 ? 回复:i.MX8QM 音频 mclk 未启用 谢谢你的信息,你介意分享一下 5.15 bsp 的转储时钟和日志文件吗?让我再确认一下。 回复:i.MX8QM 音频 mclk 未启用 Hi @joanxie, 没错。在 5.15 上运行的相同设备树在 6.1 上无法运行。由于兼容性(主要是 pcie),6.1 设备树中有细微的变化,但除此之外,设备树基本相同。我已附上 dmesg 的输出。 回复:i.MX8QM 音频 mclk 未启用 相同的设备树在 5.15 上运行,但在 6.1 上失败?你介意分享你的日志文件吗?
記事全体を表示
FreeMASTER - 使用方法 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在这里您可以找到有关 FreeMASTER 工具主要功能的简短而重点的介绍。 它是实时数据可视化和MCU实时控制非常有用的工具。 您可以为您的应用程序创建一些非常有趣的 Web 界面 - 观看此视频以了解更多信息。 如果您有任何意见或问题 - 请在下方留言。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在这里您可以找到有关 FreeMASTER 工具主要功能的简短而重点的介绍。 它是实时数据可视化和MCU实时控制非常有用的工具。 您可以为您的应用程序创建一些非常有趣的 Web 界面 - 观看此视频以了解更多信息。 视频链接:7933 如果您有任何意见或问题 - 请在下方留言。 提示与技巧 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 嘿petrfajmon-b17364 , 这是我正在使用的示例文件夹 - 让我向您展示我是如何使用该示例的,然后我将提供有关软件版本等的一些详细信息。不幸的是,商业 Matlab 许可证的价格为 2,150 美元 - 因此在测试期间读取一些变量有点过头了。 我会尝试一下 JavaScript - 但令人失望的是,这个例子不起作用,因为它可以*轻松*地适应我的需求 - 而且我想其他人也可以在开发阶段使用 FreeMASTER 进行这种类型的测试。 首先,我打开了 FreeMASTER 2.0 - 我已经通过 CAN 和 UART 成功与目标通信,因此没有问题。此时我只是打开了应用程序,并没有与目标进行通信。 然后,我从此位置打开 Excel 示例( c:\NXP\FreeMASTER_Serial_Communication_Driver_V2.0\examples\ActiveX_examples\Excel) :   打开 Excel 电子表格,我显然点击了“启用宏”,然后进入 VBA 查看示例(与用户手册相同): 从这里,我点击“调试->编译 VBA 项目”,出现了之前的 ActiveX 错误: 在此对话框中点击“调试”会将我指向此行,表明它无法创建“McbPcm”实例 进入“工具->参考”验证示例中是否存在正确的服务: 就软件版本而言,我正在使用: FreeMASTER 版本 2.0.3.1 Microsoft Excel 2013(15.0.4667.1000) VBA 版本 7.1 DirectX 版本 11 FreeMASTER 2.0 手册显示此处的 Excel 示例中使用的是 1.3 版本: 请让我知道为什么该示例无法创建对象 - 我应该能够调整其余部分。 谢谢! 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好, gearhead1107 , 您可以查看 FreeMASTER SCI 驱动程序安装位置“c:\NXP\FreeMASTER_Serial_Communication_Driver_V2.0\examples\ActiveX_examples”文件夹中的简单 ActiveX 脚本示例。在我看来,Matlab 是记录诸如“温度”等数据的好工具。Matlab/Excel 示例脚本与 PC 端的演示应用程序(存储在“c:\NXP\FreeMASTER_Serial_Communication_Driver_V2.0\examples\PC_host_demo”中)以及 c:\NXP\FreeMASTER_Serial_Communication_Driver_V2.0\examples\SCI_driver_examples”中)配合使用。 您还提到用户手册引用了旧版本 FreeMASTER v1.3,您能否将旧版本 1.3 的引用详细信息发送给我? 谢谢! 彼得 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好, gearhead1107 , 没有专门针对 FreeMASTER 相关主题的社区 - 所以您可以将其留在这里。 就我个人而言,我只尝试了 HTML 和 JS。也许您可以只使用 JS 并使用您需要的数据创建一个 xls。 petrfajmon-b17364‌ 您能推荐一位有此类技术经验的人吗? 非常感谢! Daniel 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> dumitru-daniel.popa ‌,谢谢指点! 我认为通过 VBA/Excel 使用 ActiveX 控件是完成我想做的事情的最佳方式(即获取值->放入电子表格进行日志记录),但包含的示例甚至无法编译。查看用户手册,似乎他们甚至引用了旧版本的 FreeMASTER (v1.3),因此不清楚人们多久会查看一次这些内容。 我目前在“Set fmstr = New McbPcm”行上看到以下错误 - 表明它无法初始化 ActiveX 对象(是的,该项目已根据手册正确定义引用)。是否有关于如何创建对象并针对不同的通信方法(如 CAN)对其进行操作的指南/帮助文章?用户手册介绍了不同的*方法*,但对于推荐用法的介绍却很简短。   由于这是一个 FreeMASTER/ActiveX 问题,我不太确定将其放在哪里 - 我应该在 S32DS 部分发布一些内容吗?或者有 FreeMASTER 社区页面吗? 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好, gearhead1107 , 您可以使用 HTML 或 JScript 功能读取您感兴趣的变量,然后将其写入主机 PC 上的 log/txt 文件中。请查看 Freemaster 用户手册第 6 章:HTML 和脚本。 Freemaster 支持 ActiveX 组件,让基于脚本的代码访问和控制目标板应用程序。 您还可以观看此视频: https://community.nxp.com/thread/455228了解如何使用 jscript(简短续集) 希望这有帮助! Daniel 回复:FreeMASTER-如何 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 在较长时间内将值记录到 PC 的最佳方法是什么? 我正在使用 S32K144,并且添加了“温度”之类的变量,虽然我可以在示波器中观察它们,但我想创建一个日志文件(.CSV 或类似文件),以便我可以对电路板进行测试,并让 Freemaster 在测试过程中记录温度,这可能会持续几个小时。例如,我需要能够返回,查看日志/文件并查看“好的,我们在 X 时间和 Y 温度下失去通信”。 我的第一个想法是设置一个“记录器”,但是 FreeMASTER 说没有空间,而且我也不确定目标上是否有足够的空间来存储日志 - 我只想在 PC 上进行此操作。
記事全体を表示
2013年フリースケールカップUSA東海岸結果 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 東海岸のチームとUCバークレーの皆さん、アメリカで総合最速の車におめでとうと言いたいです! イベントのその他の写真/ビデオ。 ウェスト対東の勝者:ジョルト - UC-Berekley 17:35 東海岸チーム: 1位:相対論的ロボットレーサー-ロードアイランド大学-22.04秒 2位:バルカー - ペンシルベニア州立カリフォルニア大学 - 25.15秒 3位:テンプルメイド-テンプル大学-25.72秒 完全な結果を見る フリースケール・カップの内容 イメージギャラリー 日時:2013年フリースケールカップUSA東海岸結果 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> TFC - USA 教員ポータル TFC - メキシコ TFC - EMEA 日時:2013年フリースケールカップUSA東海岸結果 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 素晴らしい! 投稿していただきありがとうございます!! 日時:2013年フリースケールカップUSA東海岸結果 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> フリースケールカップアメリカ東海岸地域大会 2013 - YouTube
記事全体を表示
電動バイク向け3相ホール・センサPMSMドライバとKE02ベースのHVモータ向けセンサレス・ソリューション 形容 ブロック図 製品 関連ドキュメント トレーニング コミュニティからの関連デモ 形容 電気モーターと充電式バッテリーを内蔵した自転車で、スマートシティに最適な環境に優しいゼロエミッション車です。E-Bikeの重要な特徴は、信頼性が高く、長期間使用できる必要があることです。 ブロック図 プロダクツ カテゴリー名1: マイクロコントローラ 商品1 URL 1 https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/ke-series-cortex-m4-m0-plus/kinetis-ke02-20-mhz-entry-level-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KE02 商品1 商品説明 1 Kinetis KE02には、特定のフラッシュ・メモリ・サイズとピン数を備えたアナログ、通信、タイミング、制御ペリフェラルの強力なアレイが含まれています。K02は、1つの6チャネルFlexTimer/PWMと2つの2チャネルFlexTimer/PWMを備えた、低電力、高堅牢性、およびコスト効率の高いマイクロコントローラとして機能します。 商品 2 URL 1 ® アームコーテックス®-M4|Kinetis® K64 120MHz 32ビット・マイクロコントローラ |NXPの  商品2 説明1 Arm ® Cortex-M4 ® コア をベースとする KinetisK64-120MHz ® 、256KB SRAM マイクロコントローラ (MCU) カテゴリー名2: ゲート・ドライバ 商品1 URL 1 https://www.nxp.com/products/power-management/motor-and-solenoid-drivers/bldc-h-bridge-stepper/3-phase-brushless-motor-pre-driver:GD3000 商品1 商品説明 1 GD3000は、三相モーター駆動アプリケーション向けゲート・ドライバICです。3つのハーフブリッジ・ドライバを搭載しており、各ハーフブリッジ・ドライバはそれぞれ2つのNチャネルMOSFETを駆動することができます。 カテゴリ名3: LEDドライバ 製品URL 1 https://www.nxp.com/products/power-management/lighting-driver-and-controller-ics/ic-led-controllers/16-channel-fm-plus-ic-bus-57-ma-20-v-constant-current-led-driver:PCA9955BTW 製品説明1 PCA9955Bは、I2Cバス制御の16チャネル定電流LEDドライバで、アミューズメント製品で使用される57 mAの赤/緑/青/アンバー (RGBA) LEDの調光および点滅用に最適化されています。 各LED出力は、31.25 kHzで動作する8ビット分解能(256ステップ)の固定周波数PWMコントローラを個別に使用し、0%~100%に調整可能なデューティ・サイクルによりLEDを特定の輝度に設定できます。 カテゴリー名4: ロジックUSB Type-C設定チャンネル 製品URL 1 https://www.nxp.com/products/interfaces/usb-interfaces/usb-type-c-true-plugn-play/usb-pd-phy-and-cc-logic/cc-logic-for-usb-type-c-applications:PTN5150 製品説明1 PTN5150は、Configuration Channel(CC)制御ロジック検出および表示機能を備えたUSB Type-Cコネクタアプリケーションをサポートする、小型で薄型、低電力のCCロジックチップです。このPTN5150により、USB Type-CコネクタをType-Cケーブルのホスト側とデバイス側の両方で使用できます カテゴリー名5: 電流制限パワースイッチ 製品URL 1 https://www.nxp.com/products/power-management/load-switches/usb-pd-and-type-c-current-limited-power-switch:NX5P3290UK 製品説明1 このNX5P3290には、低電圧ロックアウト、過熱保護、および障害状態が発生したときにスイッチ端子を自動的に絶縁する逆電流保護回路が含まれています。 カテゴリー名6: セキュア 商品1 URL 1 A71CH型 |IoTのためのプラグ&トラスト |NXPの  製品説明1 プラグ&トラスト - 安全なIoT接続を迅速かつ簡単に導入 カテゴリー名7: NFC 商品1 URL 1 PN5180 |NFCフォーラムに完全準拠したフロントエンドIC |NXPの  製品説明1 NFCフォーラム完全準拠のフロントエンドIC カテゴリー名8: 汎用I/Oエクスパンダ 商品1 URL 1 PCAL6534 |レベル変換GPIOエキスパンダー |NXPの  製品説明1 超低電圧、レベル変換、34ビットI2Cバス/SMBus I/Oエキスパンダ   カテゴリー名8: NFCスマートカード 商品1 URL 1 https://www.nxp.com/products/rfid-nfc/mifare-hf/mifare-desfire/mifare-desfire-ev2:MIFARE_DESFIRE_EV2_2K_8K 製品説明1 スマートシティアプリケーション向けの強化された機能セットを備えたセキュアな非接触マルチアプリケーションIC 関連ドキュメント Document URL タイトル https://www.nxp.com/docs/en/application-note/AN10439.pdf ウェハレベルチップスケールパッケージ https://www.nxp.com/docs/en/application-note/AN5322.pdf AN5322、TPMSホイールの位置紹介と主なコンセプト 訓練 トレーニングURL https://community.nxp.com/docs/DOC-341509 コミュニティからの関連デモ URL Kinetisマイクロコントローラ  MCUXpresso SDK  MCUXpressoソフトウェアとツール  Kinetis KV5x Cortex-M7マイクロコントローラおよびGD3000モータ・プリドライバによるUAV速度制御    ブロック図 スマートシティ
記事全体を表示
エラー L1102: アドレス 0xE3BFE7 のセグメント PAGE_E3 の割り振りスペースが不足しています コードの小さなセグメントを1つのファイルに追加しようとすると、次のエラーが発生しますが、そのコードセグメントを別のファイルに移動すると完全に機能します。エラーの原因となっているコードが割り当てられたPAGE_E3スペースをオーバーフローさせているようで、それを修正する方法がよくわかりません。PAGE_E4に割り当てられたスペースを減らしながら、PAGE_E3に割り当てられたサイズを増やそうとしましたが、同じメモリアドレスを指し示す同じエラーが発生します。 これは、既存のコードに追加したコード セグメントです。 UI32 tempArry[10] = {0}; for (int i = 0; i < 10; i++) {      tempArry[i] = i; } 次の質問があります: 1. ファイル間でコード セグメントを移動すると、両方のコードが既定の領域にあるように見えるため、動作が変わるのはなぜですか? 2. 他のページに干渉せずにPAGE_E3スペースを増やすにはどうすればよいですか? 3. 特定のコード セグメントを別のPAGE_XXに配置し、ファイルの残りの部分を別のページに保持する特別なアプローチはありますか?その場合、パフォーマンスにはどのような影響がありますか? MC9S12XDP512(R3.prm)のリンカーパラメータファイルが添付されています:参考までに R3.zip。 私はかなり新しいので、問題を理解するためにあなたの助けに感謝します... 感謝 マドゥシャン PS:次のようにしてページをマージしようとしましたが、それでも同じエラーが発生しました。 セグメント /* PAGE_E3 = READ_ONLY 0xE30000 TO 0xE3BFFF; PAGE_E4 = READ_ONLY 0xE48000 TO 0xE4BFFF; */ PAGE_E3E4 = READ_ONLY 0xE30000 TO 0xE4BFFF; 配置 VIRTUAL_TABLE_SEGMENT, /* C++ 仮想テーブル セグメント */ STRINGS, /* 文字列リテラル */ DATA_ROM、 DEFAULT_ROM、 CONST_EVENTS、 CONST_DATA、 ROM_POINTERS、 COPY /* 情報のコピーダウン: 変数の初期化方法 */ PAGE_FE、PAGE_FC、PAGE_FB、PAGE_FA、 PAGE_F9、PAGE_F8、PAGE_F7、PAGE_F6、 /*PAGE_F5、PAGE_F4、PAGE_F3、PAGE_F2、*/ PAGE_F5、 PAGE_E3E4、PAGE_F2、 PAGE_ED、PAGE_EC、PAGE_EB、PAGE_EA、                               PAGE_E9, PAGE_E8, PAGE_E7, PAGE_E6; Re:エラーL1102:アドレス0xE3BFE7のセグメントPAGE_E3の割り当てスペースが不足しています 私は自分で問題を解決したでしょう:ビルドには2つのprmファイルが関与しており、私は1つのファイルしか変更していません...:)。両方のファイルを変更すれば、正常にビルドできたでしょう。 Re:エラーL1102:アドレス0xE3BFE7のセグメントPAGE_E3の割り当てスペースが不足しています 何か助けはありますか@ZhangJennie ?
記事全体を表示
Qt5 QPainter 与 QML 和场景图。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 使用 Qt5,您会发现新增的技术将使您的开发变得更加容易。 Qtquick2 场景图 质量 Qt5 向后兼容,这意味着您可以运行 Qt 4.8 应用程序,但这并不意味着它们将具有最佳性能,有时最好进行移植以使用最新的功能。 Qt5,有两种选项可以将组件绘制到屏幕上。Qt 5 中的绘画主要通过以下方式完成: 命令式 QPainter API Qt 的声明性 UI 语言QML及其场景图后端。 QPainter 正如本文档提到的Qt5GraphicsOverview | Qt Wiki | Qt Project Qpainter 引擎使用软件进行绘画,并在绘制 Qimages 或 Qwidgets 时使用。它相对于 OpenGL 的优势在于启用抗锯齿功能时的高质量以及完整的功能集。 Qpainter 可以使用 OpenGL 引擎,但正如文档中提到的,它更容易受到状态变化的影响。并且必须小心使用。 QML 和场景图。 所有可视化 QML 项目均使用场景图进行渲染,场景图是一种低级、高性能渲染堆栈,与 OpenGL 紧密相关。 Qt Quick 2 使用基于 OpenGL ES 2.0 或 OpenGL 2.0 的专用场景图进行渲染。使用场景图进行图形处理,而非传统的命令式绘画系统(QPainter等),意味着待渲染的场景可以在帧之间保留,并且在渲染开始之前即可知道要渲染的完整图元集合。这为一系列优化提供了可能,例如批量渲染以最大限度地减少状态变化,以及丢弃被遮挡的图元。 QML 场景 图 是 Qt 5 中 QML 的新后端 ,它基于 OpenGL。 与 Qt 4 中使用的基于 QPainter 的后端相比,它总体上显著 提高了 QML 的性能。它通过多种方式实现了更佳的性能: 场景图直接使用 OpenGL,而不是通过可以使用光栅或 OpenGL 绘画引擎的 QPainter。这意味着所有资源(如几何体、纹理和着色器)都可以以适合 OpenGL 的格式存储,而不是使用 QPainterPath、QPixmap、QBrush 或 QPen 等类,QPainter 需要将这些类转换为 OpenGL 原语并可能进行缓存。 QML是一种声明性语言,它定义了最终结果应该是什么样的,但它并没有定义如何以及以何种顺序绘制每个单独的元素。因此,可以重新排序绘图以减少状态变化的次数,或者合并绘图以减少绘图调用的次数。 场景图使用单独的渲染线程,并在支持此功能的平台上将动画与垂直回扫同步。渲染线程允许在渲染当前帧的同时准备下一帧。这对单核系统也有积极的影响,因为渲染线程可能会阻塞 OpenGL 命令。与垂直回扫的同步提高了动画的感知平滑度。 我们已经在 i.MX6 上测试了这两个选项,使用 QML Qtquick2 元素获得了最佳效果。当我们尝试通过 Widgets 使用 QtPainter 时,我们面临的问题是,如果不使用像 X11 或 Wayland 这样的窗口系统,画家将无法正常工作并且只会显示 QtGLWidget。 使用 QML 场景图,我们可以在同一个环境中拥有一个 OpenGL 元素和一个 Qt 元素,并且可以轻松地相互通信和共享变量。请在此处查看示例结果: I.MX6 场景图 Qt5 - YouTube 最大的优势是,sceneGraph 全部通过 OpenGL 加速。 回复:Qt5 QPainter 与 QML 和场景图。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 你好 我正在将一个大型应用程序移植到带有 Qt5.1 的 iMX6,该应用程序最初基于 Qt4.7 并在 iMX35 上运行。 我的旧应用程序有很多基于 QPainter API 的 2D 绘图。 我希望用 QGLWidget 替换 QWidget 并获得硬件加速的 QPainter API;但看起来情况并非如此。 我继续使用 QPainter,但只获得像 Qt 4.7 那样的软件渲染 如果我想要硬件加速 2D 渲染,那么我必须使用 gl API 重写所有绘图代码。 我的理解正确吗? Fabio 回复:Qt5 QPainter 与 QML 和场景图。 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> FranciscoCarrillo ,您能否将此文档移至公共 i.MX 社区,以便那里的文档不会指向外部成员无法访问的地方的文档?然后在下面的公开讨论中添加一个帖子来报告这个问题? 链接文章称“访问此地点或内容受到限制...” 此问题尚未回答。 (标记为假定已回答)      stephenlangstaff 2013年7月12日 上午2:43 我看到“对此地点或内容的访问受到限制。如果您认为这是一个错误,请联系您的管理员或引导您到这里的人。”当尝试访问https://community.freescale.com/docs/DOC-94234时,指出EGLFS 上的 QT5 Demo 错误。 谢谢。 授予
記事全体を表示
LPC55S69に基づくMCU用の幅広い自動調整電力測定ソリューション 電力測定ボードには、8つのプログラマブル・ゲイン・アンプ(LTC6915)と2つのADCコンバータ(AD7175)をサポートする8つの測定チャンネルが含まれています。測定ボードは、サンプリング抵抗の両端の電圧降下を測定し、電圧降下がアンプによって処理された後、ADCに送信し、SPIを介して利用できるようにします。マイコンLPC55S69は、測定回路からデータを収集し、USB VCOMポートを介してホストコンピュータに送信します。MCUは、異なる電源回路を測定するときに、SPIによってプログラマブルゲインアンプのゲイン値を制御できます。 ホストコンピュータはUSB仮想シリアルポートを介して電力測定ボードに接続し、MCUはSPIによって測定ユニットを初期化および構成し、内部電流の測定と電圧の監視を開始します。MCUはゲインパラメータを調整し、SPIによって電流と電圧のデータをMCUに送信し、MCUはデータをホストコンピュータに送信して、仮想シリアルポートを介して処理および表示します。測定対象の回路の電圧降下は、まずプログラマブルアンプLTC6915で増幅され、同時にMCUがデータが異常でないかの状態を監視します。 R0はサンプリング抵抗、LTC6915は選択可能なプログラマブルアンプで、ゲインは14種類に設定でき、電流が変化するとPGAゲインパラメータが調整されます。ADC7175は24ビットの高精度ADCで、これは小電流測定のアプリケーションにより有利です。MCUが低電力モードを通常モードに切り替えると、LTC6915はSPIによってゲイン値を減少させます。 電力測定ボードは、2線式ケーブルによる簡単な接続方法を提供します。たとえば、MIMXRT1180EVKとMIMXRT1020EVKは電力測定ボードに接続されています。 USB仮想COMはデータ転送に使用され、PMT(電源管理ツール)または他のPCGUIによって表示され、測定電力データには電流、電圧、電力が含まれます。 添付ファイルには、より詳細な説明があります。 全般 LPC55xx ペリフェラル
記事全体を表示
FS26でS32K341に電力を供給する/v11の入手方法 S32K344評価ボードの回路図とボードを見ていますが、v11がどこから来ているのか理解できず、MCUのV11ピンにのみ接続されており、それ以外は何も接続されていないように見えます 私はこれを誤解しており、ボードに2.5Vと1.1Vを供給する必要はなく、これらのピンにコンデンサが必要なだけだと誤解していますか? 私はこれを見落としていました、私は正しく理解していますか、私は1.5Vを供給する必要があるだけでなく、VDD_HV_AとB、およびVREFHのために5Vを供給する必要がありますか? さらに、FS26のVCoreなどの電圧レベルをv15に電力を供給する方法がわかりません。この情報は、セキュアアクセスファイルの完全なデータシートに含まれていますか? Re:FS26でS32K341に電力を供給する/v11の入手方法 こんにちはジェイソンZ、 はい、あなたはそれを非常によく理解しています:V11ピンとV25ピンを外部に供給する必要はなく、デカップリングコンデンサを接続するだけで済みます。 はい、1.5VとVDD_HV_AとB、およびVREFHに5Vを供給する必要があります。 この情報は、S32K3xx MCUファミリのデータシート(図20など)およびS32K3xx MCUファミリ - リファレンスマニュアル(図165など)に記載されています。しかし、供給管理の最良のリファレンスは、S32K3 MCUの汎用 - ハードウェア設計パッケージで、考えられるすべての供給実施形態がリストされています。これらのドキュメントはいずれも[セキュリティ]セクションにはありません。 よろしくお願いいたします。 パベル
記事全体を表示