あなたのコードが複雑な場合は、コンパイラが突然動かなくなり、誤ってコンパイルして予測できない動作が発生することがあります。コードが成長すると何度も起こります...そのような場合、通常はコードの数行を入れ替えることができます。問題は、そのことを行う場所を見つけることです。また、プログラムをいくつかのファイルに分割して別々にobjにコンパイルし、最後のファイルにリンクすることもできます...
私は長い時間をかけて戦ったものを思い出します。あなたがclass/struct/template
を使用している場合は、これを試してみてください。
は、それが(旧ターボのためにこれをテストしていない)を助けるかもしれません。
I/Oへの埋め込みはどういう意味ですか?あなたはsysドライバファイルを作成していますか?その場合は、CPUレジスタを煩わせることがないようにする必要があります。それは多くの問題は、あなたがISR handlersを書くなら、あなたは正しくそれから、コンパイラが戻るようinterrupt
キーワードを使用する必要が
void some_function_or_whatever()
{
asm { pusha };
// here your code
printf("123");
asm { popa };
}
を使用しようとする恐れがあります。実際のコードなし
及びまたはMCVEは、任意の詳細を指すように難しいです...
あなたはBDS2006または新しいバージョン(単にデバッグのために実際に機能していない)にポートこれを、それはより慎重にあなたのコードを分析することができる場合と、 (私はBCBシリーズからBDS2006に移植したときに隠された)多くの隠れたエラーを検出することができます。また、実行時にそのようなエラーを見つけるのに理想的なコンパイラにはCodeGuardオプションがあります(しかし、私はあなたがエミュレートされたDOSに存在するI/O hwなしであなたのlibを走らせることができない恐れがあります)。
ありがとうございました。正直言って、I/Oプログラムの低レベルのものは分かりませんが、主な機能は のようになります。 'void main(){ init(); myInit(); //これはインポートされたfuncです。 RestoreCom(1); } ' これは、ソースファイルを追加する瞬間、コントローラでSRAMが使用されていることです(コードが使用されていなくても、coreleft()でチェックします)。ある時点でSRAMが使い果たされ、プログラムがクラッシュします。 –
@IvanBoikovそれでは、メモリリークの可能性があります。あるいは、あまりにも多くの静的変数(または定数)を使用して実際のメモリサイズに合わせてヒープ/スタック制限を下げようとしました。ランタイムの前にあなたが持っているものを超える... – Spektre