搜索
bottom↓
回复: 5

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

[复制链接]

出0入0汤圆

发表于 2015-9-17 12:37:14 | 显示全部楼层 |阅读模式
比如在UCOS里面,开始会设置哪个定时器当作时系统滴答时钟,然后再滴答时钟中断里面调用ostimerick函数进行调度处理。
而在freertos或者CMSIS-RTOS中找不到这样的操作?请教谢谢。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2015-9-17 13:39:21 | 显示全部楼层
systick 吧

出0入0汤圆

发表于 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
                EXPORT  Reset_Handler             [WEAK]
                IMPORT  __main
                IMPORT  SystemInit
                LDR     R0, =SystemInit
                BLX     R0               
                LDR     R0, =__main
                BX      R0
                ENDP


  
如果想改变晶振的值或者倍频
在stm32f10x.h里有:
#if !defined  HSE_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_24MHz  24000000
#else
/* #define SYSCLK_FREQ_HSE    HSE_VALUE */
/* #define SYSCLK_FREQ_24MHz  24000000 */
/* #define SYSCLK_FREQ_36MHz  36000000 */
/* #define SYSCLK_FREQ_48MHz  48000000 */
/* #define SYSCLK_FREQ_56MHz  56000000 */
#define SYSCLK_FREQ_72MHz  72000000
#endif
可以改变倍频

出50入58汤圆

发表于 2019-2-13 18:34:12 来自手机 | 显示全部楼层
gagaguojia 发表于 2019-2-13 16:51
在system_stm32f10x.c里有 void SystemInit(void),而SystemInit函数会在启动文件里被调用
比如我用的是s ...

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

出50入58汤圆

发表于 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;
}

出0入0汤圆

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

是我理解错了,他问的是滴答时钟不是系统时钟,我错了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 21:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表