在keil uvision3中怎么生成.sct文件

在keil uvision3中怎么生成.sct文件,第1张

默认设置下,keil会自动生成一个sct文件,如果没有特别需要,使用这一个默认分散加载描述文件就够了但如果你要精确指定一些RAM区或者程序区的话,就要你自己写了,这个分散加载文件有一个格式的,最好看一下keil的帮助文件,因为这不是几句话就可以说的清的给你一个我正在使用的sct文件,并简短注释一下:

LR_IROM1 0x00000000 0x00080000 {

ER_IROM1 0x00000000 0x00080000 { ; 可用的Flash区域,用256KB,从Flash启动

o (RESET, +First)

(InRoot$$Sections)

ANY (+RO)

}

RW_IRAM1 0x10000000 0x0000A000 { ; 普通读写数据,共40KB

ANY (+RW +ZI )

}

RW_IRAM3 0x1000A000 0x00001000{ ;存储冗余数据,共4KB

ANY (MY_BK)

}

RW_IRAM2 0x1000B000 UNINIT 0x00001000 { ;存储上电非零初始化区域,共4KB

ANY (NO_INIT)

}

}

如果你使用的是ST的库的话,那么在汇编启动文件中已经定义好了。和大多数芯片不一样的是,stm32的中断向量表中存放的不是一条跳转指令,而是一个入口地址。假如说要自己编写的话,一定要用这样的方式:DCD XXXXX (其中XXXX就是中断服务函数的入口地址,至于转到这个函数由芯片自己处理)

中断向量表默认情况下起始于0x04,(0x00用于堆栈栈顶的地址)对于STM32来说,中断向量表的长度大概是60多还是80多字(记不太清了)每个字代表一个中断向量

假如使用的是官方库函数的话,那么所有的中断向量表都已经定义好了比如,TIM1的中断他可能就定义了类似 DCD TIM1ISR 之类的语句

那么我们在主函数中只要定义一个一个isr即可, 比如 定义一个void TIM1ISR()函数就行(必须与那么函数对应)然后设置下nvic和相关外设寄存器即可

中断的工作过程就是中断向量的映射过程至于中断重映射是指把中断向量表移动到其它的位置上去通常和分散加载一起使用,为了使程序在RAM中运行,自然也要把中断向量表放到RAM中,加快程序的运行速度如果是新手,先别研究这么深的内容,就把中断向量表定死在flash的开头部分,默认地址即可

startups大部分内容不是被C调用的,而是在C程序之前运行的。m3上电之后会先从0地址处读取MSP,然后从0x4地址处读取复位向量,接着跳转到复位异常服务程序Reset_Handler(这些是m3内核自动做的,不需要编程)。如果你用MDK的话,在工程设置Debug下的run to main()上的勾去掉,然后进入调试,你会发现你运行的第一句就是Reset_Handler的第一句。

Reset_Handler就是在startups中定义的,它一般会对系统初始化,然后进入main函数。

向量表也是在startups中定义的,至于为什么程序编译之后向量表一定在0地址处,是因为向量表的前面会有类似AREA RESET, CODE, READONLY的声明。在MDK生成的分散加载文件中,RESET被设置在flash的0地址处,这样就规定了向量表的地址。

以上就是关于在keil uvision3中怎么生成.sct文件全部的内容,包括:在keil uvision3中怎么生成.sct文件、中断向量表STM32怎样配置、ARM m3 C是怎么调用startup.s文件的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9819950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存