如果按如下方式配置链接器、我有运行正常的 FreeRTOS:
/******* 此地图工作正常 /
/*------------------ *
定义大小为4G 的存储器内存内存;
define region vectors = mem:[来自0x00000000大小0x00000020];
定义区域内核=内存:[0x00000020大小0x00008000];
定义区闪存=内存:[来自0x00008020大小0x00177FE0]
| mem:[来自0x00180000大小0x00180000];
define region stack = mem:[来自0x08000000大小0x00000800];
定义区域 Kram = mem:[来自0x08000800大小0x00000800];
定义区域 RAM =内存:[从(0x08000800+0x00000800)大小(0x0003F800 - 0x00000800)];
定义块堆、大小= 0x800、对齐= 8{};
通过副本{readwrite}进行初始化;
不初始化{section.noinit};
放入向量{readonly section .intvecs};
放入内核{readonly section .kernelTEXT};
置于闪存{readonly}中;
放入 RAM{readwrite section .kernelHEAP};
放入 Kram{readwrite section .kernelBSS};
放入 RAM{readwrite};
放入 RAM{block heap};
/*------------------ *
当我从如下所示的任何其他地址开始时、RTOS 在创建第一个任务时停止。
它在下面的 xTaskCreate 函数中的指令"BaseType_t xRunningPrivileged = prvRaisePrivilege ()"上停止。 之前和之后的寄存器也显示在下面。
它向量指向地址0x8 (如果它是一个真正 的 vPortSWI、为什么不向量控制地址0x10108?)。 如何定义链接器 cmd 文件和 init 矢量表?
basetype_t MPU_xTaskCreate (taskFunction_t pxTaskCode、const char * const pcName、const uint16_t usStackDepth、void * const pvParameters、UBaseType_t uxPriority、TaskHandle_t * const pxCreatedTask) { BaseType_t xrackPrivilege = t、ruxTaskName = vruntyf、vrxrtrueh、vrunteName (vrackName = vrunteTaskName = vrnh、vrunteRTxrx renth、vrunteTaskName = vrunteTaskName;vrunteRTf pxCreatedTask ); portRESET_privile( xPrivileged Running); return xReturn; }
/******* 此地图不起作用 /
/*------------------ *
定义大小为4G 的存储器内存内存;
定义区域矢量=内存:[自0x00010100大小0x00000020];
定义区域内核=内存:[自0x00010120大小0x00008000];
定义区闪存=内存:[来自0x00018120大小0x00167EE0]
| mem:[来自0x00180000大小0x00180000];
define region stack = mem:[来自0x08000000大小0x00000800];
定义区域 Kram = mem:[来自0x08000800大小0x00000800];
定义区域 RAM =内存:[从(0x08000800+0x00000800)大小(0x0003F800 - 0x00000800)];
定义块堆、大小= 0x800、对齐= 8{};
通过副本{readwrite}进行初始化;
不初始化{section.noinit};
放入向量{readonly section .intvecs};
放入内核{readonly section .kernelTEXT};
置于闪存{readonly}中;
放入 RAM{readwrite section .kernelHEAP};
放入 Kram{readwrite section .kernelBSS};
放入 RAM{readwrite};
放入 RAM{block heap};
/*------------------ *