Gast
#4258118
Hallo, ich komme nicht weiter und hoffe, das mir hier jemand helfen kann. Zum Thema ich probiere mich gerade mit dem Evalboard STM32F3Discovery mit FreeRTOS 7.6 aus. Zu den Schnittstellen des CMSIS RTOS gibt es ja eine menge Anleitungen, wie man mit einem Semaphore aus einem ISR einen Thread "aktiveren" kann. Der Thread an sich läuft und der Timer auch. Ausgaben via printf und SWV funktionieren. Nur hier ist mein Problem. Sobald ich versuche ein osSemaphoreRelease im TimerISR auszuführen bleibt der Controler komplett stehen. Wenn ich osSemaphoreRelease zB in Threads oder im SysTick_Handler aufrufe, funktioniert alles wie gewollt. Auschnitt aus stm32f3xx_it.c /** * @brief This function handles TIM7 global interrupt. */ void TIM7_IRQHandler(void) { /* USER CODE BEGIN TIM7_IRQn 0 */ /* USER CODE END TIM7_IRQn 0 */ HAL_TIM_IRQHandler(&htim7); /* USER CODE BEGIN TIM7_IRQn 1 */ osSemaphoreRelease(myBinarySem01Handle); /* USER CODE END TIM7_IRQn 1 */ } Zu den Timer Initialiserungen: Ausschnitt aus main.c /* TIM7 init function */ void MX_TIM7_Init(void) { TIM_MasterConfigTypeDef sMasterConfig; htim7.Instance = TIM7; htim7.Init.Prescaler = 16000; htim7.Init.CounterMode = TIM_COUNTERMODE_UP; htim7.Init.Period = 1000; HAL_TIM_Base_Init(&htim7); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig); } Ausschnitt aus stm32f3xx_hal_msp.c void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM7) { /* USER CODE BEGIN TIM7_MspInit 0 */ /* USER CODE END TIM7_MspInit 0 */ /* Peripheral clock enable */ __TIM7_CLK_ENABLE(); /* Peripheral interrupt init*/ HAL_NVIC_SetPriority(TIM7_IRQn, 10, 0); HAL_NVIC_EnableIRQ(TIM7_IRQn); /* USER CODE BEGIN TIM7_MspInit 1 */ /* USER CODE END TIM7_MspInit 1 */ } } Stehen bleibt er bei Ausschnitt aus port.c __asm unsigned long ulPortSetInterruptMask( void ) { PRESERVE8 mrs r0, basepri mov r1, #configMAX_SYSCALL_INTERRUPT_PRIORITY msr basepri, r1 bx r14 <--- } Den meisten Code habe ich von STM32CubeMX erstellen lassen und editiert. Habe ich evtl. etwas vergessen? Ich versuche gerade die Funktionsweise STM32 mit CMSIS zu verstehen. Vielen Dank für eure Hilfe!