I have a project that I have used stm32f746g discovery board. It receives data with fixed size from Uart sequentially and to inform application about each data receive completed, dma callback is used (HAL_UART_RxCpltCallback function). It works fine at the beginning but after several minutes of running, the dma callback stops to be called, and as a result, the specified parameter value doesn't get updated. Because the parameter is used in another thread too (actually a rtos defined timer), I believe this problem is caused by lacking of thread safety. But my problem is that mutex and semaphore don't be supported in ISRs and I need to protect my variable in dma callback which is an interrupt routine. I am using keil rtx to handle multithreading and the timer I use is osTimer that is defined in rtx. How can I handle the issue?
Uart dma receive interrupt stops receiving data after several minutes
1.3k Views Asked by masoud At
1
There are 1 best solutions below
Related Questions in MUTEX
- Can defer recover prevent mutex Unlock?
- In Rust, how to coerce a mutex lock into a reference with identical lifetime?
- Binary Semaphore vs Mutux interview question
- Shared variable read from low priority thread in preemptive scheduling
- Ruby Threads Concurrency Issue using Mutex
- How does mutex work in multicore systems?
- why can't the following mutex be shared by multiple threads?
- Borrowing issues using variables wrapped in Arc<Mutex<>> in Rust
- Eliminating concurrency bugs with mutexes
- Returning variable by reference requires holding mutex
- Do I need mutexes for read operation only?
- Mutex doesn't stop more than one coroutine to modify or read the data
- How do I disable the eventual fairness of the Rust parking_lot crate's Mutex?
- How to prevent race condition when multiple threads are writing in the same file descriptor in C?
- How to ensure consistency in process synchronization
Related Questions in SEMAPHORE
- Binary Semaphore vs Mutux interview question
- Why sem_post() looks like blocked when using WinAPI and Semaphore to create a program that re-running again and again
- How to Create Multi-Unit Acquire/Release with std::counting_semaphore in C++20 for a Producer-Consumer Scenario?
- Techniques for making a method non-reentrant
- Trying to find a way to limit the number of List<Task> that can run at one time
- ManagedIdentityCredential authentication failed: Adding the specified count to the semaphore would cause it to exceed its maximum count
- Strange output in a synchronization problem using binary semaphores in C
- C semaphore and shared memory
- How do I resolve the semaphore timeout expired issue, with SerialPort in .NET 7 C#?
- aiohttp.client_exceptions.ClientConnectorError: Cannot connect to host :443 ssl:default [The semaphore timeout period has expired]
- Using Goroutines to Annotate and Fetch Data in Background – Semaphore Acquisition Error within Route Handler
- How can I implement a Semaphore via a database?
- What if we keep calling semGive multiple times without semTake in binary semaphore? What will be the behavior?
- Web App, control number of available tasks in Hangifre jobs, each executing Parallel.ForEachAsync
- Thread #1: Bug in libpthread: sem_wait succeeded on semaphore without prior sem_post
Related Questions in UART
- uart in vhdl send a string
- Time Delay while sending data through UART using WriteFile intervally for some duration
- Connect Strato4 to ESP32 using UART
- UART Driver for STM32MP25 by EDK2
- STM32 data transfer via UART
- I didn't receive what I'm expecting via UART communication
- How to increase baudrate on Device Manager Windows?
- UART sending gaps
- How can I use STM32F103 to read TMC2226's register
- IOT: Is there any way to check serial port are having signal before connecting?
- UART commands for a barcode scanner?
- In zephyr-rtos, how to run the `echo_bot` example?
- How to display data from uart on Raspberry PI 4
- The uart on the FPGA is working half-heartedly. But it works correctly in simulation. Why is this so?
- Interfacing RFID with STM32
Related Questions in DMA
- STM32 ADC DMA low raw/Voltage readings
- the end of the I/O operation is notified to the system by an interrupt.how much system time do the mentioned operations occupy?
- Use Nvidia as DMA devices is possible?
- Does the Direct Memory Access (DMA) interfere with the execution of user program execution?
- A breakpoint instruction (__debugbreak() statement or a similar call) was executed in p.exe
- How to use DMAMUX generated events to trigger another DMA request?
- How to use DMA memory to memory in stm32h723zgt6?
- Cache issue when creating shared memory between kernel space and user space
- DMA buf import into Vulkan
- stm32 cubeIDE DMA DAC noise on DAC output
- STM32F4 Serial Port Forwarding Architecture
- STM32 ADC: Continuous conversion (DMA) vs. discontinuous conversion accuracy
- AMD IOMMU IO_PAGE_FAULT
- T-Display-S3-long FreeRTOS Memory allocation fails while there is heap space available
- Arduino Pro Portenta H7 I2S and DMA
Related Questions in STM32F7
- Receiving corrupted data while sending large data from STM32 to PC over UART
- SPI with Registers: Shifting Issues in Data transferring
- Reading LCD-TFT peripheral registers in a stm32f769i-discovery
- WebUSB descriptor for STM32F767
- problems with usb virtual com port stm32f769 discovery
- write to SDRAM in STM32f7xxx
- Flashing the Code compatibility of STM32F767Zi processor to the STM32F746Tx
- How to get different data from different device in one UART interrupt callback function at the same time using stm32cubeide?
- MQTT on STM32CubeIDE (hardware STM32F756ZGT6 nucleo-144)
- Data corruption issue with DMA operations on ARM Cortex-M7 (STM32F7) MCU
- Saving Values in STM32f769i Disco Board
- E200(ValidationError): stm32: Unable to bind the STM AI runtime with "cnn" c-model: []
- ERROR: Please install STMCubeProgrammer on the machine
- STM32 SPI slave dummy cycles issue
- Cortex Debug + OpenOCD + GDB STM32F767ZI : gdb-set mi-async on -> Cannot change this setting while the inferior is running
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Generally, only one thread should communicate with the ISR. If multiple threads are accessing a variable shared with an ISR, your design is wrong and needs to be fixed. In case of DMA, only one thread should access the buffer.
You'll need to protect the variables shared between that thread and the ISR - not necessarily with a mutex/semaphore but perhaps with something simpler like guaranteeing atomic access (best solution if possible), or by using the non-interrruptable abilitiy that many ISRs have. Example for simple, single-threaded MCU applications. Alternatively just temporarily disable interrupts during access, but that may not be possible, depending on real-time requirements.