You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Investigated with debugger (probe-rs dap server). An initial breakpoint just above self.info.regs.cr2().modify( etc etc it is reachable. A second breakpoint is set beyond the modify(. Then we continue from the inital breakpoint. Instead of halting at the second breakpoint the program hangs.
asyncfn write_frame(&mutself,address:u8,write:&[u8],frame:FrameOptions) -> Result<(),Error>{// we can reach a breakpoint set here.self.info.regs.cr2().modify(|w| {// Note: Do not enable the ITBUFEN bit in the I2C_CR2 register if DMA is used for// reception.
w.set_itbufen(false);// DMA mode can be enabled for transmission by setting the DMAEN bit in the I2C_CR2// register.
w.set_dmaen(true);// Sending NACK is not necessary (nor possible) for write transfer.
w.set_last(false);});
Callstack
When we tell de debugger to halt we find we are in the HardFault handler. From the callstack below we see that the cause was a BusFault due to a Precise data access error at memory adress: 0x20010004. On Arm precise means the error was caused by the preceding instruction. In this case the read_volatile.
False alarm, the issue was on my size. Specifically the EMBASSY_EXECUTOR_TASK_ARENA_SIZE was set to 2000 which seems to be too high. Removing stopped the issue.
edit: want actually that, it was the embassy net w5500 state that had a too big a queue
Setup
Symptom:
program hangs.
Investigated with debugger (probe-rs dap server). An initial breakpoint just above
self.info.regs.cr2().modify( etc etc
it is reachable. A second breakpoint is set beyond themodify(
. Then we continue from the inital breakpoint. Instead of halting at the second breakpoint the program hangs.Callstack
When we tell de debugger to halt we find we are in the HardFault handler. From the callstack below we see that the cause was a BusFault due to a Precise data access error at memory adress:
0x20010004
. On Arm precise means the error was caused by the preceding instruction. In this case theread_volatile
.min example repo
https://github.com/dvdsk/i2c_hangs_min_example
related
This might very well be the same as the harder to replicate: #2968
The text was updated successfully, but these errors were encountered: