精华内容
下载资源
问答
  • 因为之前写个stm32的IAP...1、如何设置中断向量,也就是说中断向量的重定向 2、如何配置程序的起始地址 3、如何从IAP跳转到APP程序 4、使用库函数要注意的地方(防止被坑) 说文章的时候我已经完成了一个最简单的I...

    转载:https://blog.csdn.net/chen244798611/article/details/51334489
    因为之前写个stm32的IAP升级程序,所以我总结了做IAP升级的三个主要的难点:

    1、如何设置中断向量,也就是说中断向量的重定向

    2、如何配置程序的起始地址

    3、如何从IAP跳转到APP程序

    4、使用库函数要注意的地方(防止被坑)

    说文章的时候我已经完成了一个最简单的IAP升级程序,可以通过串口接收bin文件写入到flash里面,然后再运行。

    1、如何设置中断向量,也就是说中断向量的重定向

    stm8不像stm32那样有个一寄存器管理着中断向量的地址,所以stm32的中断可以任意设置(符合要求的情况之下),但是stm8的中断向量表是固定的

    在0X8000地址,不能修改,所以BOOT区不能开中断,否则会和APP区的中断打架,但是APP区的一但开启中断后就会跳转到0x8000地址,这样就跳到了BOOT区,因此需要使用跳转指令将中断跳回到APP区,

    通过下面的方式就可以重定向APP的中断向量,但是bootloader就不可以使用中断了,但是网上有人说可以把中断定向到arm里面,通过arm的属性在bootloader和APP分别重定向,就可以实现bootloader和APP都使用中断,但是我还不会 ,如果你们会可以留言告诉我 谢谢

    __root const long reintvec[]@".intvec"=
    {
    0x82008080,0x8200A804,0x8200A808,0x8200A80c,
    0x8200A810,0x8200A814,0x8200A818,0x8200A81c,
    0x8200A820,0x8200A824,0x8200A828,0x8200A82c,
    0x8200A830,0x8200A834,0x8200A838,0x8200A83c,
    0x8200A840,0x8200A844,0x8200A848,0x8200A84c,
    0x8200A850,0x8200A854,0x8200A858,0x8200A85c,
    0x8200A860,0x8200A864,0x8200A868,0x8200A86c,
    0x8200A870,0x8200A874,0x8200A878,0x8200A87c,
    }; 这就是我的重定向中断 ,因为stm8的flash从0x8000开始到0xA800 正好是0x2800字节 ,这个数正好是10K,也就是说我给bootloader预留了10K的空间,而我用的stm8s207R8t6是64k

    2、如何配置程序的起始地址

    配置bootloader程序空间的大小是在一个后缀为icf的文件里面设置,这个文件在iar的安装目录里面的有

    我安装的目录如下C:\Program Files (x86)\IAR Systems\Embedded Workbench 7.0\stm8\config

    在这里面可以看到好多.icf后缀的文件,然后选择一个和芯片一致的,我就选择lnkstm8s207r8.icf,复制到我们的工程里面,再在IAR里面如下设置

    r

    然后打开icf文件修改如下

    define region NearFuncCode = [from 0x8000 to 0xA7FF];
    define region FarFuncCode = [from 0x8000 to 0xA7FF];
    // | [from 0x10000 to 0x17FFF];
    define region HugeFuncCode = [from 0x8000 to 0xA7FF];

    这面都是说修改的是bootloader的程序

    下面是修改app的icf文件

    define region NearFuncCode = [from 0xA800 to 0x17FFF];
    define region FarFuncCode = [from 0xA800 to 0xFFFF]
    | [from 0x10000 to 0x17FFF];
    define region HugeFuncCode = [from 0xA800 to 0x17FFF];

    到这里地址的修改也就完成了,下面开始说下跳转

    3、如何从IAP跳转到APP程序

    stm8的跳转很容易,利用如下汇编就可以实现跳转

    asm("LDW X, SP ");
    asm(“LD A, $FF”);
    asm("LD XL, A ");
    asm("LDW SP, X ");
    asm(“JPF $A800”);

    这个就是实现跳转到app的程序

    4、使用库函数要注意的地方(防止被坑)

    使用库函数读写flash的时候一定要注意,因为stm8的flash的库函数有点问题,他把地址都强制转换成16位的了,16位的寻址范围是0至0xFFFF的64K空间,但是stm8的flash使用0x8000开始,64kflash的大小空间到了0x17FFF,所以如果不修改库函数的读写就会出错。

    这就是库函数的,我们要把它改成uint32_t这样才可以读写超过0xFFFF的地址

    作者:做了不一定能实现但不做一定不会实现
    来源:CSDN
    原文:https://blog.csdn.net/chen244798611/article/details/51334489
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 详细介绍了DSP中断向量表的编写。以及中断子向量表
  • 中断向量表

    2021-01-21 13:34:06
    中断向量表(interrupt vector table,IVT)是中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址称为中断向量。在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类...

    中断向量表(interrupt vector table,IVT)是中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址称为中断向量。在Pc/AT中由硬件产生的中断标识码被称为中断类型号(当然,中断类型号还有其他的产生方法,如指令中直接给出、CPU自动形成等),即在中断响应期间8259A产生的是当前请求中断的最高优先级的中断源的中断类型号。中断类型号和中断向量之间有下面的关系: 中断类型号×4=存放中断向量的首地址 有了存放中断向量的首地址,从该地址开始的4个存储单元中取出的就是中断服务程序的入口。

    介绍

    是指中断服务程序入口地址的偏移量与段基值一个中断向量占据4字节空间。中断向量表是8086系统内存最低端1K字节空间,它的作用就是按照中断类型号从小到大的顺序存储对应的中断向量,总共存储256个中断向量。在中断响应过程中,CPU通过从接口电路获取的中断类型号(中断向量号)计算对应中断向量在表中的位置,并从中断向量表中获取中断向量,将程序流程转向中断服务程序的入口地址。

    列表

    80x86系统是把所有的中断向量集中起来,按中断类型号从小到大的顺序存放到存储器的某一区域内,这个存放中断向量的存储区叫做中断向量表,即中断服务程序入口地址表。

    由于中断向量表可以在操作系统层面灵活修改,因此,不同的系统的中断向量表可能是不同的。此外,intel在CPU的保护模式下,占用了0x00 ~ 0x1F共32个中断号,在Linux下,是从0x20开始用于系统自身的中断的,包括8259芯片的中断重置。

    BIOS(实模式)的中断向量表如下:

    80x86

    I/O ADDR

    INT TYPE(16进制)

    FUNCTION

    00 ~ 03

    0

    除法溢出中断

    04 ~ 07

    1

    单步(用于DEBUG)

    08 ~ 0B

    2

    非屏蔽中断(NMI)

    0C ~ 0F

    3

    断点中断(用于DEBUG)

    10 ~ 13

    4

    溢出中断

    14 ~ 17

    5

    打印屏幕

    18 ~ 1F

    6/7

    保留

    8259主片

    I/O ADDR

    INT TYPE(16进制)

    FUNCTION

    20 ~ 23

    8

    定时器(IRQ0)

    24 ~ 27

    9

    键盘(IRQ1)

    28 ~ 2B

    A

    彩色/图形(IRQ2)

    2C ~ 2F

    B

    串行通信COM2(IRQ3)

    30 ~ 33

    C

    串行通信COM1(IRQ4)

    34 ~ 37

    D

    LPT2控制器中断(IRQ5)

    38 ~ 3B

    E

    磁盘控制器中断(IRQ6)

    3C ~ 3F

    F

    LPT1控制器中断(IRQ7)

    BIOS

    I/O ADDR

    INT TYPE(16进制)

    FUNCTION

    40 ~43

    10

    视频显示 I/O

    44 ~ 47

    11

    设备检验

    48 ~ 4B

    12

    测定存储器容量

    4C ~ 4F

    13

    磁盘 I/O

    50 ~ 53

    14

    RS-232 串行口 I/O

    54 ~ 57

    15

    系统描述表指针

    58 ~ 5B

    16

    键盘 I/O

    5C ~ 5F

    17

    打印机 I/O

    60 ~ 63

    18

    ROM BASIC 入口代码

    64 ~ 67

    19

    引导装入程序

    68 ~ 6B

    1A

    日时钟

    提供用户中断

    I/O ADDR

    INT TYPE(16进制)

    FUNCTION

    6C ~ 6F

    1B

    Ctrl - Break 控制的软中断

    70 ~ 73

    1C

    定时器控制的软中断

    74 ~ 77

    1D

    视频参数块

    78 ~ 7B

    1E

    软盘参数块

    7C ~ 7F

    1F

    图形字符扩展码

    在DOS系统(实模式)下,从0x20开始,用于操作系统本身。

    DOS

    I/O ADDR

    INT TYPE(16进制)

    FUNCTION

    80 ~ 83

    20

    DOS 中断返回

    84 ~ 87

    21

    DOS 系统功能调用

    88 ~ 8B

    22

    程序中止时 DOS 返回地址(用户不能直接调用)

    8C ~ 8F

    23

    Ctrl - Break 处理地址(用户不能直接调用)

    90 ~ 93

    24

    严重错误处理(用户不能直接调用)

    94 ~ 97

    25

    绝对磁盘读功能

    98 ~ 9B

    26

    绝对磁盘写功能

    9C ~ 9F

    27

    终止并驻留程序

    A0 ~ A3

    28

    DOS安全使用

    A4 ~ A7

    29

    快速写字符

    A8 ~ AB

    2A

    Microsoft 网络接口

    B8 ~ BB

    2E

    基本 SHELL 程序装入

    BC ~ BF

    2F

    多路服务中断

    CC ~ CF

    33

    鼠标中断

    104 ~ 107

    41

    硬盘参数块

    118 ~ 11B

    46

    第二硬盘参数块

    11C ~ 3FF

    47 ~ FF

    BASIC 中断

    保护模式

    在Linux下(保护模式),没有使用BIOS设置的中断向量表,0x00 ~ 0x1F是CPU保护模式下的默认中断向量,而0x20开始,都是被Linux系统重新设置的。

    X86占用的中断向量表如下:

    向量号

    助记符

    说明

    类型

    错误号

    产生源

    0

    #DE

    除出错

    故障

    DIV或IDIV指令。

    1

    #DB

    调试

    故障/陷阱

    任何代码或数据引用,或是INT 1指令。

    2

    --

    NMI中断

    中断

    非屏蔽外部中断。

    3

    #BP

    断点

    陷阱

    INT 3指令。

    4

    #OF

    溢出

    陷阱

    INTO指令。

    5

    #BR

    边界范围超出

    故障

    BOUND指令。

    6

    #UD

    无效操作码

    故障

    UD2指令或保留的操作码。

    7

    #NM

    设备不存在

    故障

    浮点或WAIT/FWAIT指令。

    8

    #DF

    双重错误

    异常终止

    有(0)

    任何可产生异常、NMI或INTR的指令。

    9

    --

    协处理器段超越(保留)

    故障

    浮点指令

    10

    #TS

    无效的任务状态段TSS

    故障

    任务交换或访问TSS

    11

    #NP

    段不存在

    故障

    加载段寄存器或访问系统段

    12

    #SS

    堆栈段错误

    故障

    堆栈操作或SS寄存器加载

    13

    #GP

    一般保护错误

    故障

    任何内存引用和其他保护检查

    14

    #PF

    页面错误

    故障

    任何内存引用

    15

    --

    (intel保留)

     

     

    16

    #MF

    x87 FPU浮点错误

    故障

     

    17

    #AC

    对齐检查

    故障

    有(0)

    对内存中任何数据的引用。

    18

    #MC

    机器检查

    异常终止

    错误码(若有)和产生源与CPU类型有关。

    19

    #XF

    SIMD浮点异常

    故障

     

    Linux自己设置的中断以后再添加。

    展开全文
  • 中断向量表地址范围? 答:中断就是CPU在执行当前程序时由于内外部事件引起CPU暂时停止当前正在执行的程序而转向执行请求CPU暂时停止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量...

    什么是中断?什么是中断向量?中断向量表的地址范围?
    答:中断就是CPU在执行当前程序时由于内外部事件引起CPU暂时停止当前正在执行的程序而转向执行请求CPU暂时停止的内外部事件的服务程序,该程序处理完后又返回继续执行被停止的程序;中断向量是中断处理子程序的入口地址;地址范围是00000H-003FFH。

    中断向量表的功能是什么?若中断向量号分别为1AH和20H,则它们的中断向量在中断向量表的什么位置上?
    答:中断向量表的功能是当中断源发出中断请求时,即可查找该表,找出其中断向量,就可转入相应的中断服务子程序。1AH在中断向量表的位置是1AH*4=68H在中断向量表0000:0068处;20H在中断向量表的位置是80H在中断向量表0000:0080处。

    展开全文
  • 8086中断向量表

    2019-02-16 20:10:24
    中断向量表: 用来存放中断码对应中断处理程序的入口地址,一个地址包括段地址和偏移地址,高地址存放段地址,低地址存放偏移地址 需要四个字节来存储中断处理程序的入口地址,256个中断信号处理程序需要1024个字节...
  • AVR Tmega128 中断向量表

    2010-01-07 17:18:05
    AVR Tmega128 中断向量表 中断向量表 中断向量号 中断向量 AVR中断向量表 mega128中断向量表
  • 单片机中断向量表

    2012-04-12 23:05:57
    单片机中断向量表
  • Cortex-M3 异常中断向量表 【Cortex-M3异常与中断】 支持10个系统异常和最多240个外部中断; 支持3个固定的高优先级和多达256级的可编程优先级,支持128级抢占; #0~15在Cortex-M3中定义,IRQ#0~239中断由各个...

    Cortex-M3 异常中断向量表

    【Cortex-M3异常与中断】

    • 支持10个系统异常和最多240个外部中断;
    • 支持3个固定的高优先级和多达256级的可编程优先级,支持128级抢占;
    • #0~15在Cortex-M3中定义,IRQ#0~239中断由各个芯片厂商定义;

    【Cortex-M3异常中断向量表】

    • 向量表定义了中断处理程序的入口地址,缺省情况下,向量表位于零地址处;
    • 响应中断时,Cortex-M3会根据中断号从向量表中找出对应的中断处理程序的入口地址;
    • 每个表项占用4字节;
    • 位置0x00000000处保存的是MSP的初始值;

    【中断向量表】

    【中断向量表的跳转】

     

    展开全文
  • 中断向量表和中断入口两个概念 中断向量表的位置在启动文件中startup_stm32f10x_hd.s中,可以看到定义了很多的中断函数, 这些函数是依次排列的,那就是依次给它们分配了空间。这些空间的地址就是中断入口,如果想改...
  • 异常向量表和中断向量表的关系 什么是异常? 异常:因为内部或者外部的一些事件,导致处理器停下正在处理的工作,转而去处理这些发生的事件。 当正常的程序执行流程发生暂时的停止时,称之为异常,例如处理一个...
  • 一般统一放置在中断向量表中;中断向量表存放在内存特定的位置上。 PC系列及其兼容机上,系统在内存0-3FFH的1KB作为中断向量表,可存放0-255个中断向量。 PC系列及其兼容机中断号,从 00-被零除错误 开始,到 01...
  • 80x86 中断向量表

    千次阅读 2017-06-07 12:23:29
    1. 系统引导时,中断向量表放在内存何处?  系统刚引导时,内存0x00000到0x0003FF共1KB的空间用于存放中断向量表。每个中断向量占用4个字节,共可存储256个中断向量。 2. 系统引导时,处在实模式下,只可寻址1MB...
  • 异常向量表和中断向量表的区别

    千次阅读 2017-03-22 22:08:03
    今天在看csapp,上面提到的异常和终端,突然让我想起来去年在学微机的时候并没有把两者的区别...今天终于明白了就是在x86中,是不区分中断和异常的,只有一张中断向量表。如果你们也是用的那本教材,请记住前一张图是x8
  • 1、中断号定义 在stm32f10x.h中定义枚举类型IRQn中,定义了各个中断...CM3的中有一个强大而方便的NVIC,它是属于Cortex内核的器件,中断向量表中60个中断都由它来处理。NVIC是Cortex-M3核心的一部分,关于它的资料...
  • STM32中断向量表偏移地址配置方法

    千次阅读 2018-05-09 17:10:18
    以将中断向量表偏移地址改到0x8005000为例第一种方式: 设置system_stm32f1xx.c文件 #defineVECT_TAB_OFFSET 0x5000 在void SystemInit (void)函数中通过“SCB->VTOR =FLASH_BASE | VECT_TAB_OFFSET”命令...
  • 中断向量 中断向量表

    千次阅读 2015-05-27 11:24:39
    2、中断向量:早期的微机系统中将由硬件产生的中断标识码(中断源的识别标志,可用来形成相应的中断服务程序的入口地址或存放中断服务程序的首地址)称为中断向量。在某些计算机中,中断向量的位置存放一条跳转到...
  • 中断向量表 关于DOS编程的256个中断
  • 中断向量,中断向量表 ,中断服务函数

    千次阅读 多人点赞 2019-07-29 12:31:52
    所谓中断是指CPU在正常执行程序的过程中,由于内部/外部事件的触发或由程序的预先安排,引起CPU暂时中断当前正在运行的程序,而转去...中断向量表:中断类型号与相应中断源的中断处理程序入口地址之间的连接表; ...
  • BIOS 中断向量表

    2019-04-04 22:02:10
    在bochs虚拟器调试中输入info ivt可以查看BIOS中断向量表 具体说明如下: 中断 描述 INT 00h CPU:除零错,或商不合法时触发 INT 01h CPU:单步陷阱,TF标记为打开状态时,每条指令执行后...
  • 这里写目录标题先验知识回顾控制寄存器回顾1、8086中断类型1、外部可屏蔽中断2、外部不可屏蔽中断3、除法错中断4、单步中断5、断点中断6、溢出中断7、软中断2、8086中断向量表3、8086中断响应1、外部可屏蔽中断响应2...
  • 汇编语言常用的一些中断指令: 中断 向量表 希望有点用处

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,531
精华内容 8,612
关键字:

中断向量表地址