繁体   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