簡體   English   中英

修改PIC18中的操作碼

[英]modify opcode in PIC18

我用c語言編寫了一個程序。在這個程序中,我可以通過指向特定地址的指針進行訪問,並且操作碼可以打印它。我已經使用這種方法編寫了自修改代碼。我在8086中做到了建築。 我希望它在微控制器PIC18F2550上運行。我正在使用Mplab IDE 8.92和Mplab C18 3.46。我以前從未在微控制器上做到過。 與8086不同,這里我無法訪問操作碼!指針是操作碼的地址。 但是,返回值為0X00!這是一個代碼示例

#include <stdio.h>
#include <stdlib.h>
void fsub(void){
int a,b;
a=3;b=5;
a-=b;
printf("a-b=%d\n",a);   
}
void fadd(void)
{
int a,b;
 a=3;b=5;
 a+=b;
 printf("a+b=%d\n",a);
 }
 void retadd(void);
 void main()
 {
  int i;
   unsigned char *instSub,*instAdd;
  unsigned char instructionSub[2];
  void *retadd_addr=(void*)retadd;
  retadd();
  instSub=(unsigned char*)retadd_addr;
  instAdd=(unsigned char*)retadd_addr+2;
  printf("%x\n", *instSub);
  printf("%x\n", *instAdd);
  while(1);
  }
  void retadd(void)
  {
   fsub();
    fadd();
   }

![來自mplab的圖片]此圖片顯示的是值1

我認為您無法執行此操作,原因如下,我在以下詳細介紹了兩個原因:

PIC控制器通常將程序存儲在閃存中 可以在運行時對閃存進行重新編程,但這並不是那么容易,通常您不能寫一個單詞,而必須寫一個完整的“頁面”(或“扇區”之類的東西,即大約64到512的集合)個字節左右)。 這使得在您嘗試的級別上修改代碼非常不切實際。

此外,由於使用哈佛架構的控制器,程序存儲器通常不可直接尋址。 這意味着您甚至無法擁有指向指令的常規指針,因為數據和代碼位於不同的地址空間中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM