Dear Bertho,

Thank you for your fast response. You were right, this (volatile) solved
the problem.
The same program now works fine :)

So much time wasted for such a stupid mistake... Thank you! :)
Regards,
Klemen



On Thu, 20 Nov 2025 at 13:26, Bertho Stultiens <[email protected]> wrote:

> On 11/20/25 12:51 PM, klemen dovrtel wrote:
> >    *(rtapi_u32*)(pci_device.ptr_bar2 + 0x0000) = 0x11111111; nanosleep
> > (&ts_dtLong, NULL);
> >    *(rtapi_u32*)(pci_device.ptr_bar2 + 0x0004) = 0x22222222;
>
> Using '*(rtapi_u32 *)(ptr + 0) = xyz' several times may not result in
> what you expect. The compiler sees multiple references to the same
> address(es) and may opt to cache the result(s). These addresses are
> actually volatile targets and must be declared as such.
>
>
> Maybe you should try:
> volatile rtapi_u32 *addr0 = (volatile rtapi_u32 *)(pci_device.ptr_bar2 +
> 0x0000);
> volatile rtapi_u32 *addr4 = (volatile rtapi_u32 *)(pci_device.ptr_bar2 +
> 0x0004);
>
> // Write
> *addr0 = 0x11111111;
> *addr4 = 0x22222222;
>
> // Read
> rtapi_print_msg(RTAPI_MSG_INFO, "rd offs 0: %08x.\n", *addr0);
> rtapi_print_msg(RTAPI_MSG_INFO, "rd offs 4: %08x.\n", *addr4);
>
> // Write
> *addr0 = 0x33333333;
> *addr4 = 0x44444444;
>
> // Read
> rtapi_print_msg(RTAPI_MSG_INFO, "rd offs 0: %08x.\n", *addr0);
> rtapi_print_msg(RTAPI_MSG_INFO, "rd offs 4: %08x.\n", *addr4);
>
> ... etc ...
>
>
> --
> Greetings Bertho
>
> (disclaimers are disclaimed)
>
>
>
> _______________________________________________
> Emc-developers mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/emc-developers
>

_______________________________________________
Emc-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/emc-developers

Reply via email to