質問: IMU.begin(); if (status < 0) { Serial.println("IMU initialization unsuccessful"); Serial.println("Check IMU wiring or try cycling power"); Serial.print("Status: "); Serial.println(status); while(1) {} } xTaskCreate( task_2, (const portCHAR *)"task2",//A name just for humans 128,//Stack size NULL, 1,//priority NULL); xTaskCreate( task_1, (const portCHAR *)"task1",//A name just for humans 128,//Stack size NULL, 1,//priority NULL); } void loop() { } ``` 問題は、2つのタスクが定義されていると、プログラムが自動的に再起動されることです。しかし `task_1` をコメントアウトすると、プログラムは正常に動作します。 `xTaskCreate` の結果値は正しいです。 私は問題がスタックかヒープサイズが小さすぎるかもしれないと思います、しかし私はスタックとヒープサイズを増やしました、そしてそれはまだうまくいきません。 誰が問題がどこから来たのかを教えてもらえますか
回答: この問題に遭遇したとき、それは通常私の割り込みベクタが適切なハンドラを指していなかったことです。そのため、例えばRTOSがコンテキストの切り替えを行う必要があるとき、それはla-la landに飛び降りました。タスクを削除するとライブラリコールを実行できますが、同じように失敗すると言うので、ハンドラが正しく設定されていない可能性があります。 The FreeRTOS website has an FAQ about getting new projects to run that I would suggest reading through to help troubleshoot this kind of problem: You might also look at some of the other AVR examples included with FreeRTOS to see how they have interrupts setup: