当前位置:  技术问答>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中是不能用的.

|

>>>因为在我的系统中应用程序是从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有啥区别.....

|
LZ 是用arm-elf-gcc 来编译的吗?可以考虑换成arm-linux-gcc编译试试,看是否有同样的问题。
尽管这两编译器差不多,但是它们在预处理和使用库时不一样,arm-elf-gcc 主要针对Uclinux的。 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • arm-elf-gcc 和 arm-linux-gcc有什么区别?arm-elf-gcc里的elf代表什么?
  • arm-elf-gcc问题
  • 在线等!!!!急 arm-elf-gcc编绎出错
  • 大家帮我分析一下这几句arm-elf-gcc –g –c –o test.c
  • arm-elf-gcc 默认输出文件


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3