硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1745|回复: 10
收起左侧

[MDK] sct文件可否将vector放到不同的Flash地址

[复制链接]

2

主题

15

回帖

26

积分

新手上路

积分
26
发表于 2023-4-24 17:03:23 | 显示全部楼层 |阅读模式
请问,有没有办法实现类似下面的sct文件,希望实现将RESET段放到Flash内部2个不同的地址上,分别是0x00000000和0x00008000
目前这个写法,连接的时候回直接报错。
.\Objects\app.axf: Error: L6223E: Ambiguous selectors found for startup.o(RESET) from Exec regions ER_IROM1 and ER_IROM3.



LR_IROM1 0x00000000 0x00010000  {    ; load region size_region
  ER_IROM1 0x00000000 0x00000100  {  ; load address = execution address
   *.o (RESET, +First)
  }

  ER_IROM2 0x00000100 FIXED 0x00007EFF  {  ; load address = execution address
   .ANY (+RO)
  }

  ER_IROM3 0x00008000 FIXED 0x00008000  {  ; load address = execution address
   *.o (RESET, +First)
  }

  RW_IRAM1 0x10000000 0x00001000  {  ; RW data
   .ANY (+RW +ZI)
  }
}





回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2023-4-25 09:44:31 | 显示全部楼层
这种方法应该不行,还是上电后,手动复制贴向量表到想要的位置吧
回复

使用道具 举报

0

主题

123

回帖

123

积分

初级会员

积分
123
发表于 2023-4-25 10:11:39 | 显示全部楼层
在c文件定义const char数组RESET_1和RESET_2,数据通过宏定义来统一,然后再分散加载或用__attribute__((section(".ARM.__at_0xXXXXXXXX" ))))放到指定位置。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2023-4-25 10:27:32 | 显示全部楼层
ilcvm 发表于 2023-4-25 10:11
在c文件定义const char数组RESET_1和RESET_2,数据通过宏定义来统一,然后再分散加载或用__attribute__((se ...

这种方式不好操作,中断向量表里面中断的实际地址是编译的时候确定的。
回复

使用道具 举报

0

主题

123

回帖

123

积分

初级会员

积分
123
发表于 2023-4-25 11:41:43 | 显示全部楼层
eric2013 发表于 2023-4-25 10:27
这种方式不好操作,中断向量表里面中断的实际地址是编译的时候确定的。

用C文件定位中断向量的具体操作其实ARM就给了例子,可以参考一下
https://github.com/ARM-software/ ... ce/startup_Device.c
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2023-4-25 11:51:06 | 显示全部楼层
ilcvm 发表于 2023-4-25 11:41
用C文件定位中断向量的具体操作其实ARM就给了例子,可以参考一下
https://github.com/ARM-software/CMSI ...

谢谢分享,确实不方便。需要用户把这些都罗列出来,

/* Exceptions */
void NMI_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
void HardFault_Handler      (void) __attribute__ ((weak));
void MemManage_Handler      (void) __attribute__ ((weak, alias("Default_Handler")));
void BusFault_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
void UsageFault_Handler     (void) __attribute__ ((weak, alias("Default_Handler")));
void SecureFault_Handler    (void) __attribute__ ((weak, alias("Default_Handler")));
void SVC_Handler            (void) __attribute__ ((weak, alias("Default_Handler")));
void DebugMon_Handler       (void) __attribute__ ((weak, alias("Default_Handler")));
void PendSV_Handler         (void) __attribute__ ((weak, alias("Default_Handler")));
void SysTick_Handler        (void) __attribute__ ((weak, alias("Default_Handler")));

回复

使用道具 举报

2

主题

15

回帖

26

积分

新手上路

积分
26
 楼主| 发表于 2023-4-25 14:02:59 | 显示全部楼层
eric2013 发表于 2023-4-25 09:44
这种方法应该不行,还是上电后,手动复制贴向量表到想要的位置吧

这边是打算放在flash的不同位置,的确没有能想到更好办法了,谢谢。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
116197
QQ
发表于 2023-4-25 15:18:22 | 显示全部楼层
yinjinzhong 发表于 2023-4-25 14:02
这边是打算放在flash的不同位置,的确没有能想到更好办法了,谢谢。

加载到RAM更好。
回复

使用道具 举报

23

主题

335

回帖

404

积分

高级会员

积分
404
发表于 2023-4-25 15:22:43 | 显示全部楼层
可以自己写个程序,修改将bin文件的内容,比如你的需求,不过先要在程序里将这个位置预留出来,比如 const uint8_t RESET_CODE[1024] __attribute__((section(".ARM.__at_0x00008000")));
回复

使用道具 举报

218

主题

1106

回帖

1770

积分

至尊会员

More we do, more we can do.

积分
1770
发表于 2023-4-25 23:52:38 | 显示全部楼层
看你需求,定义两个内容相同的区就可以。
回复

使用道具 举报

0

主题

10

回帖

10

积分

新手上路

积分
10
发表于 2025-5-24 17:58:28 | 显示全部楼层
yinjinzhong 发表于 2023-4-25 14:02
这边是打算放在flash的不同位置,的确没有能想到更好办法了,谢谢。

可以再建一个启动文件,再通过连接脚本,放置到指定位置

[C] 纯文本查看 复制代码
;               /* reset Vector Mapped to at Address 0 */
                AREA    RESET_Ram, DATA, READONLY
                EXPORT  __Vectors_Ram
                EXPORT  __Vectors_End_Ram
                EXPORT  __Vectors_Size_Ram

__Vectors_Ram   DCD     0                      ; Top of Stack
                DCD     0                     ; Reset Handler
                DCD     NMI_Handler                       ; NMI Handler
                DCD     HardFault_Handler                 ; Hard Fault Handler
                DCD     MemManage_Handler                 ; MPU Fault Handler

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-9 23:53 , Processed in 0.286038 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表