如何在c中打印寄存器内容

问题描述 投票:0回答:2

我正在尝试调试我为 UART 编写的驱动程序,该驱动程序从串行控制台读取

chars
字符串,直到用户按“l”。下面该函数称为“getstring()”。

我想检查状态寄存器的内容以查看设置了哪些位。状态寄存器偏移 2。我需要在调用“getstring()”时打印它。我可以使用

printf()

这是 UART 的寄存器映射。

当我调用如何在c中打印出寄存器的内容?

#define UART 0x00080000
void getchar(char *str) {

volatile uint32_t *uart = (volatile uint32_t*) UART;

char c = 0;
do
{
    while ((uart[2] & (1<<7)) == 0);
    c = uart[0];
    *str++ = c;
}
while (c!='l');

}

`

c pointers cpu-registers
2个回答
1
投票

要将二进制转换为由 1 和 0 组成的 ASCII 字符串,只需执行以下操作:

uint32_t local = *uart;
for(size_t i=0; i<32; i++)
{
  *str = (local & (1u << 31-i) ? '1' : '0';
  str++;
}
*str = '\0';

0
投票
#include <stdio.h>
#include <stdint.h>
#include <x86intrin.h> // Include for __rdtscp

 int get_value()
 {
      __asm__ (   "movl $20, %eax;"); 
 } 
 
 int main() 
 {
      printf("%d\n",get_value()); //read the value of eax register
                                  // that we store is 20 in the get value function
      return 0;
 }
© www.soinside.com 2019 - 2024. All rights reserved.