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

文档序号:25543302发布日期:2021-06-18 20:40
支持eCos系统的中断栈处理方法、打印方法及接收机与流程

本发明具体涉及一种支持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系统的中断栈处理方法进行中断栈处理,完成双精度浮点打印并出中断,从而完成最终的打印。

再多了解一些
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1