CN112988349A - 支持eCos系统的中断栈处理方法、打印方法及接收机 - Google Patents
支持eCos系统的中断栈处理方法、打印方法及接收机 Download PDFInfo
- Publication number
- CN112988349A CN112988349A CN202110205763.XA CN202110205763A CN112988349A CN 112988349 A CN112988349 A CN 112988349A CN 202110205763 A CN202110205763 A CN 202110205763A CN 112988349 A CN112988349 A CN 112988349A
- Authority
- CN
- China
- Prior art keywords
- interrupt
- stack
- interrupt stack
- processing
- ecos
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000007639 printing Methods 0.000 title claims abstract description 40
- 238000000034 method Methods 0.000 title claims abstract description 39
- 238000003672 processing method Methods 0.000 title claims abstract description 23
- 238000004458 analytical method Methods 0.000 claims description 3
- 230000006870 function Effects 0.000 description 12
- 238000010586 diagram Methods 0.000 description 2
- PCHJSUWPFVWCPO-UHFFFAOYSA-N gold Chemical compound [Au] PCHJSUWPFVWCPO-UHFFFAOYSA-N 0.000 description 2
- 239000010931 gold Substances 0.000 description 2
- 229910052737 gold Inorganic materials 0.000 description 2
- 238000013500 data storage Methods 0.000 description 1
- 238000010017 direct printing Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种支持eCos系统的中断栈处理方法,包括发生中断时进入中断处理过程;获取中断栈地址并检查中断栈地址;根据检查结果对齐中断栈;中断处理完成后恢复中断栈,完成中断栈处理。本发明还公开了包括所述支持eCos系统的中断栈处理方法的打印方法。本发明还公开了包括所述支持eCos系统的中断栈处理方法和打印方法的接收机。本发明采用创新性算法进行中断栈的处理,是一种通用的用于eCos系统的软件解决方案,与硬件平台无关,并且与硬件支持不冲突,同时并未增加多余的工作量,而且浮点格式化与线程情况下使用相同处理,确保了同一系统下双精度浮点的格式化标准相同;本发明同时还具有通用性好和简单可靠的优点。
Description
技术领域
本发明具体涉及一种支持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系统的中断栈处理方法进行中断栈处理,完成双精度浮点打印并出中断,从而完成最终的打印。
Claims (7)
1.一种支持eCos系统的中断栈处理方法,包括如下步骤:
S1.当发生中断时,进入中断处理过程;
S2.获取中断栈地址,并进行中断栈地址检查;
S3.根据步骤S2的中断栈地址检查结果,进行中断栈对齐;
S4.中断处理完成后,对中断栈进行恢复,从而完成中断栈处理。
2.根据权利要求1所述的支持eCos系统的中断栈处理方法,其特征在于步骤S2所述的进行中断栈地址检查,具体为在进入eCos中断时,使用golden栈保存完当前数据后,进行栈切换:首先检查进入中断时的栈是否为8字节对齐;检查过程为:对当前SP进行检查:若当前SP的最低3bit全部为0,则说明至少8字节已经对齐,否则为未对齐。
3.根据权利要求2所述的支持eCos系统的中断栈处理方法,其特征在于步骤S3所述的进行中断栈对齐,具体为若步骤S2检查的结果为中断栈未对齐,则向栈中多push一个数据,使得当前栈减4,使当前栈从4字节对齐变成至少8字节对齐,同时对上述的中断栈对齐操作进行记录。
4.根据权利要求3所述的支持eCos系统的中断栈处理方法,其特征在于步骤S4所述的对中断栈进行恢复,具体为在中断处理完成后,在进入interrupt_end之前,根据步骤S3中已记录的中断栈对齐操作,对中断栈进行恢复:若未进行中断栈对齐操作,则直接恢复中断栈;若进行了中断栈对齐操作,则从当前栈中pop一个数据,使得当前栈加4,同时恢复中断栈对齐操作为原始值。
5.一种包括了权利要求1~4之一所述的支持eCos系统的中断栈处理方法的打印方法,其特征在于包括如下步骤:
A.在eCos系统中,进行浮点格式化数据支持;
B.当需要进行双精度浮点打印时,进入中断;
C.采用权利要求1~4之一所述的支持eCos系统的中断栈处理方法进行中断栈处理,完成双精度浮点打印并出中断,从而完成最终的打印。
6.根据权利要求5所述的打印方法啊,其特征在于所述的在eCos系统中,进行浮点格式化数据支持,具体为采用如下步骤进行浮点格式化数据支持:
a.在格式化解析中,增加针对双精度浮点格式“%f”的分支;
b.在“%f”分支中,解析所需打印精度,包括小数点前和小数点后;
c.在执行栈中取出待打印double数据,并按照ieee754标准进行解析;
d.按照eCos系统在线程中打印双精度浮点的方式进行四舍五入,并保持跟线程中打印处理相同;
e.得到最终的格式化后字符串,准备打印。
7.一种接收机,其特征在于包括了权利要求1~4之一所述的支持eCos系统的中断栈处理方法和和权利要求5或6所述的打印方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110205763.XA CN112988349A (zh) | 2021-02-24 | 2021-02-24 | 支持eCos系统的中断栈处理方法、打印方法及接收机 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110205763.XA CN112988349A (zh) | 2021-02-24 | 2021-02-24 | 支持eCos系统的中断栈处理方法、打印方法及接收机 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112988349A true CN112988349A (zh) | 2021-06-18 |
Family
ID=76350149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110205763.XA Pending CN112988349A (zh) | 2021-02-24 | 2021-02-24 | 支持eCos系统的中断栈处理方法、打印方法及接收机 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112988349A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6070010A (en) * | 1997-07-25 | 2000-05-30 | International Business Machines Corporation | System and method of local data alignment for stack memory |
CN1687910A (zh) * | 2005-05-17 | 2005-10-26 | 北京中星微电子有限公司 | 连续访问环境下的中断恢复方法及装置 |
CN103778009A (zh) * | 2012-10-18 | 2014-05-07 | 深圳市中兴微电子技术有限公司 | 中断处理方法及装置 |
CN109901813A (zh) * | 2019-03-27 | 2019-06-18 | 苏州中晟宏芯信息科技有限公司 | 一种浮点运算装置及方法 |
-
2021
- 2021-02-24 CN CN202110205763.XA patent/CN112988349A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6070010A (en) * | 1997-07-25 | 2000-05-30 | International Business Machines Corporation | System and method of local data alignment for stack memory |
CN1687910A (zh) * | 2005-05-17 | 2005-10-26 | 北京中星微电子有限公司 | 连续访问环境下的中断恢复方法及装置 |
CN103778009A (zh) * | 2012-10-18 | 2014-05-07 | 深圳市中兴微电子技术有限公司 | 中断处理方法及装置 |
CN109901813A (zh) * | 2019-03-27 | 2019-06-18 | 苏州中晟宏芯信息科技有限公司 | 一种浮点运算装置及方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5974529A (en) | Systems and methods for control flow error detection in reduced instruction set computer processors | |
US6163764A (en) | Emulation of an instruction set on an instruction set architecture transition | |
US9740562B2 (en) | Method for checkpointing and restoring program state | |
CN101473303B (zh) | 在连结到本机码期间处理异常的方法及设备 | |
US7401210B2 (en) | Selecting subroutine return mechanisms | |
US6678837B1 (en) | Processor control flow monitoring using a signature table for soft error detection | |
CN109739824B (zh) | 日志获取方法及设备 | |
CN112559140B (zh) | 数据一致性的事务控制方法、系统、设备及存储介质 | |
JP4434548B2 (ja) | L2訂正可能エラーのための複数のプロセッサ・コアの割振り解除方法 | |
CN112115105A (zh) | 一种业务处理方法、装置及设备 | |
CN111126010A (zh) | Freemaker模板文件修复方法、装置、计算机设备及存储介质 | |
CN112988349A (zh) | 支持eCos系统的中断栈处理方法、打印方法及接收机 | |
CN110008236B (zh) | 一种数据分布式自增编码方法、系统、设备及介质 | |
CN110990179A (zh) | 一种任务处理方法、装置及设备 | |
JP2000122875A (ja) | 例外処理方法およびシステム | |
US20170115349A1 (en) | Method of debugging plc by using general-purpose microprocessor | |
CN114490543A (zh) | 内存多维数据库的事务日志实现方法、装置、设备及介质 | |
CN114462381A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN111984451A (zh) | 表格数据的纠错方法、系统、设备及存储介质 | |
CN112364580A (zh) | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 | |
CN112540799A (zh) | 启动数据的管理方法、系统、终端设备及存储介质 | |
US8769517B2 (en) | Generating a common symbol table for symbols of independent applications | |
CN112364581B (zh) | 自动在寄存器传输级设计文件中插入特定代码的方法及装置 | |
WO2023092723A1 (zh) | 数据纠错方法、装置及电子设备 | |
CN117573403A (zh) | 一种系统级芯片的异常的处理方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |