关于freertos 移植的问题,工程采用FreeRTOS-寄存器版本
Build target 'FreeRTOS_STC32G_Demo'compiling port.c...
assembling .\Objects\port.src...
linking...
*** ERROR L138: CODE GENERATION: PROBLEM WHEN PROCESSING INSTRUCTIONS
CAUSE: JUMP TARGET OUT OF RANGE
ADDRESS: 0FF347DH
SEGMENT: ?PR?DISTEMP_HUMIDITY?_?DISPLAY
Program Size: data=11.4 edata+hdata=3314 xdata=0 const=290 code=16550
Target not created.
Build Time Elapsed:00:00:01 用工程设置好的直接编译器出错(Xsmall:near,far const ,Ptr),改Large:xdata var,far const,ptr-4编译后
assembling .\Objects\port.src...
.\Objects\port.src(652): error A48: DATA-ADDRESS EXPECTED
.\Objects\port.src(728): error A48: DATA-ADDRESS EXPECTED
.\Objects\port.src(731): error A48: DATA-ADDRESS EXPECTED
.\Objects\port.src(805): error A48: DATA-ADDRESS EXPECTED
.\Objects\port.src(808): error A48: DATA-ADDRESS EXPECTED
报错的文件为:port.src里面
; line 131: portRESTORE_SPX();
MOV DR4,pxCurrentTCB
MOV WR2,@WR6+0x2
XRL WR0,WR0
MOV DR60,DR0
; line 132: portRESTORE_CONTEXT();
POP PSW
//=====================
portasm.h 里面的位置
/* Saves the stack pointer for one task into its TCB.*/
#define portSAVE_SPX() \
{ \
__asm { MOV DR0,DR60 } \
__asm { MOV DR4,pxCurrentTCB } \
__asm { MOV @WR6+0x2,WR2 } \
}
/* Restores the stack from the new TCB read to
run the task. */
#define portRESTORE_SPX() \
{ \
__asm { MOV DR4,pxCurrentTCB } \
__asm { MOV WR2,@WR6+0x2 } \
__asm { XRL WR0,WR0 } \
__asm { MOV DR60,DR0 } \
}
//===========================
本帖最后由 tzz1983 于 2024-10-5 13:25 编辑
1. 下载工程范例以后,不需要任何更改/设置就可以直接编译通过。
如果首次编译即不能通过,请升级KEIL版本。(我们是可以编译通过的)
第一次尝试编译成功后,再做任何其它更改,
更改过程中,步伐不要迈得太宽,经常编译一下,哪个环节出错自然就知道了。
2. 目前官方FREERTOS例程,仅适应内存模式 (Memory Model :Xsmall)暂不支持其它模式,比如 Large
3. Code Rom Size 支持Large 和 Huge ,
如果有必要更改模式,除了在 Target 选项卡上做出选择外,还需在 FreeRTOSConfig.h 中设置对应的宏,如下图:
请问问题解决了吗?我之前碰到过同样的问题,不知怎么改的就又通过了。今天又出现了,不知道如何解决了。 RobinHou 发表于 2025-3-28 12:41
请问问题解决了吗?我之前碰到过同样的问题,不知怎么改的就又通过了。今天又出现了,不知道如何解决了。 ...
在Option的Target中把Memory Modle 选择XSmall:near vars,far const,ptr-4后,问题解决了。
页:
[1]