这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 写了一个程序,出现如下错误,这是为什么?

共11条 1/2 1 2 跳转至

写了一个程序,出现如下错误,这是为什么?

菜鸟
2007-06-20 05:39:10     打赏

ccsimpc -g -mpentium -ansi -fno-builtin -fno-defer-pop -I. -IC:\Tornado2.2\target\h\ -DCPU
=SIMNT -DTOOL_FAMILY=gnu -DTOOL=gnu -c ..\udpClient.c
..\udpClient.c:16: parse error before `udpClient'
make: *** [udpClient.o] Error 0x1

Done.

这是为什么?

源程序如下:


#include "vxWorks.h"
#include "sockLib.h"
#include "inetLib.h"
#include "stdioLib.h"
#include "strLib.h"
#include "hostLib.h"
#include "ioLib.h"
#include "udp.h"


STATUS udpClient (char * serverName)
{struct request myRequest;
struct sockaddr_in serverAddr;
char display;
int sockAddrSize;
int sFd;
int mlen;


if((sFd=socket(AF_INET,SOCK_DGRAM,0))==ERROR)
{
perror ("socket");
return (ERROR);
}
sockAddrSize = sizeof (struct sockaddr_in);
bzero ((char *) &serverAddr,sockAddrSize);
serverAddr.sin_len = (u_char) sockAddrSize;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons (SERVER_PORT_NUM);


if(((serverAddr.sin_addr.s_addr = inet_addr (serverName)) == ERROR)&&((serverAddr.sin_addr.s_addr = hostGetByName (serverName))==ERROR))
{
perror ("unknown server name");
close (sFd);
return (ERROR);
}
/* */
printf ("Message to send: \n");
mlen = read (STD_IN,myRequest.message,REQUEST_MSG_SIZE);
myRequest.message[mlen - 1]='\0';
printf("Would you like the server to display your message (Y or N):\n");
read (STD_IN,&display,1);
switch(display)
{
case 'y':
case 'Y':myRequest.display =TRUE;
break;
default : myRequest.display = FALSE;
break;
}
if(sendto (sFd,(caddr_t) &myRequest,sizeof (myRequest),0,(struct sockaddr *) &serverAddr,sockAddrSize)==ERROR)
{
perror ("sendto");
close (sFd);
return (ERROR);
}
close (sFd);
return (OK);

}




关键词: 写了     一个     程序     出现     如下     错误     这是     为什么    

菜鸟
2007-06-20 06:01:00     打赏
2楼
确实比较怪,,,,,,,,,看看头文件包含路径是否正确,好像udp.h在netint目录下,,,,,还有啊,报错的第16行具体是哪一行啊,贴上来发生变化了吗?是char display;那一行吗?

菜鸟
2007-06-20 06:11:00     打赏
3楼

udp.h是我自己写的一个数据结构。

我把它放在和udpClient.c一个文件夹下,都放在d:\vxworks_bsp\inet\prj下

问题出现在STATUS udpClient (char * serverName)

[align=right][color=#000066][此贴子已经被作者于2007-6-19 22:11:37编辑过][/color][/align]

菜鸟
2007-06-20 06:22:00     打赏
4楼
报错16行不一定是真的16行出了问题,我看这情况,很有可能是你的udp.h文件有问题,,可能是某个开始的括号、定义还是啥的没有结束。。。。。还有啊,VxWorks自己也有udp。h这个文件,最好不要搞得重名,这样日后容易出问题。

菜鸟
2007-06-20 23:58:00     打赏
5楼

后来我也怀疑是这个问题,于是把udp.h(我自己写的,我不知道系统有这个文件)中的代码直接复制到该程序中,并且把#include "udp.h"删掉,结果还是有问题,问题就出现在STATUS udpClient (char * serverName)前面,不知道这是为什么?

还有就是上个问题关于cpci路由的问题,我执行了pciHeaderShowpciConfigShow命令,出现"undefined symbol"估计是没有将这两个命令文件下载下去。怎样下载?


菜鸟
2007-06-21 00:57:00     打赏
6楼

BUS NO. DEVICE NO. FUNC NO. Vendor ID DEVICE ID DEVICE CLASS IRQ
0 0 1 1039 5513 IDEController 14
0 1 2 1039 7001 SerialBus controller 3
0 9 0 10EC 8139 Network controller 11

这就是我扫描的我的计算机上的一些资源,按照它也可以编写吧.

还有就是我想问一下你有vxworks下的函数库吗?就是类似于ANSI C的手册.

[align=right][color=#000066][此贴子已经被作者于2007-6-20 17:00:08编辑过][/color][/align]

菜鸟
2007-06-21 05:05:00     打赏
7楼

估计你的映象没有加符号表。所以找不到这些函数。。。。。。用命令行生成的vxWorks映象没有符号表,vxWorks.st有符号表。有符号表才能在目标机shell下面执行C的函数。

所有函数都有手册的,在tornado2.2/doc/里面,打开那个books.html就啥都有了。

你列出的这些信息还不是很完全,后面应该还有关于基址的信息。。。。。其实随着卡插的位置不同,基址和IRQ是会变化的。关键是你的PCI总线能够扫描到你的PCI设备。。。。

关于头文件的那个问题,,,,,你可以把所有的从16行开始的内容都删空,看还报错不。。。。。。一步一步添加,看问题到底在哪里,缩小范围。。。。


菜鸟
2007-06-21 18:04:00     打赏
8楼

如果没有符号表,就不能在执行shell下面执行c函数,可是为什么我写的程序能够下载到目标机上正常运行?使用c语言写的程序。

还有问题,就是我是用软盘启动,启动后再去host找到相应的vxworks文件,下载后,方可正常启动。那么我以后再做一个bootable工程,生成的vxworks文件,如果也下载到目标机上,那岂不是两个系统在运行?

如果做成硬盘启动,那么硬盘的格式是什么格式?我怎样才能将bootrom.sys放到硬盘上?怎样去引导硬盘启动?

诸多问题,还需师兄给予帮助


菜鸟
2007-06-22 01:29:00     打赏
9楼

此外还有许多问题

今天看了一些资料,自认为原来对BSP和bootrom等,分的清晰,今天重新看才发现理解错误多多。想就以下问题请教师兄。

1.BSP是不是bootrom.sys?那是否包含在bootrom.sys文件中?那如果不是,我们经常配置好pcPentium后,编译生成的bootrom.sys又是什么?那BSP尤以何种形式存在?

2.今天修改config.h后,为了实现师兄讲解的vxworks.st包含符号表,不过下载后,正常启动,却不能在tornado中lanuch,不过目标机倒是启动起tShell,vxworks.st正常下载。按说应该包含符号表,可是执行pciConfigTopShow,仍然是“未定义过的符号”,说明修改无效。我的config.h只修改了一个地方:vxworks==>vxworks.st,其他地方没有修改。却在目标机加载了vxworks标志,还有tShell.这是为什么?

3.制作硬盘启动怎样制作?

现在的软盘质量太差,已经坏了20张了,我想做成从硬盘引导启动的vxworks。即把bootrom.sys放在c盘中,然后通过网线下载vxworks映像。

我的做法是:将mkboot.bat\bootrom\vxsys.com全部copy到已经做好的包含bootrom.sys的软盘中,然后在目标机的dos下,mkboot c: bootrom,结果出现错误,最后失败。请师兄指点。


菜鸟
2007-06-23 01:06:00     打赏
10楼

1. BSP是板级支持包,bootrom.sys是BSP编译生成的用于x86系统的VxWorks的启动映象,,,,是一个bin类型的内存映象,负责BIOS加载完之后最开始的执行部分,包括从实模式到保护模式,设置GDT,IDT,加载必要的驱动并最终实现能启动一个VxWorks映象的目的。BSP是一个源码包,在target/config目录下,除了all和comps以外,一个目录对应一个BSP。

2. 符号表:就是关于哪个函数、变量等对象位于内存的哪个地址的一个一一对应的表。没有符号表,在Shell下输入一个C函数的名称,他无法找到这个函数到底在哪里并去执行它。。要生成带符号表的映象可以在命令行下面用make vxWorks.st命令来做,或者用Tornado的bootalbe工程来做,,推荐是后者。

3. 启动软盘的制作在pcPentiumx/target.nr文件里面有描述

推荐如果有硬盘,使用硬盘启动更加方便,,,,,软盘毕竟快退出历史舞台了。


共11条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]