找回密码
 立即注册
查看: 1805|回复: 21

在汇编下如何使用Ai的CDC库?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-06-26 21:14:10

49

主题

129

回帖

1125

积分

金牌会员

积分
1125
发表于 2024-11-27 00:06:26 | 显示全部楼层 |阅读模式
本帖最后由 DebugLab 于 2024-11-27 09:56 编辑

我们的原汇编程序编译成功。想将STC的汇编CDC程序库加入。
1. 打开STC的CDC汇编演示程序,采用xdata版本。编译无错误无警告。
2. 在前面的常数和变量定义区加入我们原程序的常数和变量定义。编译通过无错误无警告。
3. 在STC模板程序的标号MAIN:后屏蔽掉JMP MAIN语句,逐段加入我们的程序。每加入一段就编译,无错误、无警告。当然是要处理好一些程序之间调用。
4. 当加入了约1000行语句后,编译出现如下错误提示信息:
Build started: Project: CT-ASTC12N
Build target 'Target 1'
assembling CT-A_STC8H-A.asm...
linking...
*** ERROR L121: IMPROPER FIXUP
    MODULE:  .\Objects\CT-A_STC8H-A.obj (CT-A_STC8H-A)
    SEGMENT: ?PR?MAIN
    OFFSET:  0002F8H
*** ERROR L121: IMPROPER FIXUP
    MODULE:  .\Objects\CT-A_STC8H-A.obj (CT-A_STC8H-A)
    SEGMENT: ?PR?MAIN
    OFFSET:  00030BH
*** ERROR L121: IMPROPER FIXUP
    MODULE:  .\Objects\CT-A_STC8H-A.obj (CT-A_STC8H-A)
    SEGMENT: ?PR?MAIN
    OFFSET:  000365H
*** ERROR L121: IMPROPER FIXUP
    MODULE:  .\Objects\CT-A_STC8H-A.obj (CT-A_STC8H-A)
    SEGMENT: ?PR?MAIN
    OFFSET:  000386H
*** ERROR L121: IMPROPER FIXUP
    MODULE:  .\Objects\CT-A_STC8H-A.obj (CT-A_STC8H-A)
    SEGMENT: ?PR?MAIN
    OFFSET:  000702H
Program Size: data=8.3 xdata=247 const=131 code=6919
Target not created.
Build Time Elapsed:  00:00:00
反复检查好像不是我们程序的问题,程序没有特别语句。将我们的程序单独编译,也就是去掉STC模板程序的其它语句能够编译成功。
之前加入部分的我们的汇编程序可以编译成功。多了好像就不行了。
请教如何解决上述问题?

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:112
  • 最近打卡:2025-06-29 00:35:48

740

主题

1万

回帖

1万

积分

管理员

积分
17183
发表于 2024-11-27 00:51:00 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2024-11-27 03:32:49 | 显示全部楼层
估计你用单个主程序汇编文件, 调用 stc的 汇编CDC程序库.
文件超长, 会出现此类 linking 问题.
解决方法:
1.  换个 linking 器 试试, L51 或者 LX51
2. 如上述方法不行, 哪没办法, 只能规范汇编编程(你上述单个主程序文件内, 调用太多的文件内部子程序, 属于不规范),
如不再调用 外部 汇编文件, 主程序文件再长也行.
如要调用 外部 汇编文件(只要其有一点点不规范), 当单个主程序文件大了, 容易出现此类 linking 问题.
彻底解决方法, 单个主程序文件内, 按功能模块分类, 每个功能模块单独建立规范汇编文件(当然, 每个子程序 单独建立一个独立文件或库文件更好). 总之, 细分的越小越好, 再依靠 linking 器把他们联接起来.
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2024-11-27 03:41:14 | 显示全部楼层
从本质上讲, 单个子程序文件不得超过 2k , 因为子程序 内少不了 页内 offset 跳转, 而 51 以 2k 为一页.
编译时, 依靠 linking 器把他们自动定位在合适地址上 , 再联接起来.
当单个程序文件超过 2k 时(特别是超出太多), 超出了 linking 器 自动定位 的能力范围, 因此而给出警告或错误信息.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2024-11-27 03:55:06 | 显示全部楼层
总之, 以上问题 , 首先是你的 程序不规范(主程序内调用多个子程序, 且放在单个同一个文件中).
其次, 是 STC 提供的汇编CDC程序库 不规范(能用不等于规范, STC肯定是将多个子程序合在 一个文件中, 再编译成 Lib 或 Obj 文件).
假如 汇编CDC程序库 格式非常正规规范的话, 不管你的程序再烂再长再不规范, 永远不会产生  linking 错误.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2024-11-27 04:09:46 | 显示全部楼层
想到一个方法, 你可以试试, 先将 stc 的汇编CDC程序库, 定位在 你程序空间尾部(方法可参照 stc 说明书中相关的程序重定位),
地址以 2k的倍数为单位, 或以 stc 的汇编CDC程序库 的长度, 定位 在 code空间末尾倒推 之地址上. 这样,  linking 时,  stc 的汇编CDC程序库 地址, 是固定不变的.

再编译你的程序, 如能通过, 则不管你的程序有多长(当然不能超出  stc 的汇编CDC程序库  code空间的首地址), 估计都能通过. 这个方法虽不太正规, 但用时最少.
最好的方法是你修改程序, 使其规范化, 这样, 哪怕 用 stc 的 C语言编写 的CDC程序库, 也能轻松调用(混合编程).

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:117
  • 最近打卡:2025-03-06 09:50:21

6

主题

142

回帖

736

积分

高级会员

积分
736
发表于 2024-11-27 09:51:26 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:370
  • 最近打卡:2025-06-28 00:07:36
已绑定手机

21

主题

488

回帖

913

积分

高级会员

积分
913
发表于 2024-11-27 11:45:30 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:193
  • 最近打卡:2025-06-28 08:36:03
已绑定手机

95

主题

990

回帖

2537

积分

超级版主

积分
2537
QQ
发表于 2024-11-27 15:14:24 | 显示全部楼层
在下还在苦学C语言,你却要学汇编
加油吧同学,等你学会了 出个教程,或者写个学习例程分享出来

点评

汇编 有 汇编的特色. 汇编 的 速度, 是 C 的 1.5倍 左右. 速度更快. 汇编 的 bin长度, 比 C 短 1.5倍 左右. 同等芯片下可放进更多程序功能. 同样, 汇编 的 开发速度, 比 C 慢 N 倍~~~  详情 回复 发表于 2024-11-27 15:30
热线19952583534
www.STCAI.com
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

积分
5499
发表于 2024-11-27 15:30:00 | 显示全部楼层
国学*** 发表于 2024-11-27 15:14
在下还在苦学C语言,你却要学汇编
加油吧同学,等你学会了 出个教程,或者写个学习例程分享出来 ...

汇编 有 汇编的特色.
汇编 的 速度, 是 C 的 1.5倍 左右. 速度更快.
汇编 的 bin长度, 比 C 短 1.5倍 左右. 同等芯片下可放进更多程序功能.
同样, 汇编 的 开发速度,  比 C 慢 N 倍~~~
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-29 12:35 , Processed in 0.134706 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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