問題タブ [keil]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gcc - ARM7のKeil対GCC?
KeilはARM7開発に関してGCCとどのように比較されますか?私は中規模のプロジェクトにハードウェアコンサルタントを選ぶ過程にあり、一部はkeilを使用し、一部はgccを使用しています。どちらのオプションを使用する場合の落とし穴も知りたいのですが...
keil - keiluvision3の使用に関する問題
Keil uvision 3を使用してCコードをコンパイルしようとしています。ターゲットにオプションxdataを選択して大容量メモリモデルを使用した場合にのみ、コード全体がコンパイルされます。このモデルを使用するには、外部データRAMを使用する必要がありますが、何らかの理由で使用できません。
そこで、pdataオプションを使用することにしました。誰かがpdataを使用するために実行される正確な手順を手伝ってくれますか?89V51RD2を使用しています。BL51 MISC、BL51Locateなどのオプションとよく混同しています。
c - 16ビットアドレスから上位/下位バイトを分割する方法は?
8051 プロセッサでソフトウェアを開発しています。よくある作業は、16 ビット アドレスの上位バイトと下位バイトを分割することです。それを達成する方法がいくつあるか見てみたい。私がこれまでに思いついた方法は次のとおりです。
ビット演算
SDCC は次のアセンブリ コードを提供します。
Keil C51 は私に与えます: 多くの役に立たないコードIMHOがあります。ポインタートリック
SDCCは私に与えます: Keil C51 は私に与えます: これは SDCC バージョンと同じです。アンドレイの数学的アプローチ
p>SDCC は次のことを示します。
sdcc が r7 レジスタを使用する理由がわかりません... Keil C51 は私に与えます: KeilがR2レジスタも使用しない理由がわかりません...セマジの組合アプローチ
p>SDCCは私に与えます
Keil C51 は私に与えます: これは、ポインターのトリックに非常に適しています。ただし、このアプローチでは、共用体を格納するためにさらに 2 バイトのメモリが必要になります。他に明るいアイデアを持っている人はいますか?;)
そして、どちらの方法がより効率的か誰にも教えてもらえますか?
興味のある方のために、テストケースは次のとおりです。
}
c - ポートを 8051 で入力するように設定するのに助けが必要です
接続は次のとおりです。マイクロコントローラー8051 philipsのポート2_0ピンへの閉回路または開回路出力ラインに応じて、0または5vを生成する赤外線センサー回路。常に続きます。ここに私のコードがあります(keil cで)、P 2_0を入力として適切に構成していないと思います
編集:私が使用していた8086プロセッサに障害があったため、問題に直面していました。プログラミング時にいくつかのスペアを取得するために、これを試している人にお勧めします。
c - Cortex-M3(STM32)のRAMから関数を実行するにはどうすればよいですか?
Cortex-M3プロセッサ(STM32)のRAMから関数を実行しようとしています。この関数は内部フラッシュを消去して再書き込みするので、私は間違いなくRAMにいる必要がありますが、どうすればよいですか?
私が試したことはこれです:memcpyを使用してRAM内のバイト配列に関数をコピーし(正しく整列されることを確認します)、バイト配列を指すように関数ポインターを設定してから、関数(ポインター)を呼び出します。
これはおそらく10命令で正常に機能しますが(デバッガーで実行を追跡できます)、バスエラーが発生し、プロセッサーがリセットされます。バスエラーはループの2番目のパスで発生するため、コードは正常である必要があります(最初のパスで機能するため)。RAMアクセスが速いと、バスのタイミングがなんらかの形で台無しになると思います...
とにかく、これを行う正しい方法はありますか?関数をRAMに自動的に配置するスキャッターファイルはどのように見えますか(私はCortex-M3にKeil uVisionを使用しています)?
編集:詳細:ツールチェーン:RealView MDK-ARM V 4.10コンパイラ:Armcc v4.0.0.728アセンブラ:Armasm v4.0.0.728リンカー:ArmLink v4.0.0.728プロセッサ:STM32F103ZE
リセットが発生すると、IMPRECISERRビットがバス障害レジスタに設定されます。
embedded - Keil RealView MDK-ARM ツールチェーンを取得して、メモリ内のある領域で実行する領域をリンクし、それを別の領域に格納するにはどうすればよいですか?
フラッシュメモリを更新するプログラムを書いています。フラッシュを消去/書き込みしている間、RAMから実行したいと思います。理想的には、コードをフラッシュに保存されている実行領域にリンクし、起動時にリンク先の RAM の場所にコピーします。
通常生成された C/C++ 初期化コードを含めないので、関数を __ram としてタグ付けすることはできません。
上記を実行できれば、デバッガーのシンボルは RAM にコピーされたコードに関連し、通常どおりデバッグを行うことができます。
OVERLAY/RELOC に沿った何かが役立つかもしれないと考えていますが、よくわかりません。
ありがとう、
c - メモリ内の特定の絶対アドレスに変数を配置する方法 (GCC を使用)
RealView ARM C コンパイラは、 variable 属性を使用して、特定のメモリ アドレスに変数を配置することをサポートat(address)
しています。
GCC には同様の変数属性がありますか?
debugging - 8051シリアルデバッグモニター
jtag / bdm機能を備えていない8051(Cypress FX2LP)を使用しています。通常、このプロジェクトの開発者は、デバッグにアドホックシリアルprintfsを使用しています。KeilのMon51、Isd51、IARの汎用ROMモニターなどのシリアルデバッグモニターのオプションを検討しています。
コードRAMに書き込むために(ソフトウェアブレークポイントを設定するために)、このデバッグモニターを変更/構成する必要があります。ほとんどの8051デバッグモニターは、ハーバードアーキテクチャまたはバンク切り替えをサポートするためにそのような変更の機能を提供していると思います。
8051または同様のプロセッサ用のシリアルデバッガに関する推奨事項はありますか?
ハーバードコードのRAMやフラッシュなどに書き込むために変更する必要がありましたか?
embedded - 実行時にヒープにメモリを追加する方法は?
Keil の ARM-MDK 4.11 を使用しています。起動時にのみ使用される静的に割り当てられたメモリ ブロックがあります。スケジューラーが初期化される前に使用され、RL-RTX がヒープ管理を制御する方法が原因で、動的に割り当てることができません (そうしないと、スケジューラーの開始後の後続の割り当てによってハード フォールトが発生します)。
スケジューラが初期化された後、この静的ブロックを空きブロックとしてシステム ヒープに追加したいと考えています。__Heap_ProvideMemory()が答えを提供するように思われます。これは、初期ヒープを作成するために初期化中に呼び出されます。ただし、それにはヒープ記述子アドレスの知識が必要であり、それを取得するための文書化された方法は見つかりません。
何か案は?
これについて ARM/Keil にサポート リクエストを提出しましたが、ARM/Keil は、なぜ私がこれを行う必要があるのかについて質問し、代替ソリューションを提供することに関心があります。私は代替案をよく知っていますが、この場合、これが実行できれば、それが最もクリーンなソリューションになります。
c++ - ファームウェアで使用されているフラッシュとRAMのサイズを確認するにはどうすればよいですか?
ファームウェアで使用されているフラッシュ(ROM)とRAMのサイズを確認するにはどうすればよいですか?ファームウェアはC++を使用して実装されています。また、Keilmicrovision4もあります。ROMとRAMのサイズを見つけるのに役立ちますか?
または、ファームウェアのMAP(.M51)ファイルを調べてメモリサイズを見つける必要がありますか?
または、16進ファイル(.hex)ファイルのサイズを伝えるだけでROMのサイズを見つけることができますか?