lxcndz 发表于 2024-10-5 10:00:11

关于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:22:48

本帖最后由 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:48

请问问题解决了吗?我之前碰到过同样的问题,不知怎么改的就又通过了。今天又出现了,不知道如何解决了。

RobinHou 发表于 2025-3-30 21:01:53

RobinHou 发表于 2025-3-28 12:41
请问问题解决了吗?我之前碰到过同样的问题,不知怎么改的就又通过了。今天又出现了,不知道如何解决了。 ...

在Option的Target中把Memory Modle 选择XSmall:near vars,far const,ptr-4后,问题解决了。
页: [1]
查看完整版本: 关于freertos 移植的问题,工程采用FreeRTOS-寄存器版本