ザイリンクス SDK 2016.1 freeRTOS823_xlinx OS プラットフォーム
私のコードは、いくつかの freeRTOS 要素を導入するまでは正常に動作しているように見えました。私のコードの一般的な機能は次のとおりです。
Interrupt サブルーチンでは、Zynq SoC の IP レジスタから読み取られる変数focusPositionに値を割り当てます。
// separate file u32 focusPosition=0; static void ISR(void *CallbackRef) { focusPosition = XRb_focus_Get_position_o(CallbackRef); }
次に、メイン関数で値をコンソールに出力します。
// separate file extern u32 focusPosition; main{ ... while(1){ sleep(1); xil_printf("%d\n",focusPosition); } }
コードは正しい値を出力しますが、コードに xTaskCreate() xEventGroupCreate() などの追加の行を実装しようとすると、何かがすべてのメモリを台無しにし、出力される値が一定のままになり、正しくありません。
変数とは関係のない単純なコードの追加が、その変数にどのように影響するのでしょうか? 私の知る限り、xTaskCreate() と xEventGroupCreate() はヒープ上に作成されます。Xil_DCacheDisable() が役立つかどうかを調べるのにうんざりしましたが、違います。何か案は?focusPosition 変数は適切に定義/宣言されていますか?