查看: 4070|回复: 9

systick中断服务函数的疑问

[复制链接]
  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-6-2 22:30:23 | 显示全部楼层 |阅读模式
    分享到:
    10与非币
    共3个疑问:
    1.为什么亮哥的SysTick_Handler  不是在 stm32f10x_it.c文件里的 void SysTick_Handler(void) 函数?

    2.亮哥的 函数里有定义了一个   OS_CPU_SR  cpu_sr;  这个有什么作用?

    3.亮哥的函数里用了     
        OS_ENTER_CRITICAL();                         /* Tell uC/OS-II that we are starting an ISR          */    OSIntNesting++;                                    
        OS_EXIT_CRITICAL();
        为什么不用OSIntEnter();进入中断,这里没有判断 OSIntNesting 是否小于255  ?


    我初学的,比较菜,见笑了.

    下面是原子的代码:  

    //systick中断服务函数,使用ucos时用到
    void SysTick_Handler(void)
    {

    最佳答案

    查看完整内容

    1.为什么亮哥的SysTick_Handler 不是在 stm32f10x_it.c文件里的 void SysTick_Handler(void) 函数? 答:在启动代码里,这里做了修改 DCD OS_CPU_PendSVHandler ; PendSV Handler DCD OS_CPU_SysTickHandler ; SysTick Handler 这里是中断向量表,也就是说当发生了SysTick中断,将执行OS_CPU_SysTickHandler 这个代码不带IT文件,在操作系统的移植文件中 2.亮哥的 ...
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-1-8 15:51
  • 签到天数: 22 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2014-6-2 22:30:24 | 显示全部楼层
    本帖最后由 亮点 于 2014-6-3 18:39 编辑

    1.为什么亮哥的SysTick_Handler  不是在 stm32f10x_it.c文件里的 void SysTick_Handler(void) 函数?
    答:在启动代码里,这里做了修改
                    DCD     OS_CPU_PendSVHandler             ; PendSV Handler
                    DCD     OS_CPU_SysTickHandler            ; SysTick Handler
    这里是中断向量表,也就是说当发生了SysTick中断,将执行OS_CPU_SysTickHandler
    这个代码不带IT文件,在操作系统的移植文件中
    2.亮哥的 函数里有定义了一个   OS_CPU_SR  cpu_sr;  这个有什么作用?
    答:这个是临界区用的,进入临界区之前,将中断屏蔽寄存器的值保存到这个变量
    出来的时候,恢复中断屏蔽寄存器
    3. OS_ENTER_CRITICAL();                         /* Tell uC/OS-II that we are starting an ISR          */    OSIntNesting++;                                    
        OS_EXIT_CRITICAL();
    因为使用了全局变量,因此用临界区保护了
    OS_EXT  INT8U             OSIntNesting;  这个全局变量是8位的,因此不会大于255,不太可能中断嵌套到那么多层,放心使用

    谢谢你的发帖,写的很清楚!
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-6-2 22:34:22 | 显示全部楼层
    上面代码没显示全: 
    原子的代码void SysTick_Handler(void)
    {                                  
            OSIntEnter();                //进入中断
        OSTimeTick();       //调用ucos的时钟服务程序               
        OSIntExit();        //触发任务切换软中断
    }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-6-2 22:35:02 | 显示全部楼层
    亮哥的代码:
    void  OS_CPU_SysTickHandler (void)
    {
        OS_CPU_SR  cpu_sr;

            led_turn4;
            //GPIO_WriteBit(led_gpio, led1 , (BitAction)!GPIO_ReadOutputDataBit(led_gpio, led1));
            //GPIO_WriteBit(led_gpio, led4 , 1);
        OS_ENTER_CRITICAL();                         /* Tell uC/OS-II that we are starting an ISR          */
        OSIntNesting++;
        OS_EXIT_CRITICAL();

        OSTimeTick();                                /* Call uC/OS-II's OSTimeTick()                       */

        OSIntExit();                                 /* Tell uC/OS-II that we are leaving the ISR          */
    }
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-6-3 12:28
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-6-3 12:28:37 | 显示全部楼层
    谢谢,讲解得很清楚
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-8-8 09:37
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-6-10 14:10:10 | 显示全部楼层
    亮哥认真负责
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2014-8-8 09:37
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-6-10 14:11:32 | 显示全部楼层
    亮哥认真负责
    回复

    使用道具 举报

    该用户从未签到

    发表于 2014-7-30 13:47:50 | 显示全部楼层
    认真负责。           
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-8-7 16:04
  • 签到天数: 40 天

    连续签到: 1 天

    [LV.5]常住居民I

    发表于 2014-8-2 13:30:24 | 显示全部楼层
    卢老师,讲解非常详细 赞一个
    回复

    使用道具 举报

  • TA的每日心情
    郁闷
    2016-1-22 14:00
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-1-22 14:11:09 | 显示全部楼层
    不错 !学习学习!!!!!!!!!!!!!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-16 13:09 , Processed in 0.216466 second(s), 34 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.