一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2921|回复: 3
收起左侧

[avr] M8V6源码里面的汇编有些看不懂,麻烦大家帮我解答下

[复制链接]
发表于 2016-5-10 17:27 | 显示全部楼层 |阅读模式
GandF公布的是用ICCAVR6.31编译的,我已经可以编译了,但是空间已经用尽,我想将代码移植到M328上用,刚好ICCAVR6.31又不支持,
下了个ICCAVR7.22是支持的,但是编译不过。

我用ICCAVR6.31新建了一个工程,代码很简单如下,只抄了一个含有汇编代码的函数,可以编译通过。但在7.22会出现undefined symbol 'push_gset1'错误如下:
ERROR file 'main.o': undefined symbol 'push_gset1'
!ERROR file 'mymath.o': undefined symbol 'push_gset2'
!ERROR file 'main.o': undefined symbol 'pop_gset1'

!ERROR file 'mymath.o': undefined symbol 'pop_gset2'

问题出在汇编代码的第一行和最后一行:
asm("rcall push_gset1");
asm("rcall pop_gset1");


另外2个rcall的mul32z和div32to16定义可以在mymath.c找到
asm("rcall _mul32z");
asm("rcall _div32to16");


请问这个问题如何解决?
  1. #include "main.h"

  2. // ADCset = (1024 * uiV) / uiK  ,
  3. unsigned int cal_ADC(unsigned int Vset,unsigned int K)
  4. {
  5.         // uiR = div32to16(mul32z(V,1000),I);
  6.         asm("rcall push_gset1");
  7.         asm("movw R20,R18");
  8.         asm("ldi R18,1024");
  9.         asm("ldi R19,1024/256");
  10.         asm("rcall _mul32z");
  11.         asm("std y+1,R21");
  12.         asm("std y+0,R20");
  13.         asm("rcall _div32to16");
  14.         asm("rcall pop_gset1");
  15. }
  16. // 主程序
  17. void main(void)
  18. {
  19.         CLI();                     // disable all interrupts
  20.         // 初始化
  21.         DDRB  = 0b00000110;        // PB0(PWM_LOW),PB1(PWM),PB2(1KHz),PB3-5(KEYA B C)
  22.         PORTB = 0b00111000;        //
  23.         DDRC  = 0b00010000;                   // ADC4 BELL
  24.         PORTC = 0b00000000;            //
  25.         DDRD  = 0b11111110;                   // PD0 RxD,PD1 TxD,PD2-7 LCD
  26.         PORTD = 0b00000000;                   //
  27.         key_loop = KEYLOCKSET;            // 锁定增减
  28.         cal_ADC(1,2);
  29. } // *** main() end ***
复制代码
发表于 2016-5-10 23:13 | 显示全部楼层
没看很懂。不过 C 的汇编标号默认是有 _ 下划线的。
就是说,有个 c 的 .o 文件里有 push_gset1 标号,要在汇编中调用应该是 asm("rcall _push_gset1");
 楼主| 发表于 2016-5-21 16:01 | 显示全部楼层
jojoling 发表于 2016-5-20 14:04
前幾天移植好到 Arduino了(ATmega328)
http://bbs.pigoo.com/forum.php?mod=viewthread&tid=60665

感谢,我都快弄完了,才发现你已经弄完了

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-21 01:50 , Processed in 0.049034 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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