[技术问答]

如何从串口输入8个16进制数作为内部使用的地址?

[复制链接]
731|2
手机看帖
扫描二维码
随时随地手机跟帖
waiter|  楼主 | 2016-7-20 19:53 | 显示全部楼层 |阅读模式
本帖最后由 waiter 于 2016-7-20 20:25 编辑

我想通过UART输入8个数,作为内部访问Flash/SRAM的地址,先输入的作为地址的高位,比如输入的是:
123456CD,那么就是内部访问地址为 0x123456CD.
我写的代码是(在  UART_Loopback_demo 基础上改的):
for(i=0;i<8;i++){
  chrx = UART_GetChar(TERM_PORT);  // get 8 address
  adr = adr<<4 ;
  if ( (chrx>='0') & (chrx<='9')  )
      chrx -= '0' ;
  else if ( (chrx>='A') & (chrx<='F') )
      chrx = chrx - 'A' + 0xA;
  else if ( (chrx>='a') & (chrx<='f') )
      chrx = chrx - 'a' + 0xA;
  else
      err += 1;
  
  adr += chrx;
}
不知道有没有更好的方法?

还有一个问题,能不能做成用回车当作边界? 也就是回车前的8个字符作为地址。如果两个回车之间不足8个字符,就在高位填充0.这样该怎么写?
向各位大虾学习啊。

有了地址,就可以访问NV32内部的SRAM/Flash的值,直接读取即可:
        if(err==0) {                                                  
                 data=M32(adr);                                             
           printf("\n adr:0x%x = 0x%x \n ",adr,data);                 
                }                                                           
        else                                                         
                printf("\n:UART1>Read Register. Address Input is Invalid!");


地址落在0x0起的低段地址,就是直接读取FLASH的内容。

相关帖子

keaibukelian| | 2018-7-5 14:21 | 显示全部楼层
暂时没有想到更好的办法

使用特权

评论回复
renzheshengui| | 2018-7-7 15:50 | 显示全部楼层
楼主的这个办法应该已经可以解决问题了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

187

帖子

2

粉丝