请问下怎么找不到CMSISI-RTOS系统时钟处理函数?
比如在UCOS里面,开始会设置哪个定时器当作时系统滴答时钟,然后再滴答时钟中断里面调用ostimerick函数进行调度处理。而在freertos或者CMSIS-RTOS中找不到这样的操作?请教谢谢。 systick 吧 本帖最后由 gagaguojia 于 2019-2-13 16:55 编辑
在system_stm32f10x.c里有 void SystemInit(void),而SystemInit函数会在启动文件里被调用
比如我用的是stm32f102rct6 所以在启动文件startup_stm32f10x_hd.s里有
; Reset handler
Reset_Handler PROC
EXPORTReset_Handler
IMPORT__main
IMPORTSystemInit
LDR R0, =SystemInit
BLX R0
LDR R0, =__main
BX R0
ENDP
如果想改变晶振的值或者倍频
在stm32f10x.h里有:
#if !definedHSE_VALUE
#ifdef STM32F10X_CL
#define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */
#else
#define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */
#endif /* STM32F10X_CL */
#endif /* HSE_VALUE */
可以改变晶振频率
在system_stm32f10x.c里有
#if defined (STM32F10X_LD_VL) || (defined STM32F10X_MD_VL) || (defined STM32F10X_HD_VL)
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
#define SYSCLK_FREQ_24MHz24000000
#else
/* #define SYSCLK_FREQ_HSE HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz24000000 */
/* #define SYSCLK_FREQ_36MHz36000000 */
/* #define SYSCLK_FREQ_48MHz48000000 */
/* #define SYSCLK_FREQ_56MHz56000000 */
#define SYSCLK_FREQ_72MHz72000000
#endif
可以改变倍频
gagaguojia 发表于 2019-2-13 16:51
在system_stm32f10x.c里有 void SystemInit(void),而SystemInit函数会在启动文件里被调用
比如我用的是s ...
不知道是你理解错了还是我理解错了
对于常用的内核FreeRTOS 已经移植好了,具体可以看port.c
例如M0+内核代码如下:
void xPortSysTickHandler( void )
{
unsigned long ulPreviousMask;
ulPreviousMask = portSET_INTERRUPT_MASK_FROM_ISR();
{
/* Increment the RTOS tick. */
if( xTaskIncrementTick() != pdFALSE )
{
/* Pend a context switch. */
*(portNVIC_INT_CTRL) = portNVIC_PENDSVSET;
}
}
portCLEAR_INTERRUPT_MASK_FROM_ISR( ulPreviousMask );
}
/*-----------------------------------------------------------*/
/*
* Setup the systick timer to generate the tick interrupts at the required
* frequency.
*/
void prvSetupTimerInterrupt( void )
{
/* Configure SysTick to interrupt at the requested rate. */
*(portNVIC_SYSTICK_LOAD) = ( configCPU_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;
*(portNVIC_SYSTICK_CTRL) = portNVIC_SYSTICK_CLK | portNVIC_SYSTICK_INT | portNVIC_SYSTICK_ENABLE;
}
鲜衣怒马 发表于 2019-2-14 16:48
对于常用的内核FreeRTOS 已经移植好了,具体可以看port.c
例如M0+内核代码如下:
是我理解错了,他问的是滴答时钟不是系统时钟,我错了
页:
[1]