[ZLG-ARM] 带指针的外部函数调用有问题,帮我诊断下(附简化程序)

[复制链接]
2144|4
 楼主| isbit 发表于 2007-3-13 14:35 | 显示全部楼层 |阅读模式
带指针的外部函数调用有问题,帮我诊断下(附简化程序)&nbsp;<br />带指针的外部函数调用有问题,帮我诊断下(附简化程序)&nbsp;<br /><br />文件1.c&nbsp;<br />extern&nbsp;uint8&nbsp;&nbsp;**;<br />extern&nbsp;uint8&nbsp;&nbsp;Symbol;<br /><br />extern&nbsp;void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);&nbsp;&nbsp;这个函数<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;**********************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;名称:TaskDISPLAYLCD()<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;功能:测试flash的读&nbsp;2007-3-10<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;入口参数:pdata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务初始化参数<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;出口参数:无<br />&nbsp;&nbsp;&nbsp;&nbsp;**********************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;&nbsp;TaskDISPLAY(void&nbsp;*pdata)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initLCDM();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;BEEP;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC&nbsp;/&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;BEEP;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC&nbsp;/&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteScreen(&nbsp;**);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);&nbsp;&nbsp;这个函数出错<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />文件2.c<br />void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);<br /><br /><br />//-----------------------------------<br />//&nbsp;dispaly&nbsp;data&nbsp;(128x64)<br />//-----------------------------------<br />uint8&nbsp;&nbsp;**[]={<br />0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,。。。。}<br /><br /><br />//-----------------------------------<br />//&nbsp;Write&nbsp;a&nbsp;Screen<br />//-----------------------------------<br />void&nbsp;WriteScreen(uint8&nbsp;*DisplayData)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DisplayData&nbsp;should&nbsp;be&nbsp;164x64/8&nbsp;=&nbsp;1312byte<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;TempData;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0xb0&nbsp;|&nbsp;i);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;select&nbsp;page&nbsp;0~7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0x10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;form&nbsp;column&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(2byte&nbsp;command)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt128;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempData=(*(DisplayData+(i*128)+j));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdData(TempData);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />在文件1.c中把<br />extern&nbsp;void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);&nbsp;&nbsp;屏蔽后没错,但有警告<br />不明白为什么声明外部函数会出错?<br />请高手指点迷津谢谢!&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br /><br />&nbsp;<br />&nbsp;<br /><br />文件1.c&nbsp;<br />extern&nbsp;uint8&nbsp;&nbsp;**;<br />extern&nbsp;uint8&nbsp;&nbsp;Symbol;<br /><br />extern&nbsp;void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);&nbsp;&nbsp;这个函数<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;/*<br />&nbsp;&nbsp;&nbsp;&nbsp;**********************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;名称:TaskDISPLAYLCD()<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;功能:测试flash的读&nbsp;2007-3-10<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;入口参数:pdata&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务初始化参数<br />&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;出口参数:无<br />&nbsp;&nbsp;&nbsp;&nbsp;**********************************************************<br />&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;&nbsp;&nbsp;&nbsp;TaskDISPLAY(void&nbsp;*pdata)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pdata&nbsp;&nbsp;=&nbsp;pdata;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;initLCDM();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(1)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0CLR&nbsp;=&nbsp;BEEP;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC&nbsp;/&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;IO0SET&nbsp;=&nbsp;BEEP;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;OSTimeDly(OS_TICKS_PER_SEC&nbsp;/&nbsp;5);<br />&nbsp;&nbsp;&nbsp;&nbsp;WriteScreen(&nbsp;**);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delayms(500);&nbsp;&nbsp;这个函数出错<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />文件2.c<br />void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);<br /><br /><br />//-----------------------------------<br />//&nbsp;dispaly&nbsp;data&nbsp;(128x64)<br />//-----------------------------------<br />uint8&nbsp;&nbsp;**[]={<br />0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,<br />0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08,。。。。}<br /><br /><br />//-----------------------------------<br />//&nbsp;Write&nbsp;a&nbsp;Screen<br />//-----------------------------------<br />void&nbsp;WriteScreen(uint8&nbsp;*DisplayData)&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;DisplayData&nbsp;should&nbsp;be&nbsp;164x64/8&nbsp;=&nbsp;1312byte<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;TempData;<br />&nbsp;&nbsp;&nbsp;&nbsp;uint8&nbsp;i,&nbsp;j;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0xb0&nbsp;|&nbsp;i);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;select&nbsp;page&nbsp;0~7<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0x10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;form&nbsp;column&nbsp;4<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdCmd(0x04);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;(2byte&nbsp;command)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(j=0;j&lt128;j++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TempData=(*(DisplayData+(i*128)+j));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SdData(TempData);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />在文件1.c中把<br />extern&nbsp;void&nbsp;&nbsp;WriteScreen(uint8&nbsp;*DisplayData);&nbsp;&nbsp;屏蔽后没错,但有警告<br />不明白为什么声明外部函数会出错?<br />请高手指点迷津谢谢!&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /><br /><br /><br />&nbsp;<br />&nbsp;<br />
有意思 发表于 2007-3-13 14:56 | 显示全部楼层

指针

WriteScreen(&nbsp;**);<br />改为:<br />WriteScreen((uin8&nbsp;*)**);<br />WriteScreen的入口参数是一个指针类型的,而你传入的是一个常量,**是该数组的首地址,extern后用WriteScreen(&nbsp;(uint8&nbsp;*)**);<br />和我先前犯的错一摸一样,呵呵&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
zlgARM 发表于 2007-3-13 15:18 | 显示全部楼层

re

**是指针常量而不是uint8的变量。<br />LZ对**的声明有冲突。<br /><br /><br />**本身已经是指向uint8类型变量的指针,直接赋给uint8*的指针变量是没问题的。
 楼主| isbit 发表于 2007-3-13 16:19 | 显示全部楼层

我用其他编译器试试。。。

  
 楼主| isbit 发表于 2007-3-13 16:27 | 显示全部楼层

问题已经解决了,谢谢各位。

extern&nbsp;uint8&nbsp;&nbsp;**;<br />extern&nbsp;uint8&nbsp;&nbsp;Symbol;<br />是数组<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

972

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部