shaoh.12 发表于 2015-9-17 12:37:14

请问下怎么找不到CMSISI-RTOS系统时钟处理函数?

比如在UCOS里面,开始会设置哪个定时器当作时系统滴答时钟,然后再滴答时钟中断里面调用ostimerick函数进行调度处理。
而在freertos或者CMSIS-RTOS中找不到这样的操作?请教谢谢。

374184600 发表于 2015-9-17 13:39:21

systick 吧

gagaguojia 发表于 2019-2-13 16:51:22

本帖最后由 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
可以改变倍频

鲜衣怒马 发表于 2019-2-13 18:34:12

gagaguojia 发表于 2019-2-13 16:51
在system_stm32f10x.c里有 void SystemInit(void),而SystemInit函数会在启动文件里被调用
比如我用的是s ...

不知道是你理解错了还是我理解错了

鲜衣怒马 发表于 2019-2-14 16:48:30

对于常用的内核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;
}

gagaguojia 发表于 2019-2-15 15:19:19

鲜衣怒马 发表于 2019-2-14 16:48
对于常用的内核FreeRTOS 已经移植好了,具体可以看port.c
例如M0+内核代码如下:



是我理解错了,他问的是滴答时钟不是系统时钟,我错了
页: [1]
查看完整版本: 请问下怎么找不到CMSISI-RTOS系统时钟处理函数?