Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7445
  • 博文数量: 3
  • 博客积分: 45
  • 博客等级: 民兵
  • 技术积分: 40
  • 用 户 组: 普通用户
  • 注册时间: 2013-01-06 13:36
文章分类
文章存档

2014年(2)

2013年(1)

我的朋友

分类: IT业界

2013-01-06 17:02:17


点击(此处)折叠或打开

您没有插入代码!


点击(此处)折叠或打开

  1. int run(char* pszParam)
  2. {
  3.     unsigned int dwAddr;
  4.     int ret;
  5.     if (etHex(pszParam, &dwAddr) < 0)
  6.     {
  7.         printf("Address error\n");
  8.         return -1;
  9.     }
  10.     printf("Run from:0x%08x (Y/N):", dwAddr);
  11.     ret = uart_getc();
  12.     printf("\n");
  13.     if (ret != 'Y')
  14.     {
  15.         return 0;
  16.     }
  17.         
  18.     __asm__ __volatile__("blx %0"::"r"(dwAddr));
  19.     
  20.     return 0;
  21. }


点击(此处)折叠或打开

  1. int GetHex(char* pszStr, unsigned int* pdwValue)
  2. {
  3.     char* p = pszStr;
  4.     unsigned int dwValue = 0;
  5.     char c;
  6.     char bGet;

  7.     while(*p == ' ') p++;
  8.     if ((*p == '0') && (*(p+1) == 'x')) p += 2;

  9.     bGet = FALSE;
  10.     while((c=*p) != '\0')
  11.     {
  12.         if (c >= '0' && c <= '9')
  13.         {
  14.             dwValue <<= 4;
  15.             dwValue += c-'0';
  16.             bGet = TRUE;
  17.         }
  18.         else if (c >= 'a' && c <= 'f')
  19.         {
  20.             dwValue <<= 4;
  21.             dwValue += 0x0a + (c-'a');
  22.             bGet = TRUE;
  23.         }
  24.         else if (c >= 'A' && c <= 'F')
  25.         {
  26.             dwValue <<= 4;
  27.             dwValue += 0x0a + (c-'A');
  28.             bGet = TRUE;
  29.         }
  30.         else
  31.         {
  32.             //printf("c=%d\n", c);
  33.             break;
  34.         }
  35.         p++;
  36.     }
  37.     *pdwValue = dwValue;
  38.     
  39.     if (!bGet)
  40.     {
  41.         //printf("not get\n");
  42.         return -1;
  43.     }
  44.     //printf("Hex:0x%08x\n", dwValue);
  45.     return p-pszStr;
  46. }

 
一,ARM指令BLX,利用该指令可以实现具体执行流的跳转,同时切换ARM的状态ARM->THUMB或者THUMB->ARM,取决于执行该指令之前ARM所处的状态。
二 应用实例,编写一盒小应用程序,让处理器根据你指定的地址来运行,
思考一下,其实很简单,在汇编里面其实就是利用跳转指令就可以实现:B, BX, BL等。
这里有完善的代码,需要的LOOK一下。
主要有两个函数:run机器辅助函数GetHex。
执行方法:run addr(H)ok.
阅读(3932) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~