找回密码
 立即注册
查看: 81|回复: 3

L251链接器脚本文件规划RAM和ROM

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-19 11:45:38
已绑定手机

1

主题

0

回帖

17

积分

新手上路

积分
17
发表于 2025-6-19 11:45:38 | 显示全部楼层 |阅读模式
你好我现在使用你们的STC32G8K64芯片,我希望自己编写L251链接器脚本文件对变量和代码分区存储和管理,但是写的lin文件编译一直报错,请给一个你们的模版给我

我的写的lin文件内容如下:

;=====================================================================
; STC32G8K64 Linker Script - Complete Configuration
;=====================================================================

;------------------------------
; Define Memory Regions
;------------------------------
REGION IDATA_LOW (DATA) = 0x00 TO 0x7F;     ; 128-byte direct-access RAM
REGION IDATA_HIGH (IDATA) = 0x80 TO 0x7FF;  ; 1920-byte indirect-access RAM
REGION XDATA (XDATA) = 0x0000 TO 0x17FF;    ; 6KB extended RAM
REGION CODE (CODE) = 0xFF0000 TO 0xFFFFFF;  ; 64KB internal ROM

;------------------------------
; Define Segment Classes
;------------------------------
CLASSES (
    DATA (0x00-0x7F),          ; Direct-access data
    IDATA (0x80-0x7FF),        ; Indirect-access data
    XDATA (0x0000-0x17FF),     ; Extended RAM
    CODE (0xFF0000-0xFFFFFF)   ; Code memory
)

;------------------------------
; Define Segments
;------------------------------
SEGMENTS (
    .text (CODE) INTO CODE;           ; Code segment
    .data (DATA) INTO IDATA_LOW;      ; Initialized data
    .bss (DATA) INTO IDATA_LOW;       ; Uninitialized data
    .idata (IDATA) INTO IDATA_HIGH;   ; Indirect-access data
    .xdata (XDATA) INTO XDATA;        ; Extended RAM data
   
    ; Interrupt Vector Table (Simplified)
    .vectors (CODE) AT 0xFF0000 { JMP RESET; }
    .int0 (CODE) AT 0xFF0003 { JMP INT0_ISR; }
)

;------------------------------
; Stack and Heap Allocation
;------------------------------
STACK (IDATA) SIZE 0x400 START 0x400;  ; 1KB stack in IDATA_HIGH
HEAP (IDATA) SIZE 0x200 START 0x80;    ; 512-byte heap in IDATA_LOW


编译后报:*** ERROR L204: INVALID KEYWORD
请问这个Lin文件有什么问题 ?


截图202506191143263745.jpg
截图202506191143585066.jpg
回复

使用道具 举报 送花

3

主题

530

回帖

-229

积分

等待验证会员

积分
-229
发表于 2025-6-19 11:48:00 | 显示全部楼层
以下是针对您使用 STC32G8K64 芯片编写 L251 联 Linker Script 的模版建议,您可以在模版中填写相应的变量和段类定义:

L251 联 Linker Script 道件文件模板
  1. plaintext
  2. ; 联 Linker Script - Complete Configuration
  3. ; 联 Linker Script - Complete Configuration
  4. ; 联 Linker Script - Complete Configuration
  5. ; 联 Linker Script - Complete Configuration
  6. ; 显存区域定义
  7. REGION IDATALOW (DATA) = 0x00 TO 0x7F ; 128-byte direct-access RAM
  8. REGION IDATAHIGH (IDATA) = 0x80 TO 0x7FF ; 1920-byte indirect-access RAM
  9. REGION XDATA (XDATA) = 0x0000 TO 0x17FF ; 6KB extended RAM
  10. REGION CODE (CODE) = 0xFF0000 TO 0xFFFFFF ; 64KB internal ROM
  11. ; 颅存区域定义
  12. REGION RAM (RAM) = 0x0000 TO 0x1FFF ; 64KB RAM (128 bytes per channel)
  13. REGION ROM (ROM) = 0x2000 TO 0x2FFFF ; 1.28MB ROM (192 bytes per channel)
  14. ; 内存段定义
  15. CLASSES (
  16.     ; 可直接访问显存的内存段
  17.     DATA = 0x00 TO 0x7F
  18.     IDATA = 0x80 TO 0x7FF
  19.     ; 可间接访问显存的内存段
  20.     INMemory = 0x0000 TO 0x1FFF
  21.     RAM = 0x2000 TO 0x2FFFF
  22.     ; 内存段
  23.     CODE = 0xFF0000 TO 0xFFFFFF
  24.     CODE = 0x0000 TO 0x00
  25. )
复制代码

模版说明
1. 显存区域:
IDATALOW:0x00 TO 0x7F (128-byte direct-access RAM)
IDATAHIGH:0x80 TO 0x7FF (1920-byte indirect-access RAM)
XDATA:0x0000 TO 0x17FF (6KB extended RAM)

2. 内存段:
RAM:0x0000 TO 0x1FFF (64KB RAM, 128 bytes per channel)
ROM:0x2000 TO 0x2FFFF (1.28MB ROM, 192 bytes per channel)

3. 内存段类:
区域 DATA:直接访问显存的内存段
区域 IDATA:间接访问显存的内存段
区域 INMemory:可直接访问内存的内存段
区域 CODE:内部的内存段(用于代码和数据共享)

编写注意事项
1. 内存区域定义:确保显存区域的起止地址正确,避免越界或重叠。
2. 内存段定义:内存段类的定义顺序需符合 C 语言的语法规范(从左到右依次定义)。
3. 数据段定义:代码段的定义应位于显存区域和内存段的定义之后,以确保内存管理和代码执行的正确性。

验证步骤
1. 编译前验证:在 Build 工具中验证 L251 联 Linker Script 的定义是否正确。
2. 内存管理:在运行联 Linker Script 时,确保内存区域和内存段的定义不会导致内存泄漏或执行错误。

希望这些建议对您有所帮助!如果还有其他问题,请随时告诉我。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4542

积分

荣誉版主

无情的代码机器

积分
4542
发表于 2025-6-19 12:03:28 | 显示全部楼层
启动文件有现成的参考,但是这个Lin文件还没遇到过,找找看
先看下这个:
https://www.stcaimcu.com/forum.p ... =1&extra=#pid151176

截图202506191207064382.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:220
  • 最近打卡:2025-06-28 13:49:44
已绑定手机

72

主题

2016

回帖

4542

积分

荣誉版主

无情的代码机器

积分
4542
发表于 2025-6-19 12:36:58 | 显示全部楼层
楼主这个lin文件用的arm架构语法?C251的长这样(使用create自动生成,只是对界面选项的拷贝):
截图202506191226461911.jpg
lin文件相关命令:
截图202506191243543758.jpg
keil官方建议:
截图202506191234484050.jpg
直接用_at_方便点:

截图202506191235426661.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-29 10:01 , Processed in 0.133826 second(s), 70 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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