請問可能造成 TRAPS_ADDRESS_ERR 的原因?

作者 sarsgg444 於 2018年11月23日 17:00:24
各位先進好

小弟最近使用 dsPIC33EV64GM006 開發時

因為需求所以需要固定時間從初始化重新執行內部程式

在初始化時

除了硬體周邊的初始化時

我還會將使用的 function 的 pointer 指到某些 指標變數

使用時直接 call 指標變數

像是


void function_a
(int in)
{
   ...
}

void (*function_ptr)(int in);
function_ptr = function_a;

function_ptr(num_a);



使用 Debug 測試時

第一次運作整個流程都沒問題

但一要求初始化並回到 function_ptr = function_a; 時

就會觸發 TRAPS_halt_on_error,值是 TRAPS_ADDRESS_ERR

1.原本認為是 function_ptr 指到奇怪的地方去,但檢查過並不是

2.跑到 function_ptr = function_a; 時,如果是step by step 執行下去,不會觸發 TRAPS_halt_on_error。但如果 run 不設中斷點,就會觸發 TRAPS_halt_on_error

3.若不用 Debug 模式跑,狀況會變成直接 reset

本來想提供原始碼,但考慮到程式過於複雜

因此才以簡述的方式敘述,還請見諒

謝謝

ps 網路上有找到篇類似的 https://phalox.be/wp/software/how-to-s ... address-errors-on-pic24f/

但按照上面進到 TRAPS_halt_on_error 後,將 INTCON1 設為 0X00 繼續執行

也不會跳至發生 TRAPS_halt_on_error 中斷前的位置

就只是一直卡在 TRAPS_error_code = code;

來自: http://www.microchip.com.tw/newbb/viewtopic.php?forum=2&topic_id=22470&post_id=78916