共2条
1/1 1 跳转至页
问
void
main(void)
{
uint8_t c;
c=test();
for(;;);
}
uint8_t
test(void)
{
uint8_t value;
asm volatile(
"in %[value],_SREG_ \n\t"
:[value] "=r"(value)
:
);
return value;
}
这是我写的一段在线汇编,编译时候老是出现
C:\WINDOWS\TEMP/ccvrjhgb.s:152: Error: constant value required
错误,并且也经常出现
test.c:26: warning: return type of `main' is not `int'
test.c:29: warning: implicit declaration of function `test'
test.c:35: warning: type mismatch with previous implicit declaration
test.c:35: warning: `test' was previously implicitly declared to return `int'这类警告,但是函数定义时候都有定义了函数的返回值了,类型也有说明了,还会出现这种警告?
答 1: test()要放到main()前面1、test()要放到main()前面
2、int main(void) 答 2: tczgg你好我是刚出道的,想学单片AVR汇编语言,以前在校学过51系列的,不知难不难,有空可否请教? 答 3: 老大,还是不行啊而且印象中GCC的函数顺序是没有严格要求的,还有,int了main函数,要return什么?? 答 4: 看一下我编译通过的代码typedef unsigned char uint8_t;
uint8_t test(void)
{
uint8_t value;
asm volatile(
"in %[value],_SREG_ \n\t"
:[value] "=r"(value)
:
);
return value;
}
int main(void)
{
uint8_t c;
c=test();
for(;;);
return 0;
}
编译生成的汇编码:
.file "aa.c"
.arch atmega8
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.text
.global test
.type test, @function
test:
/* prologue: frame size=0 */
/* prologue end (size=0) */
/* #APP */
in r24,_SREG_
/* #NOAPP */
clr r25
/* epilogue: frame size=0 */
ret
/* epilogue end (size=1) */
/* function test size 6 (5) */
.size test, .-test
.global main
.type main, @function
main:
/* prologue: frame size=0 */
ldi r28,lo8(__stack - 0)
ldi r29,hi8(__stack - 0)
out __SP_H__,r29
out __SP_L__,r28
/* prologue end (size=4) */
rcall test
.L3:
rjmp .L3
/* epilogue: frame size=0 */
/* epilogue: noreturn */
/* epilogue end (size=0) */
/* function main size 6 (2) */
.size main, .-main
/* File "aa.c": code 12 = 0x000c ( 7), prologues 4, epilogues 1 */
答 5: 谢谢tczgg仔细看了贴的东西,解决了我不少疑惑,可惜我这边的编译还是通不过…………,我再去看看makefile,有问题再来请教
main(void)
{
uint8_t c;
c=test();
for(;;);
}
uint8_t
test(void)
{
uint8_t value;
asm volatile(
"in %[value],_SREG_ \n\t"
:[value] "=r"(value)
:
);
return value;
}
这是我写的一段在线汇编,编译时候老是出现
C:\WINDOWS\TEMP/ccvrjhgb.s:152: Error: constant value required
错误,并且也经常出现
test.c:26: warning: return type of `main' is not `int'
test.c:29: warning: implicit declaration of function `test'
test.c:35: warning: type mismatch with previous implicit declaration
test.c:35: warning: `test' was previously implicitly declared to return `int'这类警告,但是函数定义时候都有定义了函数的返回值了,类型也有说明了,还会出现这种警告?
答 1: test()要放到main()前面1、test()要放到main()前面
2、int main(void) 答 2: tczgg你好我是刚出道的,想学单片AVR汇编语言,以前在校学过51系列的,不知难不难,有空可否请教? 答 3: 老大,还是不行啊而且印象中GCC的函数顺序是没有严格要求的,还有,int了main函数,要return什么?? 答 4: 看一下我编译通过的代码typedef unsigned char uint8_t;
uint8_t test(void)
{
uint8_t value;
asm volatile(
"in %[value],_SREG_ \n\t"
:[value] "=r"(value)
:
);
return value;
}
int main(void)
{
uint8_t c;
c=test();
for(;;);
return 0;
}
编译生成的汇编码:
.file "aa.c"
.arch atmega8
__SREG__ = 0x3f
__SP_H__ = 0x3e
__SP_L__ = 0x3d
__tmp_reg__ = 0
__zero_reg__ = 1
.global __do_copy_data
.global __do_clear_bss
.text
.global test
.type test, @function
test:
/* prologue: frame size=0 */
/* prologue end (size=0) */
/* #APP */
in r24,_SREG_
/* #NOAPP */
clr r25
/* epilogue: frame size=0 */
ret
/* epilogue end (size=1) */
/* function test size 6 (5) */
.size test, .-test
.global main
.type main, @function
main:
/* prologue: frame size=0 */
ldi r28,lo8(__stack - 0)
ldi r29,hi8(__stack - 0)
out __SP_H__,r29
out __SP_L__,r28
/* prologue end (size=4) */
rcall test
.L3:
rjmp .L3
/* epilogue: frame size=0 */
/* epilogue: noreturn */
/* epilogue end (size=0) */
/* function main size 6 (2) */
.size main, .-main
/* File "aa.c": code 12 = 0x000c ( 7), prologues 4, epilogues 1 */
答 5: 谢谢tczgg仔细看了贴的东西,解决了我不少疑惑,可惜我这边的编译还是通不过…………,我再去看看makefile,有问题再来请教
共2条
1/1 1 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
| 【S32K3XX】LIN 通讯模块使用被打赏¥31元 | |
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
我要赚赏金
