发新帖我要提问
12
返回列表
打印
[STM8]

做过STM8--bootloader的进来围观指导一下~~

[复制链接]
楼主: hzocce
手机看帖
扫描二维码
随时随地手机跟帖
21
hzocce|  楼主 | 2019-7-16 16:42 | 只看该作者 回帖奖励 |倒序浏览
kingkits 发表于 2019-7-16 15:52
你统一把中断向量表定义到RAM中就好了,具体怎么实现,应该有资料说明的

RAM 是不是也是一个地址?
我看上面的就是从0x8000开始,到0xffff结束。

使用特权

评论回复
22
hzocce|  楼主 | 2019-7-16 16:42 | 只看该作者
aolin 发表于 2019-7-16 15:52
你的问题在于中断向量表没有做remap所致

如何remap?

使用特权

评论回复
23
aolin| | 2019-7-16 18:22 | 只看该作者
在bootloader里面remap
extern void _stext();     /* startup routine */
struct interrupt_vector const UserISR_IRQ[32] @ MAIN_USER_RESET_ADDR;

//redirected interrupt table
struct interrupt_vector const _vectab[] = {
    {0x82, (interrupt_handler_t)_stext}, /* reset */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 1)}, /* trap  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 2)}, /* irq0  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 3)}, /* irq1  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 4)}, /* irq2  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 5)}, /* irq3  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 6)}, /* irq4  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 7)}, /* irq5  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 8)}, /* irq6  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+ 9)}, /* irq7  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+10)}, /* irq8  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+11)}, /* irq9  */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+12)}, /* irq10 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+13)}, /* irq11 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+14)}, /* irq12 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+15)}, /* irq13 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+16)}, /* irq14 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+17)}, /* irq15 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+18)}, /* irq16 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+19)}, /* irq17 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+20)}, /* irq18 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+21)}, /* irq19 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+22)}, /* irq20 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+23)}, /* irq21 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+24)}, /* irq22 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+25)}, /* irq23 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+26)}, /* irq24 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+27)}, /* irq25 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+28)}, /* irq26 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+29)}, /* irq27 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+30)}, /* irq28 */
    {0x82, (interrupt_handler_t)(UserISR_IRQ+31)}, /* irq29 */
};

使用特权

评论回复
24
hzocce|  楼主 | 2019-7-17 13:40 | 只看该作者
aolin 发表于 2019-7-16 18:22
在bootloader里面remap
extern void _stext();     /* startup routine */
struct interrupt_vector const  ...

感谢"aolin"的指导!

也就是将这个函数,放在main函数之外的就可以?
有写它就可以,不需要在其他地方做任何的调动?

我看这个地址地址偏移了?
原来应该就是0x8000了? 然后选择从MAIN_USER_RESET_ADDR地址开始?
是这个意思么?

使用特权

评论回复
25
liuxiang5119| | 2019-7-17 14:45 | 只看该作者
之前有做过stm32f207的boot   记得是在APP 函数启动后 要加一句向量跳转吧  //SCB->VTOR = FLASH_BASE | 0x10000; /* Vector Table Relocation in Internal FLASH. */   好久不做  忘了  boot里边应该也有个地址跳转的

使用特权

评论回复
26
hzocce|  楼主 | 2019-7-18 08:30 | 只看该作者
liuxiang5119 发表于 2019-7-17 14:45
之前有做过stm32f207的boot   记得是在APP 函数启动后 要加一句向量跳转吧  //SCB->VTOR = FLASH_BASE | 0x ...

STM8 听说这样跳不了

使用特权

评论回复
27
aolin| | 2019-7-18 09:02 | 只看该作者
hzocce 发表于 2019-7-17 13:40
感谢"aolin"的指导!

也就是将这个函数,放在main函数之外的就可以?

bootloader里面的中断向量表用这个表代替,这个表内的跳转地址实际就是调转到你应用程序内的中断向量表的地址

使用特权

评论回复
28
hzocce|  楼主 | 2019-7-18 13:57 | 只看该作者
aolin 发表于 2019-7-18 09:02
bootloader里面的中断向量表用这个表代替,这个表内的跳转地址实际就是调转到你应用程序内的中断向量表的 ...

我的意思这个向量表放在什么地方?

struct interrupt_vector const _vectab[] = {
    {0x82, (interrupt_handler_t)_stext}, /* reset */
//---------------省略--------------------------
};

void main(void){

//----省略----
}


是这种形式么?

使用特权

评论回复
29
aolin| | 2019-7-18 14:15 | 只看该作者
hzocce 发表于 2019-7-18 13:57
我的意思这个向量表放在什么地方?

struct interrupt_vector const _vectab[] = {

这个表就是中断向量表呀,你平时的程序的中断向量表的位置呀
不过这个需要放在你的bootloader程序的中断向量表的位置

使用特权

评论回复
30
hzocce|  楼主 | 2019-7-18 14:39 | 只看该作者
aolin 发表于 2019-7-18 14:15
这个表就是中断向量表呀,你平时的程序的中断向量表的位置呀
不过这个需要放在你的bootloader程序的中断 ...

高手,我从来没有写过中断向量,也没有去注意过这个。
真的不知道放在哪里去!

我只知道开启中断,然后在it.c的函数中去添加我需要中断处理的内容,没有涉及过表。

还麻烦指导~~

使用特权

评论回复
31
aolin| | 2019-7-18 20:05 | 只看该作者
hzocce 发表于 2019-7-18 14:39
高手,我从来没有写过中断向量,也没有去注意过这个。
真的不知道放在哪里去!

不是吧
那你是用什么工具开发的?
STVD配cosmic吗? stvd在建立工程时会自动生成一个名字为stm8_interrupt_vector.c的源文件,这个文件的内容就是中断向量表,你就在上面改就可以了
/*        BASIC INTERRUPT VECTOR TABLE FOR STM8 devices
*        Copyright (c) 2007 STMicroelectronics
*/

typedef void @far (*interrupt_handler_t)(void);

struct interrupt_vector {
        unsigned char interrupt_instruction;
        interrupt_handler_t interrupt_handler;
};

@far @interrupt void NonHandledInterrupt (void)
{
        /* in order to detect unexpected events during development,
           it is recommended to set a breakpoint on the following instruction
        */
        return;
}

extern void _stext();     /* startup routine */

struct interrupt_vector const _vectab[] = {
        {0x82, (interrupt_handler_t)_stext}, /* reset */
        {0x82, NonHandledInterrupt}, /* trap  */
        {0x82, NonHandledInterrupt}, /* irq0  */
        {0x82, NonHandledInterrupt}, /* irq1  */
        {0x82, NonHandledInterrupt}, /* irq2  */
        {0x82, NonHandledInterrupt}, /* irq3  */
        {0x82, NonHandledInterrupt}, /* irq4  */
        {0x82, NonHandledInterrupt}, /* irq5  */
        {0x82, NonHandledInterrupt}, /* irq6  */
        {0x82, NonHandledInterrupt}, /* irq7  */
        {0x82, NonHandledInterrupt}, /* irq8  */
        {0x82, NonHandledInterrupt}, /* irq9  */
        {0x82, NonHandledInterrupt}, /* irq10 */
        {0x82, NonHandledInterrupt}, /* irq11 */
        {0x82, NonHandledInterrupt}, /* irq12 */
        {0x82, NonHandledInterrupt}, /* irq13 */
        {0x82, NonHandledInterrupt}, /* irq14 */
        {0x82, NonHandledInterrupt}, /* irq15 */
        {0x82, NonHandledInterrupt}, /* irq16 */
        {0x82, NonHandledInterrupt}, /* irq17 */
        {0x82, NonHandledInterrupt}, /* irq18 */
        {0x82, NonHandledInterrupt}, /* irq19 */
        {0x82, NonHandledInterrupt}, /* irq20 */
        {0x82, NonHandledInterrupt}, /* irq21 */
        {0x82, NonHandledInterrupt}, /* irq22 */
        {0x82, NonHandledInterrupt}, /* irq23 */
        {0x82, NonHandledInterrupt}, /* irq24 */
        {0x82, NonHandledInterrupt}, /* irq25 */
        {0x82, NonHandledInterrupt}, /* irq26 */
        {0x82, NonHandledInterrupt}, /* irq27 */
        {0x82, NonHandledInterrupt}, /* irq28 */
        {0x82, NonHandledInterrupt}, /* irq29 */
};

使用特权

评论回复
32
hzocce|  楼主 | 2019-7-22 08:36 | 只看该作者
aolin 发表于 2019-7-18 20:05
不是吧
那你是用什么工具开发的?
STVD配cosmic吗? stvd在建立工程时会自动生成一个名字为stm8_interrupt ...

难怪,原来是STVD~~

我用的是IAR ,所有不知道这个放在哪里去。
IAR 怎么弄呢?

使用特权

评论回复
33
aolin| | 2019-7-22 08:56 | 只看该作者
hzocce 发表于 2019-7-22 08:36
难怪,原来是STVD~~

我用的是IAR ,所有不知道这个放在哪里去。

趁此机会果断转STVD呀

使用特权

评论回复
34
hzocce|  楼主 | 2019-7-23 09:00 | 只看该作者
aolin 发表于 2019-7-22 08:56
趁此机会果断转STVD呀

能指导下IAR么?

使用特权

评论回复
35
aolin| | 2019-7-23 12:02 | 只看该作者
hzocce 发表于 2019-7-23 09:00
能指导下IAR么?

我都没有用过iar for stm8,无能为力

使用特权

评论回复
36
hzocce|  楼主 | 2019-7-24 08:33 | 只看该作者
aolin 发表于 2019-7-23 12:02
我都没有用过iar for stm8,无能为力

谢谢~~~

使用特权

评论回复
37
蝴蝶泉2018| | 2019-7-24 12:16 | 只看该作者
建议下载一下官方的应用比价AN2659和相应的软件例程。里面有IAR的工程。看一遍就一目了然了,知道程序架构以及编译器特殊设置的方式

使用特权

评论回复
38
磨砂| | 2019-8-6 10:24 | 只看该作者
.icf文件是干嘛用的呢

使用特权

评论回复
39
晓伍| | 2019-8-6 10:28 | 只看该作者
目前还没接触过stm8  因该很小巧啊

使用特权

评论回复
40
八层楼| | 2019-8-6 10:37 | 只看该作者
请教楼主  bootloader的引脚是如何连接的呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则