From a9991f4509cade126fb5c1ecf13aee6cbec4622f Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 29 Apr 2025 15:33:57 +0200 Subject: [PATCH 1/3] I2CSlave: fix slave write --- libraries/Wire/Wire.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 9b345d3e1..f7bb57bf8 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -124,7 +124,6 @@ size_t arduino::MbedI2C::write(const uint8_t* data, int len) { int arduino::MbedI2C::read() { int rv = -1; core_util_critical_section_enter(); - if (rxBuffer.available()) { rv = rxBuffer.read_char(); @@ -159,9 +158,7 @@ void arduino::MbedI2C::receiveThd() { onRequestCb(); } if (usedTxBuffer != 0) { - core_util_critical_section_enter(); slave->write((const char *) txBuffer, usedTxBuffer); - core_util_critical_section_exit(); usedTxBuffer = 0; } //slave->stop(); From 6ca44223cf2d38d2955a2268e83cb40b6427fbc5 Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 29 Apr 2025 16:31:02 +0200 Subject: [PATCH 2/3] I2CSlave: restore critical section with temp buffer --- libraries/Wire/Wire.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index f7bb57bf8..a382fc66f 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -158,8 +158,12 @@ void arduino::MbedI2C::receiveThd() { onRequestCb(); } if (usedTxBuffer != 0) { - slave->write((const char *) txBuffer, usedTxBuffer); + core_util_critical_section_enter(); + uint8_t tempTxBuffer[usedTxBuffer]; + memcpy(tempTxBuffer, txBuffer, sizeof(tempTxBuffer)); usedTxBuffer = 0; + core_util_critical_section_exit(); + slave->write((const char *) tempTxBuffer, sizeof(tempTxBuffer)); } //slave->stop(); break; From 6231980a20cf4e9d5b4e41ff4c572ccc5fe3f63c Mon Sep 17 00:00:00 2001 From: pennam Date: Tue, 29 Apr 2025 17:41:24 +0200 Subject: [PATCH 3/3] I2CSlave: do not use vla --- libraries/Wire/Wire.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index a382fc66f..155ab4fc8 100644 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -159,11 +159,12 @@ void arduino::MbedI2C::receiveThd() { } if (usedTxBuffer != 0) { core_util_critical_section_enter(); - uint8_t tempTxBuffer[usedTxBuffer]; - memcpy(tempTxBuffer, txBuffer, sizeof(tempTxBuffer)); + uint8_t tempTxBuffer[256]; + uint8_t usedTempTxBuffer = usedTxBuffer; + memcpy(tempTxBuffer, txBuffer, usedTempTxBuffer); usedTxBuffer = 0; core_util_critical_section_exit(); - slave->write((const char *) tempTxBuffer, sizeof(tempTxBuffer)); + slave->write((const char *) tempTxBuffer, usedTempTxBuffer); } //slave->stop(); break; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy