这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » vxworks任务创建问题求助!

共10条 1/1 1 跳转至

vxworks任务创建问题求助!

菜鸟
2007-05-26 09:13:15     打赏

各位高手好!小弟最近遇到一个无助的问题,请帮忙指导:
开发环境:vxWorks5.5+Tronado2.2+s3c4510B
我在作了文件系统的FLASH上放了GOAHEAD服务器处理程序和网页,当发起GOAHEAD任务时遇到了以

下问题,系统从FLASH启动后在控制台(VxWorks COM1)通过命令:sp websvxmain发起GOAHEAD任

务,在浏览器中输入目标板IP就可以顺利访问到在FLASH文件系统上的网页,此时有:
tLogTask logTask ff7d90 0 PEND ebb08 ff7ca8 0 0


tShell shell f53e9c 1 READY e2e14 f53b30 0 0


tRlogind rlogind f59bc4 2 PEND 5138c f59850 0 0


tNetTask netTask fb8e90 50 PEND 5138c fb8e10 0 0


tFtpdTask 689c f57994 55 PEND 5138c f5787c 0 0


tTffsPTask flPollTask ff62b8 100 DELAY e1d44 ff6234 0 1


t1 websvxmain efebc8 100 PEND+T 5138c efeacc 3d0002 8


tDcacheUpd dcacheUpd f227d4 250 DELAY e1d44 f22740 0 4


但是在UserAppInit()中通过
web_id=taskSpawn("tweb",100,0x100,2000,(FUNCPTR)websvxmain,0,0,0,0,
0,0,0,0,0,0);
发起任务后,网页访问不到了,FTP也不能用了,查看CPU利用率99%都是给了websvxmain了!此时

任务状态:
tLogTask logTask ff7d90 0 PEND ebb08 ff7ca8 0 0


tShell shell f53e9c 1 READY e2e14 f53b30 0 0


tRlogind rlogind f59bc4 2 PEND 5138c f59850 0 0


tNetTask netTask fb8e90 50 PEND 5138c fb8e10 0 0


tFtpdTask 689c f57994 55 PEND 5138c f5787c 0 0


websvxmain efebc8 100 READY 5138c efeacc 3d0002 8

tTffsPTask flPollTask ff62b8 100 READY e1d44 ff6234 0 1


tDcacheUpd dcacheUpd f227d4 250 READY e1d44 f22740 0 4

websvxmain没有显示名字,而且下边的三个任务都是READY,我想试着修改 websvxmain到 PEND

状态,但没能成功,请各位有相关调试经验的高手指导,谢谢! 怎么才能达到在系统启动工程

让任务 websvxmain发起,并且能够正常执行?




关键词: vxworks     任务     创建     问题     求助    

院士
2007-05-26 20:35:00     打赏
2楼

等woodhead~~


菜鸟
2007-05-26 21:04:00     打赏
3楼

期待woodhead斑竹的到来!!


菜鸟
2007-05-27 07:31:00     打赏
4楼

啊,woodhead斑竹还没到来,俺尝试下吧。

请确认任务选项为0x100,具体含义是什么?很少见到这种用法。

任务堆栈指定为2K,是否够用。可否用checkStack检查下堆栈使用情况。


菜鸟
2007-05-27 09:00:00     打赏
5楼

谢谢yaopg 斑竹指点!

顺着您说的,我再尝试一下,这个问题已经困扰我一周了,明天过来继续向您请教!


菜鸟
2007-05-27 10:48:00     打赏
6楼

谢谢yaopg高手关键性的指点,一直以来小弟觉得这个问题太小所以自己琢磨着解决,但又受到以

前开发人员参考程序的思想限制,迟迟到现在才得以解决!
1、首先把程序实现过程中出现现象先帖出来,以便遇到类似问题的爱好者能够根据自己的错误对

照以寻求解决方法。
web_id=taskSpawn("tweb",100,0x100,2000,(FUNCPTR)websvxmain,0,0,0,0,
0,0,0,0,0,0); /*两处错误:0x100 & 2000*/执行后现象:
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask excTask ffa70c 0 PEND ebc50 ffa614 0 0
tLogTask logTask ff7d90 0 PEND ebc50 ff7ca8 0 0
tShell shell f51510 1 PEND 514d4 f511a4 0 0
tRlogind rlogind f59a7c 2 PEND 514d4 f59708 0 0
tWdbTask wdbTask f537b0 3 READY 514d4 f536e4 0 0
tNetTask netTask fb8e90 50 READY 17fc0 fb8d08 0 0
tFtpdTask 0x689c f5784c 55 PEND 514d4 f57734 0 0
com2udp ComtoUdp efc338 90 PEND 514d4 efc138 3d0002 0
tTffsPTask flPollTask ff62b8 100 DELAY e1e8c ff6234 0 2
 websvxmain ef7318 120 READY 8ff0c ef7194 3d0001 0
tDcacheUpd dcacheUpd f1ff54 250 READY e1e8c f1fec0 0 0
value = 0 = 0x0
-> checkStack
NAME ENTRY TID SIZE CUR HIGH MARGIN
------------ ------------ -------- ----- ----- ----- ------
tExcTask excTask ffa70c 7988 248 392 7596
tLogTask logTask ff7d90 4988 232 292 4696
tShell shell f51510 64860 876 1076 63784
tRlogind rlogind f59a7c 7988 884 1156 6832
tWdbTask wdbTask f537b0 8180 204 1300 6880
tNetTask netTask fb8e90 9988 392 588 9400
tFtpdTask 0x689c f5784c 11988 280 340 11648
com2udp ComtoUdp efc338 19992 512 1088 18904
tTffsPTask flPollTask ff62b8 2036 132 280 1756
 websvxmain ef7318 1324 412 ??? ??? VX_NO_STACK_FILL
tDcacheUpd dcacheUpd f1ff54 4988 148 248 4740
value = 0 = 0x0
->
*********************************************************
修改为:web_id=taskSpawn("tweb",100,0x100,5000,(FUNCPTR)websvxmain,0,0,0,0,
0,0,0,0,0,0); /*一处错误:0x100 */执行后现象:
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask excTask ffa70c 0 PEND ebc54 ffa614 0 0
tLogTask logTask ff7d90 0 PEND ebc54 ff7ca8 0 0
tShell shell f51510 1 PEND 514d8 f511a4 0 0
tRlogind rlogind f59a7c 2 PEND 514d8 f59708 0 0
tWdbTask wdbTask f537b0 3 READY 514d8 f536e4 0 0
tNetTask netTask fb8e90 50 READY 17fc4 fb8d08 0 0
tFtpdTask 0x689c f5784c 55 PEND 514d8 f57734 0 0
com2udp ComtoUdp efc338 90 PEND 514d8 efc138 3d0002 0
tTffsPTask flPollTask ff62b8 100 DELAY e1e90 ff6234 0 2
tweb websvxmain ef7318 100 PEND+T 514d8 ef721c 3d0002 100
tDcacheUpd dcacheUpd f1ff54 250 DELAY e1e90 f1fec0 0 10
value = 0 = 0x0
-> checkStack
NAME ENTRY TID SIZE CUR HIGH MARGIN
------------ ------------ -------- ----- ----- ----- ------
tExcTask excTask ffa70c 7988 248 392 7596
tLogTask logTask ff7d90 4988 232 292 4696
tShell shell f51510 64860 876 1076 63784
tRlogind rlogind f59a7c 7988 884 1156 6832
tWdbTask wdbTask f537b0 8180 204 1300 6880
tNetTask netTask fb8e90 9988 392 472 9516
tFtpdTask 0x689c f5784c 11988 280 340 11648
com2udp ComtoUdp efc338 19992 512 1088 18904
tTffsPTask flPollTask ff62b8 2036 132 308 1728
tweb websvxmain ef7318 4324 252 ??? ??? VX_NO_STACK_FILL
tDcacheUpd dcacheUpd f1ff54 4988 148 324 4664
value = 0 = 0x0
->
这种情况下websvxmain可以正常执行了,但是堆栈还有错误。
***********************************************************
修改为:web_id=taskSpawn("tweb",100,0,5000,(FUNCPTR)websvxmain,0,0,0,0,
0,0,0,0,0,0); 执行后现象:
-> i
NAME ENTRY TID PRI STATUS PC SP ERRNO DELAY
---------- ------------ -------- --- ---------- -------- -------- ------- -----
tExcTask excTask ffa70c 0 PEND ebc54 ffa614 0 0
tLogTask logTask ff7d90 0 PEND ebc54 ff7ca8 0 0
tShell shell f51510 1 PEND 514d8 f511a4 0 0
tRlogind rlogind f59a7c 2 PEND 514d8 f59708 0 0
tWdbTask wdbTask f537b0 3 READY 514d8 f536e4 0 0
tNetTask netTask fb8e90 50 READY 17fc4 fb8d08 0 0
tFtpdTask 0x689c f5784c 55 PEND 514d8 f57734 0 0
tTffsPTask flPollTask ff62b8 100 DELAY e1e90 ff6234 0 5
com2udp ComtoUdp efc338 100 PEND 514d8 efc138 3d0002 0
tweb websvxmain ef7318 100 PEND+T 514d8 ef721c 3d0002 96
tDcacheUpd dcacheUpd f1ff54 250 DELAY e1e90 f1fec0 0 8
value = 0 = 0x0
-> checkStack
NAME ENTRY TID SIZE CUR HIGH MARGIN
------------ ------------ -------- ----- ----- ----- ------
tExcTask excTask ffa70c 7988 248 392 7596
tLogTask logTask ff7d90 4988 232 292 4696
tShell shell f51510 64860 876 1076 63784
tRlogind rlogind f59a7c 7988 884 1156 6832
tWdbTask wdbTask f537b0 8180 204 1300 6880
tNetTask netTask fb8e90 9988 392 440 9548
tFtpdTask 0x689c f5784c 11988 280 340 11648
tTffsPTask flPollTask ff62b8 2036 132 308 1728
com2udp ComtoUdp efc338 19992 512 1088 18904
tweb websvxmain ef7318 4324 252 2120 2204
tDcacheUpd dcacheUpd f1ff54 4988 148 324 4664
value = 0 = 0x0
->
心得总结:
1、在自己的程序基础上参考开发例子的思想是很好的,而且有助于更快的学到知识,但要大胆思

维,敢于尝试自己的想法,特别是在出错的情况下更应该这样。
2、0x100我查了资料,没搞懂,这是从别的开发成功的例子中抄来的,给我了个很大的打击。
3、各位在遇到手动调试任务可以正常运行任务,自动启动不可以的情况下,希望以上的现象指导

可以给提供一些帮助!
******************************************
web_id=taskSpawn("tweb",100,0,5000,(FUNCPTR)websvxmain,0,0,0,0,
0,0,0,0,0,0);
******************************************
遗留问题:vxworks从文件系统启动过程中出现: WDB: Agent configuration failed.应该从哪

里(BSP?API?)修改使其配置成功?谢谢指导!(刚修改BSP时就出现此问题,一直没解决掉)



菜鸟
2007-05-28 04:50:00     打赏
7楼

呵呵,还好猜对了。确实是堆栈不够,从最后一个输出可以看出,超过了2000,最大为2120byte。建议还分配大一点。

其实,程序做完之后,总是要进行(自己创建的)任务的堆栈评估,通常保证HIGH与SIZE之比在60%以下(啊现在的板子通常内存很大,当然具体多少,由自己定,但总是以安全为主要考虑因素)。

关于WDB的问题,俺从描述看不出具体哪里有问题,还是猜吧:

你的WDB应该是配置成用END(网卡)来通信的,WDB没有配置起来,很有可能是你的Vxworks系统没有加载网卡---因为你从硬盘启动,本质上讲不需要网卡,与网卡无关。。。。看能不能在启动行里面最后添加一个 o=fei(或者,gei,rtl,fec等等,具体看你啥网卡)。

啊,猜错了别怪我呀。

[align=right][color=#000066][此贴子已经被作者于2007-5-27 21:34:40编辑过][/color][/align]

菜鸟
2007-05-28 05:09:00     打赏
8楼

啊,从你贴出的可以看出,任务选项参数0x100是VX_NO_STACK_FILL,也就是分配的堆栈区不使用固定的值进行填充。如果不使用这个任务选项,VxWorks在给任务分配堆栈的时候,是将堆栈区域的所有字节都填写为一个固定值(好像是0xfe,具体不记得了),在判断堆栈的使用情况的时候,就看有从哪个字节开始(堆栈起始地址和大小是分配的时候就确定了的,保存在TCB里面)一直都是这个固定值--因为如果任务用过了的话,肯定值就被修改了。这样就得出最大使用过使用多少(HIGH),还有多少剩余(MARGIN)等信息,而当前使用的大小(CUR)就是当前任务堆栈指针(也保存在TCB里面)减去堆栈起始地址,这些信息加起来,也就是checkStack打印出来的信息。如果使用了VX_NO_STACK_FILL这个任务选项,就不进行堆栈填充,当然也就无法获得HIGH和MARGIN的值了。。。。这就是上面为什么是???的原因。

通常,任务选项里面用得最多的是VX_FP_TASK选项,这是为代码里面包含有浮点运算的任务弄的一个选项,选用这个选项VxWorks进行任务切换的时候,就会进行保存和回复硬件浮点寄存器的操作(或是软件模拟的浮点库的操作),通常为了可靠起见,应用程序类任务(非驱动)都使用这个选项(当然,具体用不用自己要评估,如果自己很清楚里面不包含浮点运算,就没有必要了)。

[align=right][color=#000066][此贴子已经被作者于2007-5-27 21:32:10编辑过][/color][/align]

菜鸟
2007-05-28 07:33:00     打赏
9楼

yaopg斑竹您好!谢谢您的指导!高手就是高手啊!一语中的!WDB的问题您又给我提供了方向(曾经想到过是这方面的问题,因为我的板子IP在从FLASH启动的时候就不可用,就是我重新初始化的,经验不足啊),我再研究研究!您确实是经验丰富啊!小弟向您学习!

建议超级斑竹给yaopg斑竹的这两个帖子加精!从我调试出现的问题看我觉得这样的分析很有针对性!


院士
2007-05-28 16:05:00     打赏
10楼

yaopg~~

辛苦了,这些天论坛总是不正常,你总是不辞辛苦,谢谢了!!

顺便说一声,论坛马上就要搞好了,准备使用新系统,并且又购置了新的服务器,你们大显才能的时候就要到了!


共10条 1/1 1 跳转至

回复

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