Compare commits

...

3 Commits

Author SHA1 Message Date
wdfk-prog 43c63da8a9
Merge bd990f7bd8 into 3416a7dd18 2025-05-14 08:00:05 +08:00
Giovanni Strano 3416a7dd18 [PRJ] Correct the dest addr and Unlock back the Flash after an erase in FLASH_IF_INT_Write()
Change-Id: Id5b1fe757f2f2e62f255d22b2fd14d5320320031
2025-05-13 17:15:20 +01:00
huangly bd990f7bd8 [LORA MAC] Prevent 32-bit data from overflowing and winding to cause RX receive window exception 2024-05-31 13:55:39 +08:00
13 changed files with 91 additions and 15 deletions

View File

@ -1017,12 +1017,16 @@ static void ProcessRadioTxDone( void )
Radio.Sleep( ); Radio.Sleep( );
} }
#if ( !defined(DISABLE_LORAWAN_RX_WINDOW) || (DISABLE_LORAWAN_RX_WINDOW == 0) ) #if ( !defined(DISABLE_LORAWAN_RX_WINDOW) || (DISABLE_LORAWAN_RX_WINDOW == 0) )
// Setup timers
// Setup timers // Setup timers
CRITICAL_SECTION_BEGIN( ); CRITICAL_SECTION_BEGIN( );
uint32_t offset = TimerGetCurrentTime( ) - TxDoneParams.CurTime; uint32_t cur_time = TimerGetCurrentTime( );
TimerSetValue( &MacCtx.RxWindowTimer1, MacCtx.RxWindow1Delay - offset ); uint32_t offset = (cur_time >= TxDoneParams.CurTime) ? (cur_time - TxDoneParams.CurTime) : (cur_time+ (0XFFFFFFFF - TxDoneParams.CurTime + 1));
uint32_t value1 = (MacCtx.RxWindow1Delay > offset) ? (MacCtx.RxWindow1Delay - offset) : MacCtx.RxWindow1Delay;
TimerSetValue( &MacCtx.RxWindowTimer1, value1 );
TimerStart( &MacCtx.RxWindowTimer1 ); TimerStart( &MacCtx.RxWindowTimer1 );
TimerSetValue( &MacCtx.RxWindowTimer2, MacCtx.RxWindow2Delay - offset ); uint32_t value2 = (MacCtx.RxWindow2Delay > offset) ? (MacCtx.RxWindow2Delay - offset) : MacCtx.RxWindow2Delay;
TimerSetValue( &MacCtx.RxWindowTimer2, value2 );
TimerStart( &MacCtx.RxWindowTimer2 ); TimerStart( &MacCtx.RxWindowTimer2 );
CRITICAL_SECTION_END( ); CRITICAL_SECTION_END( );
#else #else

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {

View File

@ -248,7 +248,7 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++) for (page_index = start_page_index; page_index < (start_page_index + number_pages); page_index++)
{ {
page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE; page_address = page_index * FLASH_PAGE_SIZE + FLASH_BASE;
if (FLASH_IF_INT_IsEmpty(pDestination, length) != FLASH_IF_MEM_EMPTY) if (FLASH_IF_INT_IsEmpty((void *)uDest, length) != FLASH_IF_MEM_EMPTY)
{ {
if (pAllocatedBuffer == NULL) if (pAllocatedBuffer == NULL)
{ {
@ -272,6 +272,12 @@ static FLASH_IF_StatusTypedef FLASH_IF_INT_Write(void *pDestination, const void
current_dest = page_address; current_dest = page_address;
current_source = (uint32_t)pAllocatedBuffer; current_source = (uint32_t)pAllocatedBuffer;
current_length = FLASH_PAGE_SIZE; current_length = FLASH_PAGE_SIZE;
/* Unlock back the Flash */
if (HAL_OK != HAL_FLASH_Unlock())
{
ret_status = FLASH_IF_LOCK_ERROR;
}
} }
else else
{ {