<re_irc> <@firefrommoonlight:matrix.org> Too long without a warning
fabic has joined #rust-embedded
fabic has quit [Ping timeout: 240 seconds]
rardiol has quit [Ping timeout: 265 seconds]
<re_irc> <@dirbaio:matrix.org> when doing IPC to another core via shared memory, what should I use?
<re_irc> <@dirbaio:matrix.org> atomics, fence, compiler_fence?
<re_irc> <@dirbaio:matrix.org> for example, if I want to spin on a word, waiting for the other core to change it
fabic has joined #rust-embedded
<re_irc> <@adamgreig:matrix.org> If you use the hardware ipc primitives (hsem on stm32, fifos on rp?) you probably don't have to think about it too hard
<re_irc> <@adamgreig:matrix.org> Otherwise atomics still work
<re_irc> <@adamgreig:matrix.org> Fences won't prevent races but will ensure you pull fresh data
<re_irc> <@adamgreig:matrix.org> Volatile should do the same as the fence I guess. If you're just one side reading and one writing I expect any of atomics or fences or volatile should work?
<re_irc> <@dirbaio:matrix.org> it's a thingy that uses hardware ipc to "signal" the other side that there's new data ready, but the actual data is passed over shared memory...
<re_irc> <@dirbaio:matrix.org> so I guess
<re_irc> <@dirbaio:matrix.org> to send: write the data, do a full fence, then do the ipc reg write to send the signal
<re_irc> <@dirbaio:matrix.org> to receive: when receiving an ipc irq, do a full fence then read the data
<re_irc> <@dirbaio:matrix.org> does that look decent? 🤔
<re_irc> <@adamgreig:matrix.org> Assuming no caches are in the way, yea
<re_irc> <@dirbaio:matrix.org> hahaha.. no idea
<re_irc> <@adamgreig:matrix.org> Not generally by default
<re_irc> <@adamgreig:matrix.org> Wonder if you need volatile access or some kind of memory clobber or if the fence is enough to just read the shared memory...
<re_irc> <@adamgreig:matrix.org> Feels like fence should be ok
<re_irc> <@dirbaio:matrix.org> all the block diagrams show RAM connected directly to the AHB so I guess
<re_irc> <@dirbaio:matrix.org> only flash cache
<re_irc> <@adamgreig:matrix.org> which target?
<re_irc> <@adamgreig:matrix.org> dcache can be inside the core for cm7
<re_irc> <@dirbaio:matrix.org> nrf91, cm33
<re_irc> <@adamgreig:matrix.org> Ah dunno. If you're not turning on dcache it's probably not there and anyway would have already ruined your dma
<re_irc> <@dirbaio:matrix.org> yeah, DMA only does compiler fences lol
<re_irc> <@dirbaio:matrix.org> and it seems to work
<re_irc> <@dirbaio:matrix.org> 🤷
<re_irc> <@adamgreig:matrix.org> Yea, I feel like this shouldn't be different to reading a DMA buffer
<re_irc> <@dirbaio:matrix.org> just a mega-cursed DMA :P
emerent has quit [Ping timeout: 265 seconds]
emerent_ has joined #rust-embedded
emerent_ is now known as emerent
PyroPeter has quit [Ping timeout: 265 seconds]
PyroPeter has joined #rust-embedded
fabic has quit [Ping timeout: 240 seconds]
jackneilll has joined #rust-embedded
jackneillll has quit [Remote host closed the connection]
dcz_ has joined #rust-embedded
creich has joined #rust-embedded
<re_irc> <@jamesmunns:beeper.com> the regular `fence` call should insert a dmb, which would be all you need afaik
<re_irc> <@jamesmunns:beeper.com> e.g. https://doc.rust-lang.org/core/sync/atomic/fn.fence.html
<re_irc> <@jamesmunns:beeper.com> that is basically "compiler fence + dmb"
<re_irc> <@thejpster:matrix.org> Are you trying to talk to the other core without using libmodem?
rardiol has joined #rust-embedded
fabic has joined #rust-embedded
Foxyloxy has quit [Quit: Textual IRC Client: www.textualapp.com]
Foxyloxy has joined #rust-embedded
Foxyloxy has quit [Quit: Textual IRC Client: www.textualapp.com]
Foxyloxy has joined #rust-embedded
<re_irc> <@firefrommoonlight:matrix.org> Is this on a Pi pico?
GenTooMan has quit [Quit: Leaving]
GenTooMan has joined #rust-embedded
<re_irc> <@dirbaio:matrix.org> thejpster:matrix.org: yep
<re_irc> <@thejpster:matrix.org> But of course without reverse engineering libmodem, as that is expressly prohibited by the licence 🤣
<re_irc> <@dirbaio:matrix.org> I have no idea what you mean at all
rardiol has quit [Ping timeout: 265 seconds]
rardiol has joined #rust-embedded
dne has quit [Remote host closed the connection]
dne has joined #rust-embedded
creich has quit [Remote host closed the connection]
fabic has quit [Ping timeout: 256 seconds]
<re_irc> <@ryankurte:matrix.org> released `embedded-hal-compat0.5.0` for `embedded-hal1.0.0-alpha.6` for anyone using it (thanks dirbaio for the assist!)
rardiol has quit [Quit: No Ping reply in 180 seconds.]
rardiol has joined #rust-embedded
mrkajetanp has quit [Ping timeout: 245 seconds]
mrkajetanp has joined #rust-embedded
<re_irc> <@fragadaleta:matrix.org> anyone played with the nrf52840 dongle and Rust?
<re_irc> <@fragadaleta:matrix.org> is there a tutorial to get started?
<re_irc> <@adamgreig:matrix.org> check out https://github.com/nrf-rs and #nrf-rs:matrix.org, there's a bunch of resources for nrf52840 there (though i'm sure people in here have also played with it)
<re_irc> <@adamgreig:matrix.org> eldruin: in rtcc, i wonder if the Rtcc trait should only do get_datetime and set_datetime, because otherwise it encourages people to read just one field at a time and end up with inconsistent data? like if you call get_minutes, draw the minutes, get_seconds, draw the seconds, you might end up missing a wraparound, but if you can only call get_datetime then draw dt.minutes and dt.seconds you are encouraged...
<re_irc> ... to do the right thing
<re_irc> <@adamgreig:matrix.org> (and someone who only wants minutes or seconds can still just call get_datetime().minutes ?)
<re_irc> <@fragadaleta:matrix.org> adamgreig: i am on that page. What i am looking for is a tutorial that guides me with the very basic.
dcz_ has quit [Ping timeout: 268 seconds]
<re_irc> <@thejpster:matrix.org> I think ferrous do training on that chip
<re_irc> <@thejpster:matrix.org> https://embedded-trainings.ferrous-systems.com/
creich has joined #rust-embedded