Excepción de falla dura en el microprocesador de brazo stm32f7 en la creación de subprocesos RTX

1

Estoy ejecutando un programa de subproceso RTX simple de la siguiente manera. El problema es que cuando se ejecuta en STM32F7 DISCOVERY BOARDv a través de la interfaz de depuración, parece que justo después de ejecutar osThreadCreate (osThread(Thread), NULL); , el programa salta a la interrupción de falla. Antes solía funcionar bien.

void Thread (void const *argument);         
osThreadId tid_Thread;                                   
osThreadDef (Thread, osPriorityNormal, 1, 0);          

int Init_Thread (void) {

  tid_Thread = osThreadCreate (osThread(Thread), NULL);
  if (!tid_Thread) return(-1);

  return(0);
}

y la configuración de mi reloj es la siguiente:

static void SystemClock_Config(void)
{
  RCC_ClkInitTypeDef RCC_ClkInitStruct;
  RCC_OscInitTypeDef RCC_OscInitStruct;

  /* Enable HSE Oscillator and activate PLL with HSE as source */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 25;
  RCC_OscInitStruct.PLL.PLLN = 432;  
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 9;
  if(HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /* activate the OverDrive to reach the 216 Mhz Frequency */
  if(HAL_PWREx_EnableOverDrive() != HAL_OK)
  {
    Error_Handler();
  }

  RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;  
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;  
  if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_7) != HAL_OK)
  {
    Error_Handler();
  }
}

y este es el controlador al que mi programa salta (en stm32_746xx.s):

HardFault_Handler\
PROC
EXPORT  HardFault_Handler          [WEAK]
B       .
ENDP
    
pregunta AliA

1 respuesta

1

Si usa stm32cube classic para la configuración, el problema podría estar en la función MPU_Config. Acabo de cambiar la línea MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; con MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE; . Se trata de compartir la memoria mediante varios procesos o subprocesos, pero no conozco los detalles. Si su programa se ejecuta en un subproceso o si maneja el acceso a la memoria por sí mismo, puede hacer que el código se ejecute con ese cambio.

    
respondido por el masoud

Lea otras preguntas en las etiquetas