1

lpc1788 の MPU を構成して、4GB のスペース全体を実行可能領域として取得しようとしています。以下は、これまでに作成したコードで、keil uVision 4 デバッガーで目的の結果を確認できました。lpc1788 のアセンブリ言語プログラミングの経験はありません。そして、それでも私は結果を得ています。しかし、私が知らないのは、以下のコードの最後の命令の実行後に hardFault Handler で実行が行われるのが正常かどうかです。それとも私はいくつかの間違いを犯しましたか?どんな提案もとても役に立ちます。

#define MPU_CTRL  0xE000ED94    

__asm int mpu_init(void);  

int main()  
{  
    mpu_init();  
}  

_asm int mpu_init(void)  
{  
  LDR R0, =MPU_CTRL;  
  /* Disable MPU */  
  MOV R1, #0x4;  
  STR R1, [R0, #0x0];  
  MOV R2, #0x0;  
  STR R2, [R0, #0x4];   
  MOV R3, #0x030F;  
  LSL R6, R3, #16;  
  MOV R4, #0xFF3F;  
  STR R6, [R0, #0xC];  
  STRH R4, [R0, #0XC]  
  //MOV R5, #0x0;  
  //STR R5, [R0, #0x8];  
  /* Enable MPU */  
  MOV R1, #0x7;  
  STR R1, [R0, #0x0];    
}  
4

1 に答える 1

1

return 命令 ( ) を忘れたBX LRので、関数の後にたまたまデータがあったとしても、実行が続行されます。

実際には、C を使用して MPU を初期化することをお勧めします。間違いを犯す可能性は低く、CMSIS ヘッダーを使用するのは簡単です。

于 2013-05-28T14:16:30.127 に答える