硬汉嵌入式论坛

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

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

[复制链接]

2

主题

13

回帖

24

积分

新手上路

积分
24
发表于 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万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

0

主题

99

回帖

99

积分

初级会员

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

0

主题

99

回帖

99

积分

初级会员

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

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
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

主题

13

回帖

24

积分

新手上路

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

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

加载到RAM更好。
回复

使用道具 举报

19

主题

234

回帖

291

积分

高级会员

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

使用道具 举报

210

主题

1044

回帖

1684

积分

至尊会员

More we do, more we can do.

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 05:57 , Processed in 0.173833 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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