公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

你好,
    我的非 OS bootloader 可以下载非 OS APP,但是下载 FreeRTOS APP NG,当我测试这个 APP 自重置时,我发现它会崩溃,我的重置部分如下,我当然已经确认了原来的十六进制和 pflash 数据,是匹配的,有什么建议吗? 谢谢。

顺便说一句:如果我将这个 APP 的起始地址从 0xa000c000 改为 0xa0000020 那就可以自我重置了。

应用程序重置部分:

	        uint16 endInitSafetyPassword = IfxScuWdt_getSafetyWatchdogPasswordInline();
	        __disable();
	        portENTER_CRITICAL();
	        vTaskEndScheduler();
	        IfxScuWdt_clearSafetyEndinitInline(endInitSafetyPassword);
	        MODULE_SCU.SWRSTCON.B.SWRSTREQ=1;
	        IfxScuWdt_setSafetyEndinitInline(endInitSafetyPassword);

 

跳转至 “应用程序” 部分:

   __disable();
   __asm("movh.a  a15,#@his(ApplIntJmpTable)");
   __asm("lea     a15,[a15]@los(ApplIntJmpTable)");
   __asm("ld.a    a15,[a15]");
   __asm("isync");
   __asm("ji      a15");

 

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
我猜你遇到了与 话题 描述的类似的问题,在这个问题中,core1 和 core2 在跳跃后都不会运行。
BR,
Jeremy

在原帖中查看解决方案

0 点赞
35 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
其实,我对你的问题还是有点困惑,你的意思是非操作系统引导加载程序 CAN 成功跳转到非操作系统APP,但是,如果APP集成了操作系统,它就会失败。
而且,如果自重置发生后APP定位在0xa0000020,引导加载程序仍然 CAN 成功跳转到APP,但如果APP定位在0xa000c000就不起作用了,对吗?
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

1. 是的,下载引导加载程序后,非 OS 应用程序运行正常。

2. 自重置不会让引导加载程序进入闪存,因为我的非 OS APP 在调试模式下没有引导加载程序的情况下可以自重置,所以我做了同样的实验。

谢谢。

Bootloader-> 非操作系统应用程序,OK

Bootload > er-FreeRTOS 应用程序,NG

在调试模式下:

不带引导加载程序的自重置,非 OS APP,0xa0000020=OK,0xa000c000=OK

不带引导加载程序的自重置,FreeRTOS APP,0xa0000020=OK,0xa000c000=ng

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
看起来有点奇怪。
我想知道您是否 CAN 分享 CAN 复制您遇到的现象的演示代码。
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

我已经向你发送了相关的源代码,如果你有任何问题请告诉我。

谢谢。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
我已经检查过你的代码了,我发现中断映射实际上是 LCF_INTVEC0_START 从 END_ADDR 开始,而 LCF_TRAPVEC1_START 和 LCF_TRAPVEC2_START 也都在 END_ADDR 之外。
所以我想建议你修改它们,以确保它们必须在 START_ADDR 和 END_ADDR 的范围内。

code.png
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

我按照你的建议修改 lsl,下载后应用程序仍然无法运行,在消费者 MCU 论坛上,他们讨论中断向量表映射,你认为中断向量表会影响这个吗?

顺便说一句:下载后,在调试模式下,我发现空闲挂钩功能中的程序计数将停止。

谢谢。

void vApplicationIdleHook( void )
{
    OsTasks_setupTimerInterrupt(&MODULE_STM0);
    while (1)
    {
    }
}

 

//#define _StartFrom0xA0000020

#ifdef _StartFrom0xA0000020
#define LCF_INTVEC0_START   0x801F4000
#define LCF_INTVEC1_START   0x801F5000
#define LCF_INTVEC2_START   0x801F3000

#define LCF_TRAPVEC0_START  0x80000100
#define LCF_TRAPVEC1_START  0x801F6200
#define LCF_TRAPVEC2_START  0x801F6000

#else
#define START_ADDR			0xA000C000
#define END_ADDR			(START_ADDR + 160k)

#define LCF_INTVEC0_START   START_ADDR+0x6000
#define LCF_INTVEC1_START   START_ADDR+0x7000
#define LCF_INTVEC2_START   START_ADDR+0x5000

#define LCF_TRAPVEC0_START  START_ADDR+0x100
#define LCF_TRAPVEC1_START  START_ADDR+0x200
#define LCF_TRAPVEC2_START  START_ADDR+0x300
#endif

#define INTTAB0             (LCF_INTVEC0_START)
#define INTTAB1             (LCF_INTVEC1_START)
#define INTTAB2             (LCF_INTVEC2_START)

#define TRAPTAB0            (LCF_TRAPVEC0_START)
#define TRAPTAB1            (LCF_TRAPVEC1_START)
#define TRAPTAB2            (LCF_TRAPVEC2_START)

#ifdef _StartFrom0xA0000020
#define BMH_0 	0x80000000	//C000
#define RESET 	0x80000020
#define iCONST	0x80000040
#define EndAddr	0x8001FFFC
#define BMH_1 	0x80020000
#else
#define BMH_0 	0xA000C000	//C000
#define RESET 	0xA000C020
#define iCONST	0xA000C040
#define EndAddr	0xA001FFFC
#define BMH_1 	0xA0020000
#endif

 

| pfls0| bmh_0       | .rodata.bmhd_0 (10773)          | 0xa000c000 |
| pfls0| reset       | .text.start (10771)             | 0xa000c020 |
| pfls0| trapvec_tc0 | .text.traptab_cpu0 (10587)      | 0xa000c100 |
| pfls0| trapvec_tc1 | .text.traptab_cpu1 (10588)      | 0xa000c200 |
| pfls0| trapvec_tc2 | .text.traptab_cpu2 (10589)      | 0xa000c300 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.001 (11444)| 0xa0012020 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.002 (12035)| 0xa0012040 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.003 (12175)| 0xa0012060 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.004 (12177)| 0xa0012080 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.005 (11772)| 0xa00120a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.006 (11770)| 0xa00120c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.007 (11768)| 0xa00120e0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.008 (12298)| 0xa0012100 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.009 (12383)| 0xa0012120 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00b (12389)| 0xa0012160 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00d (12385)| 0xa00121a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00e (12387)| 0xa00121c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00f (12391)| 0xa00121e0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.010 (12393)| 0xa0012200 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.011 (12067)| 0xa0012220 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.012 (12069)| 0xa0012240 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.013 (12071)| 0xa0012260 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.014 (12061)| 0xa0012280 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.015 (12063)| 0xa00122a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.016 (12065)| 0xa00122c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.01e (11728)| 0xa00123c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.020 (11730)| 0xa0012400 |
| pfls0| BOOT_LABEL  | .rodata._Boot_label (11652)     | 0xa001fffc |
| pfls0| bmh_1       | .rodata.bmhd_1 (10774)          | 0xa0020000 |

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
根据您的测试,如果注释掉 Cpu0_Main.c 中的 OS_Tasks_init() 函数,引导加载 CAN 跳转 FreeRTOS APP,对吗?
此外,我还猜这个问题与中断向量有关,因为我在检查地图文件时发现中断向量位于 Pflash1 中。

2023-08-01_18h13_54.png
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

感谢你的建议和支持,最后,我想我找到了 RTOS @APP 无法运行的根本原因。 经过深度跟踪和调试后,当我禁用 ADC (ISR) 和 QSPI (DMA) 相关功能然后使用引导加载程序下载 RTOS @APP 时,它就可以工作了。 因为我的主函数会引用 ADC 值和 QSPI 值,但是 ADC 值始终为零且 QSPI 总是读取空数据流,所以如果 ADC 和 QSPI 出了什么问题会导致我的 RTOS @APP 无法正常工作。

所以我还需要你的建议,我不知道为什么 ADC 和 QSPI 能起作用 NG,我找到了这篇文章
Bootloader 和 DMA,这篇文章意味着带有 RTOS 的 QSPI (DMA) 可能有问题,你有什么建议吗?
谢谢。

 

顺便说一句:我在 ADC.C/ SPI.C 里的 ADC/QSPI 函数

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
谢谢你的回复。
我对你的测试结果有点困惑,你的意思是应用程序(与 RTOS 集成)在以下两种情况下也无法运行吗?
FreeRTOS 应用程序(不带引导加载程序),位于 0xa00000200xa000c000

我想知道你是否 CAN 详细描述它。

BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

测试结果如下表:

result.png

ADC 实验代码部分如下所示,如果 ADC 正常,系统将在 adc_Value > acc_Voltage 时启动,但是在 NG (*1) 的情况下,adc_Value 总是零效应系统无法启动,当我绕过这个部分时 RTOS @APP 运行正常。

 

void MainTask(void)
{
    if(EnableSystem()==1)
    {
        //Do something
    }    
}
boolean EnableSystem(void)
{
    if(ADC_Value>ACC_Voltage)
    {
       //Start system 
       return 1;
    }
    else
    {
       //Wait ACC ON
       return 0;
    }
}

 

 

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

@LukeCY_Wei ,
谢谢你的回复。
根据你的测试结果,根本原因与enableSystem () 的故障有关,对吗?
顺便说一句,我在你实际分享的演示代码中没有找到这个函数。
此外,我共享一个链接器文件来从 0x80100000 创建应用程序存储,重置函数的指针是 0x80100020,请试一试。
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米
    1. 是的,因为我优化了一些代码部分,你 CAN 参考“multican.c”

if(ADCSampling[CHANNEL_AN27]

2. 好的,我今天试一试然后尽快反馈,谢谢!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@LukeCY_Wei ,
在我看来,假设 adcSampling [CHANNEL_AN27] = 0,然后返回,它应该不会影响应用程序的整体运行,因为还有其他任务还在运行。
同时,core0 和 core1 有可能同时访问 adcSampling,它应该设置同步机制来避免这种情况。
最后,请确认ADC采样[CHANNEL_AN27]的值 CAN 是否超过实际IGN_VOLTAGE。
BR,
Jeremy

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米 
    1. 是的,其他任务是活动的,但是禁用 CAN 通信的ADC值(IGN OFF),因此主要功能并不总是空闲。
    2. 同意,我将添加同步规则来保护 adcSampling。
    3. 在正常情况下,adcSampling [CHANNEL_AN27] 的值介于 2200~2400 之间。

坏消息,我用了你的链接文件 ADC 和 QSPI 还是异常,附上地图哈哈。

ADC 普通情况:

adc ok.png

ADC 异常情况:

adc ng.png

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
我猜你遇到了与 话题 描述的类似的问题,在这个问题中,core1 和 core2 在跳跃后都不会运行。
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

我想你说得对,我的应用程序现在运行正常,我会做更多的测试,如果还有其他问题,我会问你的建议。

谢谢。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 

我很高兴听到这个消息,此外,我想知道您是否 CAN 总结一下您为使应用程序运行所做的句柄 好的,它 CAN 帮助其他遇到类似问题的人有效地解决问题。
BR,
Jeremy

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,杰里米

没问题,然后我参考这个 话题 来修改我的 bootloader 的启动代码,如下所示

1.移除 excute Core1 和 Core2 部分,如图 1 所示。

2.删除 Core1 和 Core2 Cstart 文件,如图 1 所示。

并在调试模式下运行启动代码,我们 CAN 看到 Core1 和 Core2 也始终如图 1 一样挂起。

谢谢。

图 1:

solution.png

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

没问题,我引用这个 线程 然后修改我的引导加载程序的启动代码,如下所示

1.删除执行芯1 和芯2 部分作为图1。

2.删除核心1 和酷2 Cstart 文件作为图1。

在调试模式下运行启动代码,我们 CAN 看到Core1 和Core2 也始终暂停,如图1 所示。

谢谢

图一:

solution.png

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

你好 @LukeCY_Wei 

我很高兴听到这个消息,此外,我想知道您是否 CAN 总结一下您为使应用程序运行而所做的处理好吧,它 CAN 帮助遇到类似问题的其他人有效地解决问题。
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

我认为你是正确的,我的应用程序现在运行正常,我会做更多的测试,如果有其他问题,我会询问你的建议。

谢谢

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
我想你遇到了与所描述的 线程 类似的问题,其中core1 和core2 都不会在跳跃后运行。
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米 
    1。是的,其他任务处于活动状态,但ADC 值(IGN OFF)禁用 CAN 通信,因此主功能始终处于空闲状态。
    2.同意,我将添加同步规则以保护ADC 采样。
    3.在正常情况下,ADC 取样[通道_AN27] 的值介于2200 〜 2400 之间。

坏消息,我用你的链接文件ADC 和QSPI 仍然异常,附上的是地图和lsl。

ADC 正常情况:

adc ok.png

ADC 异常情况:

adc ng.png

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@LukeCY_Wei ,
在我看来,假设ADC 采样[CHANNEL_AN27] = 0,然后返回,它应该不会影响整个APP 运行,因为还有其他任务仍在运行。
同时,有可能发生core0 和core1 同时访问ADC 采样,它应该设置一个同步机制来避免这种情况。
最后,请确认ADCSampling[CHANNEL_AN27]的值实际是否 CAN 超过IGN_VOLTAGE。
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米
    1。是的,因为我优化了一些代码部分,你 CAN 参考“multican.c”

if(ADCSampling[CHANNEL_AN27]

2. 好的,我今天会尝试并尽快反馈,谢谢!

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

@LukeCY_Wei ,
感谢您的回复。
根据您的测试结果,根本原因与enableSystem()的故障有关,是正确的吗?
顺便说一句,我没有在你实际共享的演示代码中找到这个函数。
此外,我共享一个链接器文件以从0x80100000 制作应用程序存储,并且重置功能的指针是0x80100020,请尝试一下。
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

测试结果如下表:

result.png

ADC 实验代码部分如下,如果ADC 正常,系统将在ADC_Value > ACC_V 时启动,但在NG(* 1)的情况下,ADC_value 始终为零效果系统不会启动,当我绕过此部分时,RTOS @ APP 运行确定。

 

void MainTask(void)
{
    if(EnableSystem()==1)
    {
        //Do something
    }    
}
boolean EnableSystem(void)
{
    if(ADC_Value>ACC_Voltage)
    {
       //Start system 
       return 1;
    }
    else
    {
       //Wait ACC ON
       return 0;
    }
}

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
感谢您的回复。
我对你的测试结果有点困惑,你的意思是应用程序(与RTOS 集成)也无法在以下两种情况下运行?
自由服务器应用程序(没有引导加载程序),位于 0XA

我想知道你是否 CAN 详细描述一下。


杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

感谢您的建议和支持,最后,我想我发现RTOS @APP 的根本原因没有运行。经过深度跟踪和调试后,当我禁用ADC(ISR)和QSPI(DMA)相关功能时,然后使用引导加载程序下载RTOS @APP,它的工作。因为我的主要函数将引用ADC 值和QSPI 值,但ADC 值始终为零,QSPI 始终读取空数据流,如果ADC 和QSPI 出现错误将导致我的RTOS @APP 不会发生。

所以我仍然需要你的建议,我不知道为什么ADC 和QSPI 工作NG,我发现这篇文章
引导加载程序和DMA,这篇文章意味着与RTOS 的QSPI(DMA)可能有一些问题,你有什么建议吗?
谢谢

 

顺便说一句:我的ADC /QSPI 函数

 

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
根据您的测试,如果注释掉Cpu0_Main.c中的OS_Tasks_init()函数,引导加载CAN 跳转FreeRTOS APP,对吗?
此外,我也猜这个问题与中断向量有关,因为我在检查映射文件时发现中断向量位于Pflash1 中。

2023-08-01_18h13_54.png
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

我按照您的建议修改lsl,下载后APP 仍然无法运行,在消费者MCU 论坛中,他们讨论了中断矢量表映射,您认为中断矢量表会影响这个吗?

顺便说一句:下载后,在调试模式下,我发现程序计数将在空闲钩子功能中停止。

谢谢

void vApplicationIdleHook( void )
{
    OsTasks_setupTimerInterrupt(&MODULE_STM0);
    while (1)
    {
    }
}

 

//#define _StartFrom0xA0000020

#ifdef _StartFrom0xA0000020
#define LCF_INTVEC0_START   0x801F4000
#define LCF_INTVEC1_START   0x801F5000
#define LCF_INTVEC2_START   0x801F3000

#define LCF_TRAPVEC0_START  0x80000100
#define LCF_TRAPVEC1_START  0x801F6200
#define LCF_TRAPVEC2_START  0x801F6000

#else
#define START_ADDR			0xA000C000
#define END_ADDR			(START_ADDR + 160k)

#define LCF_INTVEC0_START   START_ADDR+0x6000
#define LCF_INTVEC1_START   START_ADDR+0x7000
#define LCF_INTVEC2_START   START_ADDR+0x5000

#define LCF_TRAPVEC0_START  START_ADDR+0x100
#define LCF_TRAPVEC1_START  START_ADDR+0x200
#define LCF_TRAPVEC2_START  START_ADDR+0x300
#endif

#define INTTAB0             (LCF_INTVEC0_START)
#define INTTAB1             (LCF_INTVEC1_START)
#define INTTAB2             (LCF_INTVEC2_START)

#define TRAPTAB0            (LCF_TRAPVEC0_START)
#define TRAPTAB1            (LCF_TRAPVEC1_START)
#define TRAPTAB2            (LCF_TRAPVEC2_START)

#ifdef _StartFrom0xA0000020
#define BMH_0 	0x80000000	//C000
#define RESET 	0x80000020
#define iCONST	0x80000040
#define EndAddr	0x8001FFFC
#define BMH_1 	0x80020000
#else
#define BMH_0 	0xA000C000	//C000
#define RESET 	0xA000C020
#define iCONST	0xA000C040
#define EndAddr	0xA001FFFC
#define BMH_1 	0xA0020000
#endif

 

| pfls0| bmh_0       | .rodata.bmhd_0 (10773)          | 0xa000c000 |
| pfls0| reset       | .text.start (10771)             | 0xa000c020 |
| pfls0| trapvec_tc0 | .text.traptab_cpu0 (10587)      | 0xa000c100 |
| pfls0| trapvec_tc1 | .text.traptab_cpu1 (10588)      | 0xa000c200 |
| pfls0| trapvec_tc2 | .text.traptab_cpu2 (10589)      | 0xa000c300 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.001 (11444)| 0xa0012020 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.002 (12035)| 0xa0012040 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.003 (12175)| 0xa0012060 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.004 (12177)| 0xa0012080 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.005 (11772)| 0xa00120a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.006 (11770)| 0xa00120c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.007 (11768)| 0xa00120e0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.008 (12298)| 0xa0012100 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.009 (12383)| 0xa0012120 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00b (12389)| 0xa0012160 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00d (12385)| 0xa00121a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00e (12387)| 0xa00121c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.00f (12391)| 0xa00121e0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.010 (12393)| 0xa0012200 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.011 (12067)| 0xa0012220 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.012 (12069)| 0xa0012240 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.013 (12071)| 0xa0012260 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.014 (12061)| 0xa0012280 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.015 (12063)| 0xa00122a0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.016 (12065)| 0xa00122c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.01e (11728)| 0xa00123c0 |
| pfls0| int_tab_tc0 | .text.inttab0.intvec.020 (11730)| 0xa0012400 |
| pfls0| BOOT_LABEL  | .rodata._Boot_label (11652)     | 0xa001fffc |
| pfls0| bmh_1       | .rodata.bmhd_1 (10774)          | 0xa0020000 |

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
我已经检查了你的代码,我发现中断映射是LCF_INTVEC0_START 从终端开始实际上,并且LCF_TRAVEC1_START 和LCF_TRAVEC2_START 都超出了结束_ ADDR。
所以我想建议你改造它们,以确保它们必须在START_ADDR 和END_ADDR 的范围内。

code.png
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

我已经PM 相关的源代码给你,如果您有任何疑问,请告诉我。

谢谢

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨 @LukeCY_Wei 
这似乎有点奇怪。
我想知道您是否 CAN 分享 CAN 复制您遇到的现象的演示代码。
BR,
杰里米

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨杰里米

1. 是的,非OS APP 在引导加载程序下载后运行正常。

2. 自重置不会将引导加载程序放入闪存中,因为在调试模式下没有引导加载程序的情况下,我的非操作系统APP 自重置确定,所以我做了同样的实验。

谢谢

引导加载程序-> 非操作系统APP,确定

引导加载程序-> 自由软件应用程序,NG

在调试模式下:

没有引导加载程序的自我重置,非操作系统应用程序,0xA0000020 = 确定,0xA000C000= 确定

没有引导加载程序的自我重置,自由服务应用程序,0XA0000020 = 确定,0XA000C000 = 不合格

0 点赞