1597|0

3713

帖子

0

资源

纯净的硅(中级)

MSP430F148中断堆栈的结构设计 [复制链接]

     MSP430F148属于一种中低端的单片机,只具备运行RTOS的基本条件,所以在它上面运行RTOS所遇见的一些问题,对于一般的单片机而言是具有代表性的。


     在uC/OS-II中,任务切换分为任务级切换和中断级切换。其中任务级切换是通过发软中断指令或依靠处理器执行陷阱指令来完成的。软中断指令会强制将一些处理器寄存器保存到当前任务的堆栈中,并执行任务调度。其目的是使处于就绪态的任务的堆栈结构看起来就像刚发生过中断并将全部寄存器保存在堆栈的情形一样。如MCS-5l以及x86芯片都有类似的指令,但问题出在有一些单片机芯片中没有软中断指令,并且在发生中断时保存寄存器的情况根据单片机芯片和所使用的编译器的不同而有很大区别。

  MSP430F148中就没有软中断指令,所使用的IAR编译器在发生中断时也不保存所有的寄存器,而是只保存几个在中断中使用到的寄存器。所有这些都是不符合uC/OS-II的移植条件的。我们的解决方法是根据具体情况来自己定义一个中断结构,不论是在任务级调度还是中断发生或调度以及任务堆栈的初始化时,都要按照这个结构来执行。代价是必须对所编写的中断程序的汇编代码进行人工修改,使之符合这个中断结构。
  为设计一个符合要求的中断堆栈结构,首先必须清楚所使用的单片机在发生中断时执行了哪些操作,即向堆栈中保存了哪些寄存器以及它们的顺序。当MSP430单片机发生中断时,只进行2条基本操作,先将SR(状态寄存器)压入堆栈中保存,然后将中断发生时要执行的下一条指令的PC值压入堆栈保存。其次,要清楚所使用的C编译器在编译C语言编写的中断程序时,进行了哪些默认的操作。通过对所使用的IAR V2.13编译器编译产生的汇编程序进行分析,可以发现,除了以上的2条基本操作以外,在中断程序的开头,还自动保存了 R12~R15四个寄存器,余下的R4~Rll八个寄存器中只保存在中断程序中用到的个别寄存器,而不是全部保存。但在RTOS中必须保存所有的寄存器,这样才能正确保存该任务的状态。通过以上分析,我们定义了MSP430运行uC/OS-II时的中断堆栈结构,如图所示。
360截图20180708224509340.jpg


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表