pmem example code incorrect
Opened this issue · 3 comments
martin2250 commented
I think there is an error in the pmem example for MapAsPOD.
package main
import (
"log"
"periph.io/x/host/v3/pmem"
)
func main() {
// Let's say the CPU has 4 x 32 bits memory mapped registers at the address
// 0xDEADBEEF.
var reg *[4]uint32
if err := pmem.MapAsPOD(0xDEADBEAF, reg); err != nil {
log.Fatal(err)
}
// reg now points to physical memory.
}
It only works when I add a referencing operator to the function call, like so: pmem.MapAsPOD(0xDEADBEAF, ®)
, so this code works for me:
var reg *[SMC_MEM_LEN / 2]uint16
if err := pmem.MapAsPOD(SMC_MEM_START, ®); err != nil {
Otherwise, I get an error during runtime: pmem: require Ptr to Ptr, got invalid
(or got slice
/got array
).
In case this is relevant, I'm compiling for an AT91SAM9G45 with Linux 3.0.0.
maruel commented
Small note; "periph.io/x/host/v3/pmem"
martin2250 commented
right, I updated the code snippet.
kaisawind commented
same.
Linux 5.4.164-1-MANJARO #1 SMP PREEMPT Wed Dec 8 09:53:07 UTC 2021 x86_64 GNU/Linux