問題タブ [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.
c - keil cで配列を渡すと、C182、c235の警告が表示されます(異なるオブジェクトへのポインター、パラメーター2の異なるタイプ)
やあ、
Keilでは、上記のコードはfooの呼び出しに対して警告C182を提供し、fooの定義で警告c235を提供します。ただし、VC++では正常に機能するようです。なぜ、どのように解決するかについてのアイデアはありますか?
ありがとう!
size - Keilでより多くのヒープを提供する
私はMCB2300(LPC2378プロセッサを搭載)に取り組んでおり、keiluVision4を使用しています。私のプログラムでは、malloc()関数を使用して動的メモリを作成しています。すべての動的コンテンツはヒープに格納されるため、必要なヒープサイズが割り当てられていることを確認する必要があります。スタートアップファイル(LPC2300.s)のヒープのデフォルト値は0x00000800です。私のアプリケーションでは、画像(bmp形式)を読み取り、ピクセル値をマトリックスに格納しています。マトリックスは、入力画像のサイズに対して動的に作成されます。スタートアップファイルに設定できる最大ヒープ値は0x000072FFです。このヒープの値については、44x33の画像を正常に読み取ることができました。このサイズを超えると、メモリは割り当てられません。少なくとも100x100のサイズの画像を読み取る必要があります。使用可能なRAMは32Kです。
これらは、コードをコンパイルした後の出力値です
プログラムサイズ:コード= 30664RO-data = 1220 RW-data = 132 ZI-data = 37628
追加のヒープを提供する方法は?
LPC2378用に用意されているSD/MMCカードや外部メモリバンクにヒープメモリを保存することはできますか?この問題を解決するのを手伝ってください
embedded - 組み込みシステムでの最大スタック使用量を決定する方法は?
Keil コンパイラに「--callgraph」オプションを指定すると、正確な「最大スタック使用量」が静的に計算されます。
残念ながら、今日、「スタック情報のない関数」のリストとともに、「最大スタック使用量 = 284 バイト + 不明 (スタックサイズのない関数...)」というメッセージが表示されます。
Nigel Jones は、組み込みシステムでは再帰は本当に悪い考えだと言っています ( "Computing your stack size" 2009)。そのため、このコードで相互に再帰的な関数を作成しないように注意しました。
また、どの割り込みハンドラーも、割り込みからの最後の復帰命令まで割り込みを再度有効にしないようにしているので、再入可能な割り込みハンドラーについて心配する必要はありません。
再帰または再入可能な割り込みハンドラーがなければ、スタックの最大使用量を静的に決定できるはずです。(したがって、最大スタック使用量を決定する方法に対する回答のほとんどは 適用されません)。私の理解では、「--callgraph」オプションを処理するソフトウェアは、優先度の高い割り込みによって中断されていない場合は各割り込みハンドラーの最大スタック深度を最初に検出し、優先度が高い場合は main() 関数の最大スタック深度を検出します。中断されません。次に、それらをすべて加算して、合計 (最悪の場合) の最大スタック深度を見つけます。これは、main() バックグラウンド タスクが優先度の最も低い割り込みによって中断されたときにその最大深度にあり、その割り込みが次に優先度の低い割り込みによって中断されたときに最大深度にある場合などに発生します。
--callgraph を処理するソフトウェアが、「スタック情報のない関数」リストの小さなアセンブリ言語関数について混乱していると思われます。--callgraphのドキュメントは、使用するスタックの量を手動で計算する (または控えめに見積もる) 必要があることを暗示しているようです。それらは非常に短いため、単純にする必要があります。コードがスタックをどのように使用するかを記述します。」それらの 1 つは、main() にジャンプする前にスタックをゼロにリセットする初期スタートアップ コードです。したがって、実際には、これはゼロ スタックを消費します。もう 1 つは、電源を再投入するまで無限ループに閉じ込められる "Fault" 割り込みハンドラーです。
Keil uVision V4.20.03.0 を使用して、LM3S1968 ARM Cortex-M3 のコードをコンパイルしています。
では、「フレーム ディレクティブ」を使用して、「--callgraph」を処理するソフトウェアに、これらの関数が使用するスタックの量を伝えるにはどうすればよいでしょうか? または、最大スタック使用量を決定するためのより良い方法はありますか?
(gccコンパイラを対象としたほぼ同じ質問については、gccを使用した組み込みシステムで最大スタック使用量を決定する方法を参照してください。)
windows - 組み込みプラットフォームとWindowsプラットフォームの両方で同じコードを使用する可能性
Windowsマシンで実行されているVBAで記述されたプログラムがあります。
STR9x uP で実行されているKeilIDEとコンパイラを 使用して、ANSICで記述された非常によく似たプログラムがあります。
私たちの計画は、 C#を使用して.NETでVBAコードを書き直すことでした。
両方のシステムで使用されるC++ で共有コードを作成することの実現可能性は何ですか?明らかに、.NET Frameworkは立ち入り禁止ですが、それはそれほど問題ではありません。具体的には、コンパイルプロセスがどれほど手間がかかると思いますか。
これは一種の理論的な質問です、私は知っていますが、どんな考えにも感謝します。
c - 8051マイクロコントローラーのポート1を入力として構成します
温度を変えることができる非常にシンプルなアプリケーションを書いています。温度はLED(BCD形式)を使用して表示されます
私はKeilC51で次のコードを書きました。
次に、これに準拠してIntel hexファイルを取得し、Edsimを使用してシミュレートしようとしました。
Cコードによると、prog = 1のとき、およびup(p1.0)またはdown(p1.1)のいずれかが押されたときに温度が変化するはずですが、シミュレーションでは、select(p1.7)とup/の両方の場合にのみ変化します。ダウンが押されました!
なぜこうなった?
variables - STM32: 初期化されていない変数?
STM32 開発用の uvision IDE を使用して、いくつかのタイマー変数を起動時に初期化しないようにしたいと考えています。私が試してみました:
と
しかし、何も機能していないようです。他の場所からのヒントに従って、オプション/ターゲット/IRAM1 で NoInit を追加でチェックしました。それでも、変数はリセット後にゼロに設定されます。
誰でも助けることができますか?
sockets - RL-ARMライブラリのBSDソケットAPI
ここにRL-ARMライブラリ内のBSDソケットAPIのリストがあります
http://www.keil.com/support/man/docs/rlarm/rlarm_tn_bsd_funcs.htm
それはそのようなメモを持っています:
■BSDインターフェース関数は、標準のバークレーソケット通信インターフェースを実装します。これらのAPIは、BSDAPIの完全な実装ではありません。
このメモはどういう意味ですか?リストの一部のルーチンが完全に機能していないということですか?または何か他のもの?
embedded - ソフトウェア割り込み、Keil MCB1700 評価ボード
MCB1700 評価ボード用のプログラムを開発しようとしています。RTOS RTX なしでソフトウェア割り込み (SWI) を使用することはできますか?
embedded - Keil MCB1700 評価ボードのプログラムを実装する最良の方法は何ですか?
MCB1700評価ボードのプログラムを開発したい。PCのクライアントソフトがHDDから画像を読み込みます。次に、ソケット (イーサネット) を介して画像を MCB1700 評価ボードに送信します。MCB1700 のサーバーは、ソケット接続を介して PC から画像を受信し、LCD に表示します。
また、サーバーは次のタスクを実行する必要があります。
- 画像を USB スティックに保存するには;
- USB スティックから画像を読み取り、ソケットを介してクライアントに送信します。
- CAN経由で情報を送受信するには
- COM ロギング。
- 等
ソケット接続は、CMSIS および RL-ARM ライブラリを使用して実装できます。
しかし、私が理解している限り、どちらの場合も、ソフトウェアは着信 TCP 接続をリッスンし、ネットワークのイベントを無限ループで処理する必要があります。Keil のすべての例は、そのような原則に基づいています。
私はいつも、組み込みプログラミングで無限ループを使用するのは悪い方法だと思っていました。しかもこんな面白い発言を読んだ
「RTOS なしで (1 つまたは複数のタスクをループで実行することにより) リアルタイム プログラムを作成することは確かに可能です」
http://www.keil.com/support/man/docs/rlarm/rlarm_ar_artxarm.htm それで、私が理解したように、多くのタスクをループで実行するのは通常の習慣ですか?
while (1) { task1(); task2(); ... taskN(); }
全てのイベントを割り込みで処理した方が良いと思います。
CMSIS および RL-ARM ライブラリのソケット接続を使用し、割り込みを処理することによってすべてのソフトウェアを整理することは可能ですか? 私のサーバー (MCB1700 上) は、多くのタスクを実行する必要があります。ソフトウェアで RTOS RTX を使用する必要があると思います。そうじゃない?RTX なしでソフトウェアを実装した方が良いですか?
embedded - STM32F205ZG をデバッグしようとすると、「Cortex-M デバイスを停止できませんでした」というエラーが表示される
µVision4 と ULINK2 を使用して STM32F205ZG でデバッガを実行できません。「Cortex-M デバイスを停止できませんでした。JTAG ケーブルを確認してください。」というエラー メッセージが表示され続けます。SWポートを使用しています。これについての助けをいただければ幸いです。