package controlcan
import "C"
cReceive := make([]C.struct__CAN_OBJ, 2500)
package usbcan
import "controlcan"
pReceive := make([]controlcan.CanObj, 2500)
unexpected fault address 0xffffffffffffffff
fatal error: fault
[signal 0xc0000005 code=0x0 addr=0xffffffffffffffff pc=0x41c65d]
goroutine 41 [running]:
runtime.throw(0xcc969a, 0x5)
/usr/local/go/src/runtime/panic.go:619 +0x88 fp=0xc0428ffb38 sp=0xc0428ffb18 pc=0x42d0b8
runtime.sigpanic()
/usr/local/go/src/runtime/signal_windows.go:170 +0x13a fp=0xc0428ffb68 sp=0xc0428ffb38 pc=0x43fcca
runtime.gcMarkRootPrepare()
/usr/local/go/src/runtime/mgcmark.go:72 +0x5d fp=0xc0428ffb70 sp=0xc0428ffb68 pc=0x41c65d
runtime.gcStart(0x0, 0x1, 0x0, 0x0)
/usr/local/go/src/runtime/mgc.go:1350 +0x30f fp=0xc0428ffba0 sp=0xc0428ffb70 pc=0x419b6f
runtime.mallocgc(0x10000, 0xc54660, 0xc0422ee001, 0xc0423ded60)
/usr/local/go/src/runtime/malloc.go:803 +0x448 fp=0xc0428ffc40 sp=0xc0428ffba0 pc=0x411c48
runtime.makeslice(0xc54660, 0x9c4, 0x9c4, 0xc04202ce00, 0xc04202c000, 0x411b23)
/usr/local/go/src/runtime/slice.go:61 +0x7e fp=0xc0428ffc70 sp=0xc0428ffc40 pc=0x43fffe
controlcan.Receive(0x4, 0x0, 0x0, 0xc04267e000, 0x9c4, 0x9c4, 0x64, 0x0, 0x0, 0x0)
/media/sf_GOPATH0/src/controlcan/controlcan.go:262 +0x75 fp=0xc0428ffd70 sp=0xc0428ffc70 pc=0xa0d795
posam/protocol/usbcan.(*Channel).receive(0xc04229d490)
/media/sf_GOPATH0/src/posam/protocol/usbcan/usbcan.go:469 +0x536 fp=0xc0428fffd8 sp=0xc0428ffd70 pc=0xa10926
runtime.goexit()
/usr/local/go/src/runtime/asm_amd64.s:2361 +0x1 fp=0xc0428fffe0 sp=0xc0428fffd8 pc=0x457531
created by posam/protocol/usbcan.(*Channel).Start
/media/sf_GOPATH0/src/posam/protocol/usbcan/usbcan.go:242 +0x3aa
--
You received this message because you are subscribed to the Google Groups "golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
typedef struct _VCI_CAN_OBJ{
UINT ID;
UINT TimeStamp;
BYTE TimeFlag;
BYTE SendType;
BYTE RemoteFlag;
BYTE ExternFlag;
BYTE DataLen;
BYTE Data[8];
BYTE Reserved[3];
}VCI_CAN_OBJ,*PVCI_CAN_OBJ;
type CanObj struct {
ID int
TimeStamp int
TimeFlag int
SendType byte
RemoteFlag byte
ExternFlag byte
DataLen byte
Data [8]byte
Reserved [3]byte
}
package usbcan
import "controlcan"
func (c *Channel) receive() {
ticker := time.NewTicker(100 * time.Millisecond)
defer ticker.Stop()
for _ = range ticker.C {
pReceive := make([]controlcan.CanObj, 2500) // unexpected fault address
count, err := controlcan.Receive(
c.DevType,
c.DevIndex,
c.CanIndex,
pReceive,
100,
)
// ...
func Receive(
devType int,
devIndex int,
canIndex int,
pReceive []CanObj,
waitTime int,
) (count int, err error) {
cReceive := make([]C.struct__VCI_CAN_OBJ, 2500) // unexpected fault address
cCount := C.VCI_Receive(
C.uint(devType),
C.uint(devIndex),
C.uint(canIndex),
(*C.struct__VCI_CAN_OBJ)(unsafe.Pointer(&cReceive)),
C.uint(FRAME_LENGTH_OF_RECEPTION),
C.int(waitTime),
)
gReceive := (*[1 << 30]C.struct__VCI_CAN_OBJ)(unsafe.Pointer(&cReceive))[:count:count]
// then convert elements in gReceive to pReceive
// ...
(*C.struct__VCI_CAN_OBJ)(unsafe.Pointer(&cReceive[0]))
func Receive( devType int, devIndex int, canIndex int, pReceive []CanObj, waitTime int,) (count int, err error) {
cReceive := C.makeCanObjArray() defer C.freeCanObjArray(cReceive)
cCount := C.VCI_Receive( C.uint(devType), C.uint(devIndex), C.uint(canIndex), (*C.struct__VCI_CAN_OBJ)(unsafe.Pointer(&cReceive)), C.uint(FRAME_LENGTH_OF_RECEPTION), C.int(waitTime), )
count = int(cCount) switch count { case -1: return count, fmt.Errorf("failed to receive data from invalid device") case 0: return count, nil
} gReceive := (*[1 << 30]C.struct__VCI_CAN_OBJ)(unsafe.Pointer(&cReceive))[:count:count]
for i := 0; i < count; i++ { v := gReceive[i] var data [8]byte for j, d := range v.Data { data[j] = byte(d) } var reserved [3]byte for k, r := range v.Reserved { reserved[k] = byte(r) } pReceive[i] = CanObj{ ID: int(v.ID), TimeStamp: int(v.TimeStamp), TimeFlag: int(v.TimeFlag), SendType: byte(v.SendType), RemoteFlag: byte(v.RemoteFlag), ExternFlag: byte(v.ExternFlag), DataLen: byte(v.DataLen), Data: data, Reserved: reserved, } } return count, err}
c
Receive := make([]C.struct__VCI_CAN_OBJ, 2500) // unexpected fault address