当前位置: 技术问答>linux和unix
arm-elf-gcc编译时如何强制其使用长指针?
来源: 互联网 发布时间:2016-04-01
本文导语: 我用gcc编译一段代码, bar(10,100,80,30); puttextxy("这是测试AA!",10,10,0); bar,与puttextxy都是在自已的操作系统中输出的函数 但以上代码执行到 puttextxy出错,愿因是第一个参数传的Address不对 第一个参数传...
我用gcc编译一段代码,
bar(10,100,80,30);
puttextxy("这是测试AA!",10,10,0);
bar,与puttextxy都是在自已的操作系统中输出的函数
但以上代码执行到 puttextxy出错,愿因是第一个参数传的Address不对
第一个参数传给操作系统的是 16位指针即用"%p"打印 = 0x0000966C
用以下代码
char buf[10];
buf[0] = 'T';
buf[1] = 'E';
buf[2] = 'S';
buf[3] = 'T';
buf[4] = '';
puttextxy(buf,10,10,0);
可以正常执行,传入操作系统的第一个参数是 32位指针 即打印 "%p" = 0x81008432(注:0x81000000是我ld时指定的起始地址)
由于在C代码中使用字符串常量编译后均会调用操作系统 memcpy
同上传入的都将会是16位指针导致不能正常运行
请问怎么令GCC在对所有指针强制采用32位指针啊,
以前学C语言的far 关键词在gcc中是不能用的.
bar(10,100,80,30);
puttextxy("这是测试AA!",10,10,0);
bar,与puttextxy都是在自已的操作系统中输出的函数
但以上代码执行到 puttextxy出错,愿因是第一个参数传的Address不对
第一个参数传给操作系统的是 16位指针即用"%p"打印 = 0x0000966C
用以下代码
char buf[10];
buf[0] = 'T';
buf[1] = 'E';
buf[2] = 'S';
buf[3] = 'T';
buf[4] = '';
puttextxy(buf,10,10,0);
可以正常执行,传入操作系统的第一个参数是 32位指针 即打印 "%p" = 0x81008432(注:0x81000000是我ld时指定的起始地址)
由于在C代码中使用字符串常量编译后均会调用操作系统 memcpy
同上传入的都将会是16位指针导致不能正常运行
请问怎么令GCC在对所有指针强制采用32位指针啊,
以前学C语言的far 关键词在gcc中是不能用的.
|
>>>因为在我的系统中应用程序是从0x81000000地址开始的
你怎么设定的?
还有数组都是利用stack动态分配的, 难道你stack起始地址是810000000?
char str[100] = "TEST!"; 这种定义确实和
buf[0] = 'T';
buf[1] = 'E';
buf[2] = 'S';
buf[3] = 'T';
buf[4] = '';
这种的确分配地址方式不同.一个是放到数据段, 一个是存储到stack
|
啥意思?在32位系统下指针不都是32的吗?
char buf[10];
buf[0] = 'T';
buf[1] = 'E';
buf[2] = 'S';
buf[3] = 'T';
buf[4] = '';
puttextxy(buf,10,10,0);
这个buf难道不是32位的吗??
ps,我太懂 arm-elf,不知道这和普通的gcc有啥区别.....
char buf[10];
buf[0] = 'T';
buf[1] = 'E';
buf[2] = 'S';
buf[3] = 'T';
buf[4] = '';
puttextxy(buf,10,10,0);
这个buf难道不是32位的吗??
ps,我太懂 arm-elf,不知道这和普通的gcc有啥区别.....
|
LZ 是用arm-elf-gcc 来编译的吗?可以考虑换成arm-linux-gcc编译试试,看是否有同样的问题。
尽管这两编译器差不多,但是它们在预处理和使用库时不一样,arm-elf-gcc 主要针对Uclinux的。
尽管这两编译器差不多,但是它们在预处理和使用库时不一样,arm-elf-gcc 主要针对Uclinux的。