CMSIS-RTOSv2 - Acceso fuera de los límites en la ventana RTX RTOS

0

Durante la migración de mi proyecto a RTOSv2 y RTXv5, reconozco que después de unos minutos, mi programa se cuelga y los mensajes aparecen en la ventana RTX de RTX:

Expression: 'QML[j + QCB[i].ml_idx].addr'
E303: Access out of bounds - <readlist 'QML[44]'> - actual index:=45

Encuentro que la fuente de la falla es la función " memcpy ".

CMSIS_5 / CMSIS / RTOS2 / RTX / Source / rtx_msgqueue.c

/// Put a Message into a Queue or timeout if Queue is full.
osStatus_t osMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  EvrRtxMessageQueuePut(mq_id, msg_ptr, msg_prio, timeout);
  if (IS_IRQ_MODE() || IS_IRQ_MASKED()) {
    return isrRtxMessageQueuePut(mq_id, msg_ptr, msg_prio, timeout);
  } else {
    return  __svcMessageQueuePut(mq_id, msg_ptr, msg_prio, timeout);
  }
}
...
/// Put a Message into a Queue or timeout if Queue is full.
/// \note API identical to osMessageQueuePut
__STATIC_INLINE
osStatus_t isrRtxMessageQueuePut (osMessageQueueId_t mq_id, const void *msg_ptr, uint8_t msg_prio, uint32_t timeout) {
  os_message_queue_t *mq = (os_message_queue_t *)mq_id;
  os_message_t       *msg;
  const void        **ptr;
  ...
  // Try to allocate memory
  msg = osRtxMemoryPoolAlloc(&mq->mp_info);
  if (msg != NULL) {
    // Copy Message
    memcpy((uint8_t *)msg + sizeof(os_message_t), msg_ptr, mq->msg_size);
    ...
  return osOK;
}

¿Alguien tiene alguna idea para este problema? Gracias, ...

Bacheh Karaji

    
pregunta BachehKaraji

1 respuesta

0

Selecciono la variante Fuente del componente de software CMSIS: RTOS2 (API): Keil RTX5, desde el cuadro de diálogo Administrar el entorno de tiempo de ejecución. ¡Todo está bien!

    
respondido por el BachehKaraji

Lea otras preguntas en las etiquetas