首页> 中国专利> 支持eCos系统的中断栈处理方法、打印方法及接收机

支持eCos系统的中断栈处理方法、打印方法及接收机

摘要

本发明公开了一种支持eCos系统的中断栈处理方法,包括发生中断时进入中断处理过程;获取中断栈地址并检查中断栈地址;根据检查结果对齐中断栈;中断处理完成后恢复中断栈,完成中断栈处理。本发明还公开了包括所述支持eCos系统的中断栈处理方法的打印方法。本发明还公开了包括所述支持eCos系统的中断栈处理方法和打印方法的接收机。本发明采用创新性算法进行中断栈的处理,是一种通用的用于eCos系统的软件解决方案,与硬件平台无关,并且与硬件支持不冲突,同时并未增加多余的工作量,而且浮点格式化与线程情况下使用相同处理,确保了同一系统下双精度浮点的格式化标准相同;本发明同时还具有通用性好和简单可靠的优点。

著录项

  • 公开/公告号CN112988349A

    专利类型发明专利

  • 公开/公告日2021-06-18

    原文格式PDF

  • 申请/专利权人 长沙海格北斗信息技术有限公司;

    申请/专利号CN202110205763.X

  • 申请日2021-02-24

  • 分类号G06F9/48(20060101);

  • 代理机构43001 长沙永星专利商标事务所(普通合伙);

  • 代理人周咏;米中业

  • 地址 410000 湖南省长沙市高新区芯城科技园二期14栋6楼

  • 入库时间 2023-06-19 11:29:13

说明书

技术领域

本发明具体涉及一种支持eCos系统的中断栈处理方法、打印方法及接收机。

背景技术

在普通的线程中(非中断情形),eCos可正常支持双精度浮点打印,通过其自带的C库函数和数学库函数实现。但是,在eCos原生系统中,并不支持在中断中直接打印或者格式化双精度浮点数据。在使用的过程中,直接使用打印函数进行输出时,有概率会出现数据打印错误的情况,导致无法正确跟踪某些状态,给跟踪调试带来不便。尤其对于某些时效性强的数据,如果无法第一时间打印出来,则需要使用较大的memory进行数据保存,这使得调试过程极为麻烦。

现有技术中,在cortexM3系列芯片中,可通过控制硬件NVICCCR的配置来支持该功能,但是该功能通过硬件实现,不具备通用性,而且会占用硬件资源。

发明内容

本发明的目的之一在于提供一种通过软件算法实现的、支持eCos系统且通用性好,简单可靠的支持eCos系统的中断栈处理方法。

本发明的目的之二在于提供一种包括了所述支持eCos系统的中断栈处理方法的打印方法。

本发明的目的之三在于提供一种包括了所述支持eCos系统的中断栈处理方法和打印方法的接收机。

本发明提供的这种支持eCos系统的中断栈处理方法,包括如下步骤:

S1.当发生中断时,进入中断处理过程;

S2.获取中断栈地址,并进行中断栈地址检查;

S3.根据步骤S2的中断栈地址检查结果,进行中断栈对齐;

S4.中断处理完成后,对中断栈进行恢复,从而完成中断栈处理。

步骤S2所述的进行中断栈地址检查,具体为在进入eCos中断时,使用golden栈保存完当前数据后,进行栈切换:首先检查进入中断时的栈是否为8字节对齐;检查过程为:对当前SP进行检查:若当前SP的最低3bit全部为0,则说明至少8字节已经对齐,否则为未对齐。

步骤S3所述的进行中断栈对齐,具体为若步骤S2检查的结果为中断栈未对齐,则向栈中多push一个数据,使得当前栈减4,使当前栈从4字节对齐变成至少8字节对齐,同时对上述的中断栈对齐操作进行记录。

步骤S4所述的对中断栈进行恢复,具体为在中断处理完成后,在进入interrupt_end之前,根据步骤S3中已记录的中断栈对齐操作,对中断栈进行恢复:若未进行中断栈对齐操作,则直接恢复中断栈;若进行了中断栈对齐操作,则从当前栈中pop一个数据,使得当前栈加4,同时恢复中断栈对齐操作为原始值。

本发明还公开了一种包括了上述支持eCos系统的中断栈处理方法的打印方法,包括如下步骤:

A.在eCos系统中,进行浮点格式化数据支持;

B.当需要进行双精度浮点打印时,进入中断;

C.采用上述的支持eCos系统的中断栈处理方法进行中断栈处理,完成双精度浮点打印并出中断,从而完成最终的打印。

所述的在eCos系统中,进行浮点格式化数据支持,具体为采用如下步骤进行浮点格式化数据支持:

a.在格式化解析中,增加针对双精度浮点格式“%f”的分支;

b.在“%f”分支中,解析所需打印精度,包括小数点前和小数点后;

c.在执行栈中取出待打印double数据,并按照ieee754标准进行解析;

d.按照eCos系统在线程中打印双精度浮点的方式进行四舍五入(保持跟线程中打印处理相同);

e.得到最终的格式化后字符串,准备打印。

本发明还公开了一种接收机,该接收机包括了上述的支持eCos系统的中断栈处理方法和打印方法。

本发明提供的这种支持eCos系统的中断栈处理方法、打印方法及接收机,采用创新性算法进行中断栈的处理,是一种通用的用于eCos系统的软件解决方案,与硬件平台无关,并且与硬件支持不冲突,同时并未增加多余的工作量,而且浮点格式化与线程情况下使用相同处理,确保了同一系统下(普通模式和中断模式)双精度浮点的格式化标准相同;本发明同时还具有通用性好和简单可靠的优点。

附图说明

图1为本发明的中断栈处理方法的方法流程示意图。

图2为本发明的打印方法的方法流程示意图。

具体实施方式

如图1所示为本发明的中断栈处理方法的方法流程示意图:本发明提供的这种支持eCos系统的中断栈处理方法,包括如下步骤:

S1.当发生中断时,进入中断处理过程;

S2.获取中断栈地址,并进行中断栈地址检查;

使用通用的软件方案替代硬件进行中断栈地址检查,使其符合预期和标准;

比如打印函数,是需要严格遵守AAPCS规则的函数;即要求堆栈保持8字节对齐;普通场景下,在创建任务时给定的栈顶地址只要设置为8字节对齐,那么编译链会保证在函数调用中,均按照该规则进行,确保普通场景下的双精度浮点打印/格式化正常;

在中断场景中,由于进入中断时的时机不可确定,进入时的栈空间情形即不确定;在此情形下,如果贸然直接调用打印或者格式化函数,可能导致不符合AAPCS的调用发生,从而导致出现错误结果;

因此,在进入eCos中断时,使用golden栈保存完当前数据后,进行栈切换:首先检查进入中断时的栈是否为8字节对齐;检查过程为:对当前SP进行检查:若当前SP的最低3bit全部为0,则说明至少8字节已经对齐,否则为未对齐;

S3.根据步骤S2的中断栈地址检查结果,进行中断栈对齐;

本步骤的目的在于让代码执行严格遵守AAPCS规则;

具体为,若步骤S2检查的结果为中断栈未对齐,则向栈中多push一个数据,使得当前栈减4,使当前栈从4字节对齐变成至少8字节对齐,同时对上述的中断栈对齐操作进行记录;

S4.中断处理完成后,对中断栈进行恢复,从而完成中断栈处理;

由于中断中的debug信息由用户注册的中断函数产生,在调用完毕用户中断函数后,就可以恢复原始栈状态,确保中断处理完毕后可正常返回中断点继续正确执行;在调用完毕用户函数后,继续进行eCos内核代码的中断处理,在进入interrupt_end之前恢复一些标志位和栈;

因此,在中断处理完成后,在进入interrupt_end之前,根据步骤S3中已记录的中断栈对齐操作,对中断栈进行恢复:若未进行中断栈对齐操作,则直接恢复中断栈;若进行了中断栈对齐操作,则从当前栈中pop一个数据,使得当前栈加4,同时恢复中断栈对齐操作为原始值。

如图2所示为本发明的打印方法的方法流程示意图:本发明提供的这种包括了上述支持eCos系统的中断栈处理方法的打印方法,包括如下步骤:

A.在eCos系统中,进行浮点格式化数据支持;具体为采用如下步骤进行浮点格式化数据支持:

a.在格式化解析中,增加针对双精度浮点格式“%f”的分支;

b.在“%f”分支中,解析所需打印精度,包括小数点前和小数点后;

c.在执行栈中取出待打印double数据,并按照ieee754标准进行解析;

d.按照eCos系统在线程中打印双精度浮点的方式进行四舍五入(保持跟线程中打印处理相同);

e.得到最终的格式化后字符串,准备打印;

B.当需要进行双精度浮点打印时,进入中断;

C.采用上述的支持eCos系统的中断栈处理方法进行中断栈处理,完成双精度浮点打印并出中断,从而完成最终的打印。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号