第9章 中断

本文详细介绍了S3C2440处理器的中断控制器,包括中断方式、中断服务程序(ISR)、中断控制器的寄存器工作原理以及中断处理流程。重点讲解了中断请求源、中断屏蔽、中断优先级仲裁和中断清除等关键步骤,同时提供了中断处理函数的设置及中断模式的切换代码示例。

第9章 中断

cpsr
第9章 <wbr>中断

第9章 <wbr>中断
9.1.1 s3c2440中断控制器
中断方式:当某件事情发生时,硬件会设置某个寄存器; cpu在每执行完一个指令时,通过硬件查看这个寄存器, 如果发生所关注的事件发生了,则中断当前程序流程, 跳转到一个固定的地址处理这件事情。
第9章 <wbr>中断
ISR中断服务程序
Request sources(with sub-register)表示INT_RXD0/INT_ TXD0等中断源(s3c2440共15个), 他们不同于request sources(with-out sub-register)
中断控制器的寄存器
SUBSRCPND和SRCPND寄存器表明有哪些中断被触发,正在等待处理;SUBMASK(intsubmsk)和mask(intmsk)用于屏蔽某些中断
中断示意图
第9章 <wbr>中断
1.request sources(without sub-registered)中的中断源被触发之后, srcpnd寄存器相应位置1,if INTMSK ==0(没有屏蔽)and FIQ(1),将进一步处理
2.request source(with sub -register)中的中断源被触发后, SUBSRCPND寄存器相应位被置1,if INTSUBMSK ==0没有屏蔽 ,then srcpnd相应位也被置1,接着同上(1)处处理.
(1)如果是,;FIQ——mode(intmod 寄存器)中为1的为对应中断是FIQ, 则cpu进入快速中断模式。
      (2)对于irq,可能同时有几个中断被触发。 未被INTMSK寄存器屏蔽的中断经过比较后选出优先级最高的中 断(通过仲裁器和priority), 此中断在INTPND寄存器中的相应位被置1, 然后cpu进入中断模式处理。 中断服务程序可以通过读取INTPND寄存器或者intoffs et寄存器来确定中断源
上图中priority表示中断的优先级判断,通过ptiotity寄存器进行设置
由此可知中断流程如下:
1.设置好中断模式和快速中断模式下的栈,when    FIQ,cpu进入中断模式,使用快速中断模式下的栈。
2.准备好中断处理函数
(1.)在异常中断向量表中设置好当进入中断模式或快速中断模式时的跳转函数,异常向量分别为0x00000018(中断模式的中断向量)、0x0000001c(FIQ的中断向量)。
(2)终端服务程序ISR
IRQ/FIQ 的跳转函数,最终将调用具体中断的服务函数
对于IRQ,读取INTPND寄存器或INTOFFSET寄存器的值来确定中断源,然后分别处理
对于FIQ,因为只有一个中断可以设为FIQ,无须判断中断源
 (3)清除中断:如果不清除中断,则cpu会误以为这个中断又发生一次。
          若ISR执行过程中,这个中断可能发生并不能丢弃、则在调用isr之前清除中断、这样在ISR执行过程中发生的中断能够被个寄存器再次记录并终止cpu;如果在ISR执行过程中,这个中断不会发生或者丢弃则在调用ISR之后清除中断。
     清除中断过程:首先,操作具体外设中断信号:其次,清除SUBSRPND,srcpnd寄存器中的相应位(写1);最后,清除INTPND寄存器相应位(写1),
3.进入、退出中断模式或快速中断模式时,需要保存、恢复被中断程序的运行环境。
对于IRQ,进入退出的代码如下:
sub lr,lr,#4      @计算返回地址
stmdb sp!,{r0-r12,lr}   @保存使用到的寄存器
.....
ldmia sp!,{r0-r12,pc}^ @中断返回 ;^表示将spsr的值赋给cpsr

对于FIQ,进入退出的代码如下:
sub lr,lr,#4   @计算返回地址
stmdb sp!,{r0-r7,lr}   @保存使用到的寄存器
......
ldmia sp!,{r0-r7,pc}^ @快速中断返回^表示将spsr的值赋给cpsr
4.根据具体中断,设置相关外设,如gpio中断,需要将相应引脚的功能设为“外部中断”设置中断触发条件(高、低电平触发,上、下降沿触发)
5.对于request sources(without sub-registered)的中断, 将INTSUBMSK寄存器设为0.
6.确定此中断的方式:IF FIQ  THEN INTMOD=1;IF IRQ THEN RIORITY 中设置优先级
7.if IRQ THEN INTMSK=0(FIQ 不受intmsk 寄存器影响)
8.设置cpsr寄存器中的i-bit位(irq)或f-bit(fiq)使能irq或fiq

9.1.3  中断寄存器
第9章 <wbr>中断
1.SUBSRCPND 寄存器
SUBSRCPND寄存器用来标识INT_RXD0、INT_TXD0等中断(共15个每bit对应一个),
while(int) if INTSUBMSK没有被屏蔽  srcpnd对应位=1(subsrcpnd若干位汇集 )
if      SUBSRCPND对应位==1,clear int ;
2.INTSUBMSK 
IF  INTSUBMSK对应位==1   屏蔽对应中断;
3.SRCPND
SRCPND 中每一位被用来表示一个或一类中断是否发生     IF SRCPND相应位==1   clear 中断;
4.INTMSK 
INTMSK 被用来屏蔽SRCPND寄存器所表示的中断,if intmsk相应位==1   对应屏蔽被中断(仅能屏蔽irq 不能屏蔽fiq)
5.INTMOD
if intmod相应位==1   对应的中断设为FIQ
6.PRIORITY寄存器
用于选出最优先级中断,中断优先级的判选通过7个仲裁器来完成: 6个一个仲裁器,1个二级仲裁器,结构如下图
第9章 <wbr>中断
第9章 <wbr>中断
第9章 <wbr>中断
即PRIORITY每3位控制一个仲裁器。 00xxxxxxxx00000000000
7.INTPND
经过中断优先级仲裁器选出有限级最高的中断后, 这个中断在INTPND寄存器的相应位被置1随后cpu将进入中 断模式处理它, 同一时间只有一个bit被置1:在ISR中根据这个位确定哪个是中断,往该位写1清除中断。
8.INTOFFSET寄存器
用来确定INTPND中哪一位被置1, 即INTPND寄存器中位【x】为1时, intoffset寄存器的值为x,在清除SRCPND、 INTPND寄存器时,INTOFFSET寄存器被自动清除。
EINTPND、SUBSRCPND、SRCPND、 INTPND需要写1清除!!!

head.S
@**************
@head.s
@set inital interrupt
@***************


.extern main
.text
.global _start
_start:
@***************************** ****************************** *******************           
@ 异常向量,本程序中,除Reset和HandleIRQ外, 其它异常都没有使用
@***************************** ****************************** *******************           
        Reset

@ 0x04: 未定义指令中止模式的向量地址
HandleUndef:
        HandleUndef

@ 0x08: 管理模式的向量地址,通过SWI指令进入此模式
HandleSWI:
        HandleSWI

@ 0x0c: 指令预取终止导致的异常的向量地址
HandlePrefetchAbort:
        HandlePrefetchAbort

@ 0x10: 数据访问终止导致的异常的向量地址
HandleDataAbort:
        HandleDataAbort

@ 0x14: 保留
HandleNotUsed:
        HandleNotUsed

@ 0x18: 中断模式的向量地址
        HandleIRQ

@ 0x1c: 快中断模式的向量地址
HandleFIQ:
        HandleFIQ

reset:
        ldr sp,=4096        @when reset ,the cpu is on cpu mode
        bl disable_watchdog @close watchdog
       
        msr cpsr_c,#0xd2        @11010010  irq mode
        ldr sp,=3072                  @set stack point sp_und

        msr cpsr_c,#0xd3            @11010011    superivor mode
        ldr sp,=4096        @set stack point sp_svc

        bl init_led        @init led gpio
        bl init_irq        @init intterupt in the init.c
        msr cpsr_c,#0x53        @open irq

        ldr lr,=halt_loop        @set return addr
        ldr pc,=main                  @go to main

halt_loop:
              halt_loop

HandleIRQ:
        sub lr,lr,#4        @return addr
        stmdb sp!,{r0-r12,lr}        @save reg

        ldr lr,=int_return        @set return addr after isr
        ldr pc,=EINT_Handle        @go to isr in the initerrupt.c

int_return:
        ldmia sp!,{r0-r12,pc}^        @now pc=lr that means ,return to main means cpsr=spsr;return



<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>操作票详情</title> <style> /* 全局字体放大 */ body, table, td, font, div { font-size: 18px !important; /* font-family: "黑体", sans-serif !important; */ } img { width: 255px !important; margin: 0 auto !important; } /* 打印专用样式,隐藏页眉页脚及多余边框 */ @media print { @page { margin: 0.5cm; /* 内容边距 */ size: A4; /* 明确纸张尺寸,避免 Chrome 自适应偏差 */ } /* 强制分页符样式(唯一定义,避免冲突) */ .force-page-break { page-break-after: always !important; height: 0 !important; line-height: 0 !important; padding: 0 !important; margin: 0 !important; border: none !important; } /* 防止表格跨页拆分 */ table { page-break-inside: avoid !important; border-collapse: collapse !important; width: 100% !important; /* 确保表格占满打印宽度 */ } /* 隐藏页面中无需打印的元素(如弹窗遮罩) */ #popupMask, #popupContainer { display: none !important; } /* 屏幕预览时隐藏分页符,仅打印时生效(可选) */ body:not(:printing) .force-page-break { display: none !important; } } /* 屏幕预览样式(与打印样式分离,避免干扰) */ #report1 { display: none; /* 仅模板隐藏,克隆后显式设置 display: table */ } .print-page { margin-bottom: 15px; max-width: 800px; margin: 0 auto; /* 预览时居中,与打印效果一致 */ } </style> <script> document.write(&#39;<script src="../../../common/js/ieswebutil.js?v=&#39; + new Date().getTime() + &#39;"><\/script>&#39;); </script> <script> // 使用loadBaseCss打印页面会有空白问题(bootstrap-theme会影响) loadCss([ CONFIG.UI_ROOT_NAME + &#39;/plugins/element-ui/theme-chalk/index&#39; + CONFIG.getTheme(), CONFIG.UI_ROOT_NAME + &#39;/common/css/reset&#39; + CONFIG.getTheme(),//滚动条样式 CONFIG.UI_ROOT_NAME + &#39;/scms/css/green/elementCommon&#39;,//提示窗需要使用插件 CONFIG.UI_ROOT_NAME + &#39;/scms/css/zhibiaoInfo/bjimg-green&#39;, CONFIG.UI_ROOT_NAME + &#39;/scms/css/zhibiaoInfo/pagination-green&#39;, CONFIG.UI_ROOT_NAME + &#39;/scms/css/zhibiaoInfo/zhibiao-green&#39;, CONFIG.UI_ROOT_NAME + &#39;/scms/css/zhibiaoInfo/czp&#39;, ]); </script> <script> loadBaseJs(); loadJs([CONFIG.UI_ROOT_NAME + &#39;/scms/js/zhibiaoInfo/jquery.pagination&#39;, CONFIG.UI_ROOT_NAME + &#39;/scms/js/api/zhibiao/zhibiaoApi&#39;]); </script> <!--通用js脚本,所有html界面引入--> <!-- <script> document.write("<script type=&#39;text/javascript&#39; src=&#39;js/common/utils.js?v=" + new Date().getTime() + "&#39;><" + &#39;/&#39; + &#39;script>&#39;); document.write("<script type=&#39;text/javascript&#39; src=&#39;js/common/main.js?v=" + new Date().getTime() + "&#39;><" + &#39;/&#39; + &#39;script>&#39;); </script> --> <script type="text/javascript"> function getCzpHeadData(operateTicketNo, areano) { var filterObj = new Object(); filterObj.ticketno = operateTicketNo; filterObj.areano = areano; API.zhibiao .getCzpHeadInfo(filterObj) .then((data) => { var czpHedaInfoData = data.data; if (typeof czpHedaInfoData == &#39;undefined&#39; || null == czpHedaInfoData || &#39;-1&#39; === czpHedaInfoData) { // alert(&#39;暂无此操作票详情!&#39;); this.vm.isTips = true; printPage() } else { $.each(czpHedaInfoData, function (i, val) { if (&#39;description&#39; === i) { val = newlineContent(val, 35); } if (&#39;ordertime&#39; === i) { val = getDateString4ZhibiaoInfo(val); } if (&#39;reporttime&#39; === i) { val = getDateString4ZhibiaoInfo(val); } if (&#39;operatetime&#39; === i) { val = getDateString4ZhibiaoInfo(val); } if (&#39;finishtime&#39; === i) { val = getDateString4ZhibiaoInfo(val); } if (&#39;note&#39; === i) { val = newlineContent(val, 60); } if (&#39;station&#39; === i) { // 从数据中获取bvName,若为空则默认空字符串 let bvName = czpHedaInfoData.bvName || &#39;&#39;; // 拼接bvName和station(若bvName存在则加空格分隔) val = bvName ? bvName + val : val; } $(&#39;#&#39; + i).html(val); }); $(&#39;#operateTicketNo&#39;).html(&#39;编号:&#39; + operateTicketNo); getCzpContentData(czpHedaInfoData.id); } }) .catch((err) => { console.log(err); }); } // 1. 强化分页符样式(添加到CSS中) const style = document.createElement(&#39;style&#39;); style.textContent = ` @media print { .force-page-break { page-break-after: always !important; clear: both !important; height: 0 !important; overflow: hidden !important; } /* 确保表格在打印时正确分页 */ table { page-break-inside: avoid !important; width: 100% !important; } /* 移除可能干扰打印的边距 */ body { margin: 0 !important; padding: 0 !important; } .print-page { page-break-inside: avoid !important; margin-bottom: 15px !important; /* 页间留白,确保分页清晰 */ } } /* 屏幕预览时也显示分页符(便于调试) */ .force-page-break { border-top: 1px dashed #ccc; margin: 10px 0; } `; document.head.appendChild(style); let globalTotalPages = 0; // 总页数 let globalCurrentPage = 0; // 当前页 function getCzpContentData(id) { var filterObj = new Object(); filterObj.id = id; API.zhibiao .getCzpContentInfo(filterObj) .then((res) => { var czContentInfoData = res.data || []; // 兜底:防止数据为null/undefined var totalDataLength = czContentInfoData.length; const pageSize = 22; globalTotalPages = Math.ceil(totalDataLength / pageSize); const needPagination = totalDataLength > pageSize; // 清空打印容器(关键:确保每次渲染从空开始) const $printContainer = $(&#39;#printContainer&#39;); $printContainer.html(&#39;&#39;); if (needPagination) { // 分页逻辑:逐页生成内容 for (let page = 0; page < globalTotalPages; page++) { globalCurrentPage = page + 1; // 1. 克隆模板表格(#report1) const $reportTemplate = $(&#39;#report1&#39;); if (!$reportTemplate.length) { console.error(&#39;未找到模板表格#report1,请检查HTML结构&#39;); return; // 模板不存在则终止 } const headerClone = $reportTemplate.clone(); // 2. 显示克隆的表格(核心:模板默认隐藏,克隆后必须手动显示) headerClone.css(&#39;display&#39;, &#39;table&#39;); // 关键修复:强制显示表格 // 3. 清空克隆表格中的内容区,准备填充当前页数据 const operateTicketNo = $(&#39;#operateTicketNo&#39;).html(); // 获取编号内容 $(&#39;#operateTicketNo&#39;, headerClone).html(operateTicketNo); // 3.2 赋值页码(新增逻辑:给独立单元格pageNumber赋值) $(&#39;#pageNumber&#39;, headerClone).html(`NO:${globalCurrentPage}/${globalTotalPages}`); const $originalContent = headerClone.find(&#39;#czpContentContainer&#39;); $originalContent.empty(); // 4. 计算当前页数据范围(防止数组越界) const startIndex = page * pageSize; const endIndex = Math.min((page + 1) * pageSize, totalDataLength); const currentPageData = czContentInfoData.slice(startIndex, endIndex); console.log(`第${page + 1}页数据:`, currentPageData); // 5. 构建当前页数据表格 const $contentContainer = $(&#39;<tbody id="czpContentContainer"></tbody>&#39;); currentPageData.forEach((item, index) => { // 校验数据完整性(防止item属性缺失导致的错误) if (!item) { console.warn(`第${page + 1}页第${index + 1}行数据为空`); return; } const operatestatus = item.operatestatus === 1 ? &#39;√&#39; : &#39;&#39;; const commandindex = item.commandindex || &#39;&#39;; // 兜底:防止undefined const description = newlineContent(item.description || &#39;&#39;, 50); const finishtime = getDateString4ZhibiaoInfo(item.finishtime || &#39;&#39;); const row = ` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;>${operatestatus}</td> <td class=&#39;report1_28&#39;>${commandindex}</td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39;>${description}</td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;>${finishtime}</td> </tr> `; $contentContainer.append(row); }); // 6. 最后一页添加“以下空白”行 if (page === globalTotalPages - 1) { $contentContainer.append(` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;></td> <td class=&#39;report1_28&#39;></td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39; style=&#39;text-align:center !important;font-size:24px !important; border:1px solid #000; padding:0px;&#39;> <div style=&#39;width:220px;height:30px;text-align:center;font-size:20px;border:1px solid #000;letter-spacing: 30px;margin:0 auto;display:flex;justify-content: flex-end&#39;>以下空白</div> </td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;></td> </tr> `); } // 7. 补充空白行至22行(保证每页行数一致) const currentRows = currentPageData.length + (page === globalTotalPages - 1 ? 1 : 0); const blankLinesNeed = pageSize - currentRows; for (let j = 0; j < blankLinesNeed; j++) { $contentContainer.append(` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;></td> <td class=&#39;report1_28&#39;></td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39;></td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;></td> </tr> `); } // 8. 替换克隆表格中的内容区 $originalContent.replaceWith($contentContainer); // 9. 创建页面容器并添加分页符(最后一页不加) const $pageContainer = $(&#39;<div class="print-page"></div>&#39;); $pageContainer.append(headerClone); if (page < globalTotalPages - 1) { $pageContainer.append("<div class=&#39;force-page-break&#39;></div>"); } // 10. 关键:将当前页添加到打印容器 $printContainer.append($pageContainer); console.log(`第${page + 1}页已添加到容器`); } } else { // 不分页逻辑(复用之前修复的代码) globalTotalPages = 1; globalCurrentPage = 1; // const headerClone = $(&#39;#report1&#39;).clone(); const $reportTemplate = $(&#39;#report1&#39;); if (!$reportTemplate.length) { console.error(&#39;未找到模板表格#report1,请检查HTML结构&#39;); return; } // 临时移除原表格的隐藏样式(克隆后恢复,不影响页面预览) $reportTemplate.css(&#39;display&#39;, &#39;table&#39;); const headerClone = $reportTemplate.clone(); $reportTemplate.css(&#39;display&#39;, &#39;none&#39;); // 恢复原模板隐藏状态 headerClone.css(&#39;display&#39;, &#39;table&#39;); // 显示克隆的表格 // 3. 赋值编号和页码 const operateTicketNo = $(&#39;#operateTicketNo&#39;).html(); $(&#39;#operateTicketNo&#39;, headerClone).html(operateTicketNo); // 编号 $(&#39;#pageNumber&#39;, headerClone).html(`NO:${globalCurrentPage}/${globalTotalPages}`); // 页码(1/1) const $originalContent = headerClone.find(&#39;#czpContentContainer&#39;); $originalContent.empty(); const $contentContainer = $(&#39;<tbody id="czpContentContainer"></tbody>&#39;); czContentInfoData.forEach((item) => { const operatestatus = item.operatestatus === 1 ? &#39;√&#39; : &#39;&#39;; const commandindex = item.commandindex || &#39;&#39;; const description = newlineContent(item.description || &#39;&#39;, 50); const finishtime = getDateString4ZhibiaoInfo(item.finishtime || &#39;&#39;); const row = ` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;>${operatestatus}</td> <td class=&#39;report1_28&#39;>${commandindex}</td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39;>${description}</td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;>${finishtime}</td> </tr> `; $contentContainer.append(row); }); $contentContainer.append(` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;></td> <td class=&#39;report1_28&#39;></td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39; style=&#39;text-align:center !important;font-size:24px !important; border:1px solid #000; padding:0px;&#39;> <div style=&#39;width:220px;height:30px;text-align:center;font-size:20px;border:1px solid #000;letter-spacing: 30px;margin:0 auto;display:flex;justify-content: flex-end&#39;>以下空白</div> </td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;></td> </tr> `); const totalRows = czContentInfoData.length + 1; const blankLinesNeed = pageSize - totalRows; for (let j = 0; j < blankLinesNeed; j++) { $contentContainer.append(` <tr rn=&#39;11&#39; height=&#39;18&#39; style=&#39;height:18px;&#39;> <td class=&#39;report1_32&#39; style=&#39;display:none;&#39;></td> <td class=&#39;report1_33&#39;></td> <td class=&#39;report1_28&#39;></td> <td colspan=&#39;22&#39; class=&#39;report1_14&#39;></td> <td colspan=&#39;4&#39; class=&#39;report1_14&#39;></td> </tr> `); } $originalContent.replaceWith($contentContainer); $printContainer.append(headerClone); } // 300ms延迟,足够浏览器渲染所有分页内容 setTimeout(() => { printPage(); }, 300); }) .catch((err) => { console.error(&#39;获取数据失败:&#39;, err); // 捕获错误并打印,避免代码中断 alert(&#39;加载数据失败,请重试&#39;); }); } // 调用打印方法 function printPage() { // 获取打印参数 let printFlag = getQueryVariable(&#39;print&#39;) if (printFlag == &#39;true&#39;) { window.print() } } $(document).ready(function () { var url = window.document.location.href; var result = getUrlParams(url); getCzpHeadData(result.operateTicketNo, result.areano); $(&#39;#ticketTitle&#39;).text(getRegionNameById(result.areano) + &#39;电力变电运维中心遥控操作票&#39;); }); </script> <!-- <style> /* 打印专用样式,隐藏页眉页脚 */ @media print { @page { /* 设置页面边距为0,让浏览器默认的页眉页脚没空间显示 不同浏览器对@page支持略有差异,部分浏览器可通过此方式隐藏 */ margin: 0.5cm; } /* 强制分页的类 */ .force-page-break { page-break-after: always !important; } /* 防止表格跨页拆分 */ table { page-break-inside: avoid !important; } } </style> --> </head> <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0"> <div id="czpInfo" style="width: 100%;"> <table id="rpt" align="center" style="width: 100%;"> <tbody> <tr> <td> <table align="center"> <tbody> <tr> <td> <!-- <style id="report1_style"> </style>--> <table id="report1" cellspacing="0" cellpadding="0" style="display: none;max-width: 800px; border-collapse: collapse; width: 100%;margin: 0 auto;"> <tbody> <tr rn="1" height="81" style="height: 81px"> <td class="report1_10" style="display: none"></td> <td id="ticketTitle" colspan="32" class="report1_22" style="font-size: 30px !important;">福建电力调度控制中心遥控操作票 </td> </tr> <tr rn="2" height="18" style="height: 18px"> <td class="report1_10" style="display: none">4</td> <td class="report1_36"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_3"></td> <td class="report1_11"></td> <td colspan="2" class="report1_35"></td> <td colspan="3" class="report1_30"> <font id="operateTicketNo" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </td> <td colspan="1" class="report1_30" style="text-align: right;"> <font id="pageNumber" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; margin-left: 10px; "></font> </td> <!--<td colspan="2" class="report1_31">NO:1/1</td>--> </tr> <tr height="18" style="height: 18px"> <td class="report1_5">1.</td> <td class="report1_2">发令人:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="notifiername" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2"></td> <td class="report1_2">接令人:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="notifiedname" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr height="18" style="height: 18px"> <td class="report1_5"></td> <td class="report1_2">发令时间:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="ordertime" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2"></td> <td class="report1_2">汇报时间:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="reporttime" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr height="18" style="height: 18px"> <td class="report1_5">2.</td> <td class="report1_2">操作变电站:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="station" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr height="18" style="height: 18px"> <td class="report1_5">3.</td> <td class="report1_2">操作任务:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="description" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "> #</font> </div> </td> </tr> <tr height="18" style="height: 18px"> <td class="report1_5">4.</td> <td class="report1_2">操作开始时间:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="operatetime" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2"></td> <td class="report1_2">终了时间:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="finishtime" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr rn="9" height="18" style="height: 18px"> <td class="report1_10" style="display: none"></td> <td class="report1_37">5.</td> <td class="report1_1">操作步骤</td> <td class="report1_1"></td> <td class="report1_25"></td> <td class="report1_25"></td> <td class="report1_25"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_4"></td> <td class="report1_21"></td> <td class="report1_21"></td> <td class="report1_21"></td> </tr> <tr rn="10" height="18" style="height: 18px"> <td class="report1_7" style="display: none"></td> <td class="report1_33">√</td> <td class="report1_15">顺序</td> <td colspan="22" class="report1_15"> 操&nbsp;&nbsp;&nbsp;作&nbsp;&nbsp;&nbsp;项&nbsp;&nbsp;&nbsp;目 </td> <td colspan="4" class="report1_13">完成时间</td> </tr> <!-- 操作步骤容器 --> <tbody id="czpContentContainer"></tbody> <tr rn="38" height="18" style="height: 18px"> <td class="report1_7" style="display: none"></td> <td rowspan="4" class="report1_18">备注:</td> <td id="note" rowspan="4" colspan="31" class="report1_19"></td> </tr> <tr rn="39" height="18" style="height: 18px"> <td class="report1_7" style="display: none"></td> </tr> <tr rn="40" height="18" style="height: 18px"> <td class="report1_7" style="display: none"></td> </tr> <tr rn="41" height="18" style="height: 18px"> <td class="report1_7" style="display: none"></td> </tr> <tr height="18" style="height: 18px"> <td class="report1_5">6.</td> <td class="report1_2">操作人:</td> <td colspan="5" class="report1_1"> <div style="line-height: 16px"> <font id="operator" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2"></td> <td class="report1_2">监护人:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font id="guardian" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_5"></td> <td class="report1_2">值班负责人:</td> <td colspan="9" class="report1_1"> <div style="line-height: 16px"> <font id="dutymaster" style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <!-- <tr height="18" style="height: 18px"> </tr> --> <tr height="18" style="height: 18px"> <td class="report1_5">7.</td> <td class="report1_2">评价情况:</td> <td class="report1_2">经检查本票为</td> <td colspan="3" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2">票,</td> <td class="report1_2">存在:</td> <td colspan="20" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr height="18" style="height: 18px; display: none"> <td class="report1_5">7.</td> <td class="report1_2">评价情况:</td> <td class="report1_2">经检查本票为</td> <td colspan="1" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2">票,</td> <td class="report1_2">存在:</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> </tr> <tr height="18" style="height: 18px"> <td class="report1_2"></td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <td class="report1_2">问题,</td> <td class="report1_2">已向</td> <td colspan="10" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <!-- <td class="report1_2"></td> --> <td class="report1_2" style="width: 40px;">指出</td> <td colspan="5" class="report1_1"> <div style="line-height: 16px"> <font style=" font-family: 黑体; font-size: 12px; font-weight: normal; font-style: normal; text-decoration: none; color: #000000; "></font> </div> </td> <!--<td class="report1_9"></td> <td class="report1_2">月</td> <td class="report1_9"></td> <td class="report1_2">日</td> <td class="report1_10"></td>--> </tr> <tr height="18" style="height: 18px;"> <td class="report1_5">8.</td> <td class="report1_2">评价人:</td> <td class="report1_5" style="width: 80px;text-align: left !important;"> <div style="line-height: 16px; border-bottom: 1px solid #000; display: inline-block; width: 70px; height: 40px;"> </div> </td> <td class="report1_5" style="width: 50px;"> <div style="line-height: 16px; border-bottom: 1px solid #000; display: inline-block; width: 50px; height: 40px;"> </div> </td> <td class="report1_2" style="width: 15px;">年</td> <td class="report1_5" style="width: 50px;"> <div style="line-height: 16px; border-bottom: 1px solid #000; display: inline-block; width: 50px; height: 40px;"> </div> </td> <td class="report1_2" style="width: 15px;">月</td> <td class="report1_5" style="width: 50px;"> <div style="line-height: 16px; border-bottom: 1px solid #000; display: inline-block; width: 50px; height: 40px;"> </div> </td> <td class="report1_2" style="width: 15px;">日</td> </tr> </tbody> </table> <div id="printContainer"></div> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <div id="popupMask" style="position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; opacity: 0.4; background-color: rgb(51, 51, 51); display: none"> </div> <div id="popupContainer" style="position: absolute; z-index: 901; display: none"> <div id="popupInner" style="border: 2px solid #000000; background-color: #ffffff"> <div style=" background-color: #486cae; color: #ffffff; font-weight: bold; height: 17px; padding: 4px; border-bottom: 2px solid #000000; border-top: 1px solid #78a3f2; border-left: 1px solid #78a3f2; border-right: 1px solid #204095; position: relative; z-index: 903; " id="popupTitleBar"> <div id="popupTitle" style="float: left; font-size: 14px"></div> <div id="popupControls" style="float: right; cursor: pointer; cursor: hand"> <span style=" text-align: center; font-size: 14px; background-color: gray; width: 16px; height: 16px; color: #000000; border-left: 1px solid #cccccc; border-top: 1px solid #cccccc; border-right: 1px solid #555555; border-bottom: 1px solid #555555; " id="popCloseBox" onclick="rq_hidePopWin();">X</span> </div> </div> </div> </div> </div> <script> var vm = new Vue({ el: "#czpInfo", data() { return { // 决定何时弹出提示信息 isTips: false, } }, watch: { isTips() { // 提示信息 this.$notify({ title: &#39;提示&#39;, message: &#39;暂无此操作票详情&#39;, type: &#39;warning&#39;, duration: 1500 }); } } }) </script> </body> </html>在谷歌浏览器109版本会出现顶部重影,分页异常,超出范围的问题
最新发布
09-11
### 顶部重影问题 - **调整元素定位**:若元素定位使用了 `position: absolute` 或 `position: fixed`,可能因定位不准确导致重影。确保元素的定位属性和偏移量设置正确。 ```css /* 示例:修正绝对定位元素的位置 */ .absolute-element { position: absolute; top: 0; left: 0; /* 确保没有多余的偏移 */ } ``` - **检查 z-index**:元素的 `z-index` 属性可能导致层叠顺序混乱,从而产生重影。调整 `z-index` 确保元素按预期层叠。 ```css /* 示例:调整元素的 z-index */ .overlay { z-index: 10; } .content { z-index: 1; } ``` - **清除浮动**:浮动元素可能影响布局,导致重影。使用 `clearfix` 类清除浮动。 ```css /* 示例:清除浮动 */ .clearfix::after { content: ""; display: table; clear: both; } ``` ### 分页异常问题 - **使用分页属性**:利用 `page-break-before`、`page-break-after` 和 `page-break-inside` 等 CSS 属性控制分页。 ```css /* 示例:避免在特定元素内分页 */ .page-content { page-break-inside: avoid; } /* 示例:在特定元素前强制分页 */ .section-title { page-break-before: always; } ``` - **调整元素高度**:元素高度过大可能导致分页异常。适当调整元素高度,确保内容能合理分页。 ```css /* 示例:限制元素高度 */ .long-content { max-height: 500px; overflow: auto; } ``` ### 超出范围问题 - **设置合适的宽度**:确保元素宽度不会超出打印区域。使用百分比或 `max-width` 属性控制宽度。 ```css /* 示例:设置元素最大宽度 */ .print-container { max-width: 100%; } ``` - **调整边距和内边距**:过大的边距和内边距可能导致内容超出范围。适当调整 `margin` 和 `padding` 属性。 ```css /* 示例:调整元素边距和内边距 */ .print-element { margin: 10px; padding: 5px; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值