7897|15

82

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Undefined instruction 问题 [复制链接]

调用select函数时出现如下错误

Undefined instruction
Exception address: 0x0005c1e0
Current Processor Status Register: 0x20000013
Task: 0xff45c8 "tTffsPTask"

哪位大侠指点一下!谢谢!

最新回复

为何老是验证回答错误  详情 回复 发表于 2012-5-14 17:18
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
确定是执行到select那一句挂掉的吗?
设断点跟一下~
代码贴点出来吧
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
光这么点信息,神仙才可以判断出来
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

4
 
确定!
代码如下
static STATUS RecvDataWithTimeOut(UINT16 datacount,UINT16 timeoutvalue)
{
        UINT16 bytesRead;
        UINT32 i = 0;
        struct timeval timeout;
        int selectnum;
        struct fd_set readFds;        /* 串口bit mask of fds to read from */
        int width;                            /* number of fds on which to pend */
       
       
        timeout.tv_sec = timeoutvalue;
        timeout.tv_usec = 0;FD_ZERO (&readFds);
       
        FD_ZERO (&readFds);
        FD_SET (comm2Fd, &readFds);
        width = comm2Fd + 1;
        FD_ISSET (comm2Fd, &readFds);
       
        FOREVER
        {
                printf("select start!!!\n");
                if(timeoutvalue==0)
                        selectnum = select (width, &readFds, NULL, NULL, NULL);
                printf("select over!!!\n");
                else
                        selectnum = select (width, &readFds, NULL, NULL, &timeout);
               
                if (selectnum == ERROR)
                {
#ifdef DEBUG_PRINT
                        printErr("ERROR:An select error has occurred in received data from COM2!\n");
                        #endif
                        return ERROR;
                }
                else if(selectnum == 0)
                {
#ifdef DEBUG_PRINT
                        printErr("ERROR:An timeout error has occurred in received data from COM2!\n");
                        #endif
                        return ERROR;
                }
               
                if (FD_ISSET (comm2Fd, &readFds))
                {
                        bytesRead = fioRead(comm2Fd,szBuf,datacount);
                       
/*#ifdef DEBUG_PRINT
                        printf("bytesRead = %d, datacount = %d, szBuf[0] = %x\n",bytesRead,datacount,szBuf[0]);
#endif*/
                       
                        return bytesRead;
                }
        }
       
}

现在 select start!!!能打印出来
select over!!!打印不出来就死了!!
大侠,判断以下
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

5
 
..\temp.c: In function `RecvDataWithTimeOut':
..\temp.c:75: `comm2Fd' undeclared (first use in this function)
..\temp.c:75: (Each undeclared identifier is reported only once
..\temp.c:75: for each function it appears in.)
..\temp.c:85: parse error before `else'
..\temp.c:105: `szBuf' undeclared (first use in this function)
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

6
 
这段代码能编译通过?

if(timeoutvalue==0)
selectnum = select (width, &readFds, NULL, NULL, NULL);
                printf("select over!!!\n");
else
selectnum = select (width, &readFds, NULL, NULL, &timeout);
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

7
 
不好意思,昨天着急打错了,但是跟踪加的位置是没错的,请各位大侠原谅,
代码如下
static STATUS RecvDataWithTimeOut(UINT16 datacount,UINT16 timeoutvalue)
{
UINT16 bytesRead;
UINT32 i = 0;
struct timeval timeout;
int selectnum;
struct fd_set readFds; /* 串口bit mask of fds to read from */  
        int width;             /* number of fds on which to pend */  


timeout.tv_sec = timeoutvalue;
timeout.tv_usec = 0;FD_ZERO (&readFds);

FD_ZERO (&readFds);
FD_SET (comm2Fd, &readFds);  
width = comm2Fd + 1;
FD_ISSET (comm2Fd, &readFds);

FOREVER
{
printf("select start!!!\n");
if(timeoutvalue==0)
{
selectnum = select (width, &readFds, NULL, NULL, NULL);
printf("select over!!!\n");
}
else
selectnum = select (width, &readFds, NULL, NULL, &timeout);

if (selectnum == ERROR)
{
#ifdef DEBUG_PRINT
printErr("ERROR:An select error has occurred in received data from COM2!\n");
#endif
return ERROR;
}
else if(selectnum == 0)
{
#ifdef DEBUG_PRINT
printErr("ERROR:An timeout error has occurred in received data from COM2!\n");
#endif
return ERROR;
}

if (FD_ISSET (comm2Fd, &readFds))
{
bytesRead = fioRead(comm2Fd,szBuf,datacount);

/*#ifdef DEBUG_PRINT
printf("bytesRead = %d, datacount = %d, szBuf[0] = %x\n",bytesRead,datacount,szBuf[0]);
#endif*/

return bytesRead;
}
}

}

现在 select start!!!能打印出来
select over!!!打印不出来就死了!!
大侠,判断以下
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

8
 
再详细介绍一下,这段代码是ARM通过串口接收单片机信息的代码,整个系统有ABCDE五个用户任务,其中ABC任务同一个优先级,DE任务同一个优先级但比ABC任务优先级低,这段代码为A任务调用,B与DE属于死循环任务,整个任务调度依靠VXWORKS默认任务调度机制,可是现在发现,该系统会发生不可预期的死机现象,表现有时是低优先级任务DE挂起,有时甚至连0优先级的异常处理任务以及FLASH驱动任务都挂起了,加跟踪后几乎每次都是死机在执行printf("select start!!!\n");之后,printf("select over!!!\n"); 执行不出来,并且有时会出现如下错误:

Undefined instruction
Exception address: 0x0005c1e0
Current Processor Status Register: 0x20000013
Task: 0xff45c8 "tTffsPTask"

我的问题是,我的这段代码是否正确?能否判定是调用select函数的问题?select函数是否有什么需要注意的地方?

我现在把BCDE任务全部砍掉,只留A任务在跑,这时A任务会有定期的(大概一分钟一次的)由单片机主动访问ARM,由ARM执行IIC驱动得到其他芯片数据,并返回给单片机的动作。可是这样依然会发生不定期的死机。单片机的型号是W78E516B会有什么问题吗?ARM的型号是三星S3C4510B01-QERO,这款ARM的IIC是否有问题?
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

9
 
comm2Fd这个值没有问题的话,这段代码应该没有问题。
应该是其他的问题
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢!怎么验证comm2Fd这个值呢?另外能帮我看看下面这段代码是否有时序问题吗?谢谢!
void usrRoot (char *pMemPoolStart, unsigned memPoolSize)
    {
    usrKernelCoreInit ();               /* core kernel facilities */
    memPartLibInit (pMemPoolStart, memPoolSize); /* core memory partition manager */
    memInit (pMemPoolStart, memPoolSize); /* full featured memory allocator */
    sysClkInit ();                      /* System clock component */
    usrIosCoreInit ();                  /* core I/O system */
    usrKernelExtraInit ();              /* extended kernel facilities */
    usrIosExtraInit ();                 /* extended I/O system */
    selectInit ();                      /* select */
    usrToolsInit ();                    /* software development tools */
    cplusLibInit ();                    /* C++ runtime support */
    usrAppInit ();                      /* call usrAppInit() (in your usrAppInit.c project file) after startup. */
    }

我看网上有些例子selectInit ();是这样写的selectInit (NUM_FILES);,有什么含义?和我现在的有什么不同吗?
我很菜,帮帮忙!
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

11
 
comm2Fd不是你给赋值的吗?

shell下敲iosFdShow命令查看fd列表
另外把comm2Fd打印出来
看是否在fd列表中。。。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

12
 
谢谢,我还有个问题想请教,请问还是这个系统,如果单片机通过串口主动与ARM通讯,ARM返回信息,当ARM正在Write的同时,前面板又send了,请问,这样对ARM会不会有影响?单片机通过串口与ARM通讯的任务优先级是100。
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

13
 
自己顶一下
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

14
 
是说单片机和arm之间用一根串口线连接
双方同时往串口写东西吗?
应该没有问题,串口是一根读的数据线一根写的数据线,互相之间不会影响到
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

15
 
select中没有指定超时时间,所以一直处于等待状态!
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

16
 

为何老是验证回答错误

为何老是验证回答错误
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表