【发布时间】:2021-07-27 01:46:24
【问题描述】:
我无法读取 Raspberry Pi 4 系统计时器。 我的理解是 LO 32 位应该在地址 0x7e003004。 我的读数总是返回-1。 以下是我的尝试:
int fd;
unsigned char* start;
uint32_t* t4lo;
fd = open("/dev/mem", O_RDONLY);
if (fd == -1)
{
perror("open /dev/mem");
exit(1);
}
start = (unsigned char*)mmap(0, getpagesize(), PROT_READ, MAP_SHARED,
fd, 0x7e003000);
t4lo = (unsigned int *)(start + 0x04);
...
uint32_t Rpi::readTimer(void)
{
return *t4lo;
}
我应该检查 start 的值,但 gdb 告诉我这是合理的,所以我认为这不是问题。
(gdb) p t4lo
$4 = (uint32_t *) 0xb6f3a004
gdb 不允许我访问 *t4lo。有什么想法吗?
编辑:clock_gettime() 满足了我的需求,但我仍然很好奇。
【问题讨论】:
-
对于初学者,您可能希望它是
volatile。但这可能不是您的主要问题。 -
好收获。但你是对的,这并没有解决问题。
-
studica.com/blog/raspberry-pi-timer-embedded-environments 建议计时器可能改为
0x3f003004。 -
那篇文章说明它适用于 RPi 2 或 3。Model 4 有一个新的处理器,并且事情已经发生了变化。见raspberrypi.org/documentation/hardware/raspberrypi/bcm2711/…
标签: embedded-linux hardware raspberry-pi4