查看: 1170|回复: 9

[原创DIY] systick中断服务函数的疑问

[复制链接]

3

主题

0

好友

55

积分

童生

Rank: 2

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

    [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)
    {

    最佳答案

    laoliang-67665 查看完整内容

    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.亮哥的 ...
    回复

    使用道具 举报

    93

    主题

    18

    好友

    9625

    积分

    版主

    Rank: 7Rank: 7Rank: 7

  • TA的每日心情
    奋斗
    2015-6-30 10:20
  • 签到天数: 21 天

    [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,不太可能中断嵌套到那么多层,放心使用

    谢谢你的发帖,写的很清楚!
    国际著名屌丝,嵌入式系统书籍作者,亮点嵌入式创始人
    博客:亮点新浪博客
    淘:brightpoint.taobao.com
    回复

    使用道具 举报

    3

    主题

    0

    好友

    55

    积分

    童生

    Rank: 2

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

    [LV.2]偶尔看看I

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

    使用道具 举报

    3

    主题

    0

    好友

    55

    积分

    童生

    Rank: 2

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

    [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          */
    }
    回复

    使用道具 举报

    3

    主题

    0

    好友

    55

    积分

    童生

    Rank: 2

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

    [LV.2]偶尔看看I

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

    使用道具 举报

    2

    主题

    0

    好友

    61

    积分

    童生

    Rank: 2

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

    [LV.2]偶尔看看I

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

    使用道具 举报

    2

    主题

    0

    好友

    61

    积分

    童生

    Rank: 2

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

    [LV.2]偶尔看看I

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

    使用道具 举报

    0

    主题

    0

    好友

    4

    积分

    白丁

    Rank: 1

    该用户从未签到

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

    使用道具 举报

    2

    主题

    0

    好友

    385

    积分

    秀才

    Rank: 3Rank: 3

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

    [LV.5]常住居民I

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

    使用道具 举报

    0

    主题

    0

    好友

    13

    积分

    白丁

    Rank: 1

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

    [LV.1]初来乍到

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

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

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


    手机版|爱板网 |网站地图  

    GMT+8, 2016-12-7 03:51 , Processed in 0.243978 second(s), 31 queries , Memcache On.

    苏公网安备 32059002001056号

    Powered by Discuz!

    回顶部