こんにちは。KEA128マイクロコントローラの開発中に問題が発生しました。Jlink経由でプログラムをデバッグする際には全く問題ないのですが、ブートローダー経由でプログラムをダウンロードするとメインプログラムがフリーズしてしまいます。
以下のプログラム(デューティサイクルの設定)をブートローダー経由でダウンロードした後、プログラムがフリーズしてしまいます。関数の内容をコメントアウトすると、すべて正常に動作します。この場合、Jlinkプログラミングに問題はありません。この問題のせいで、どこから始めればいいのか全く分かりません。解決策を教えていただけると幸いです。
void heater_output(uint32 duty)
{
if(heater_switch==on)
{
ftm_pwm_duty(ftm0,ftm_ch0,duty);//设置占空比
}
else
{
heater_pwm_duty=0;
ftm_pwm_duty(ftm0,ftm_ch0,0);
}
}
これは私のジャンププログラムです
void bootup_application(uint32_t appEntry, uint32_t appStack)
{
static void (*jump_to_application)(void);
static uint32_t stack_pointer;
//shutdown_drivers();
jump_to_application = (void (*)(void))appEntry;//跳转APP入口地址
stack_pointer = appStack; //堆栈指针
// SCB->VTOR = appEntry;
__set_MSP(appStack); //设置主程序堆栈指针
__set_PSP(appStack); //设置进程堆栈指针
jump_to_application(); //跳转
}
Hi,
車載グレードチップであるS32Kシリーズを検討することをお勧めします。
先生が hardFault を入力した場合は、スタック割り当てが小さすぎないかどうかを確認してください。
BR
XiangJun Rong
Hi,
次に、appEntry に 1 を追加します。
BR
XiangJun Rong
Hi,
次のコードを使用してください:
//shutdown_drivers();
jump_to_application = (void (*)(void))appEntry;//跳转APP入口地址
jump_to_application =jump_to_application +1;
stack_pointer = appStack; //堆栈指针
// SCB->VTOR = appEntry;
__set_MSP(appStack); //设置主程序堆栈指针
__set_PSP(appStack); //设置进程堆栈指针
jump_to_application(); //跳转
親指の命令セットなので、試してみて動作するか確認してください。
BR
XiangJunRong