找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 9859|回复: 11

NXC子程序

[复制链接]
发表于 2010-7-26 15:30:18 | 显示全部楼层 |阅读模式
照“nxc快速入门”编写如下程序,运行后发现,子程序无法运行。请高手给看看,是哪里出了问题?

  1. #define SEM 0
  2. task move_square()
  3. {
  4. while (true)
  5. {
  6. until(SEM==0);SEM==1;
  7. OnFwd(OUT_AC,60);
  8. SEM==0;
  9. Wait(900);
  10. until(SEM==0);SEM==1;
  11. OnRev(OUT_C,60);
  12. SEM==0;
  13. Wait(800) ;
  14. }
  15. }

  16. task submain()
  17. {
  18. if(SENSOR_1==1)
  19. {
  20. until(SEM==0);SEM==1;
  21. OnRev(OUT_AC,60);Wait(600);
  22. OnFwd(OUT_A,60);Wait(800);
  23. SEM==0;
  24. }
  25. }

  26. task main()
  27. {
  28. Precedes(move_square,submain);
  29. SetSensorTouch(IN_1);
  30. }
复制代码

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2010-7-26 15:57:05 | 显示全部楼层
给你提点意见,
1.应该学会自己找问题的答案,不要老等别人来帮你解决,学会用编译器的错误提示
2.代码的话,请用代码标签,不然复制会有乱码
3.怎么样无法运行,是不能编译,提示什么错误,你总得说出来吧。就这样丢个代码过来让人帮检查比重新写都累。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-26 16:04:50 | 显示全部楼层
程序是没有问题的,但是我不知道有什么用,感觉摸不着头脑的作用,如果你想提现出task submain()这个函数的效果,建议在里面套个死循环。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-7-26 16:08:45 | 显示全部楼层
回复 糖伯虎 的帖子
呵呵,不好意思,是我没有说清楚。
我是按照教程上编写的,编译完全没问题,就是运行后发现,按下触碰传感器后“task submiain()”中的程序完全没反应。
我自己试过很多方法找问题的答案。我现在学的是“nxc快速入门”,这个程序就是按照“nxc快速入门”编写的。学习中发现“nxc快速入门”是programming lego nxt robots using nxc 的简编汉译本,我又到后者去找,发现后者没有这段程序,而是用mutex函数来完成的。实在是找不到问题所在,所以发在这里让大家帮我看看问题所在。有不妥的地方还望见谅啊!谢谢!

   
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-7-26 16:12:59 | 显示全部楼层
本帖最后由 斯螽动股 于 2010-7-26 16:16 编辑

回复 糖伯虎 的帖子
这是“NXC快速入门”中“项目H 一边走,一边唱”中的代码(我作了点改动,否则似乎无法运行),编写目的是为了解决争抢资源问题。“NXC快速入门”虽然是中文的,但好像很多问题没说明白,代码也有时有点问题,所以学起来有点麻烦。
NXC快速入门链接http://www.cmnxt.cn/forum.php?mod=viewthread&tid=141&highlight=NXC,该教程12页。
   
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-26 16:29:17 | 显示全部楼层
我告诉你了,在那函数里套一个死循环,因为第一个任务是死循环的,第二个任务只运行一次,你触碰自然没有效果了。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-26 16:31:13 | 显示全部楼层
programming lego nxt robots using nxc
这个东西我好像没有,方便的话发我一份,hollwen@qq.com
我也好参考做个nxc的教程。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-7-26 16:45:45 | 显示全部楼层
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-26 18:34:17 | 显示全部楼层
= =?伯虎兄。。我有个疑问。。。这里面貌似没有子函数的感觉……task不是任务么。。多个task就是多个动作同时运行……不知道是不是我理解错了。。。不知道子函数和子程序有什么区别。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2010-7-26 19:14:48 | 显示全部楼层
回复 糖伯虎 的帖子
加了个死循环后问题解决了,感谢糖老大!

   
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-26 20:00:37 | 显示全部楼层
回复 394069341 的帖子


    是的,是任务,没有子函数,不过楼主这样说也问题不大,我觉得和函数也没有多大区别。
主函数里的第一句意思就是两个子任务同时运行,我猜测这个程序把前两个任务的task标记去掉效果是一样的,不过我没有测试
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-7-27 12:41:08 | 显示全部楼层
回复 糖伯虎 的帖子


    原来如此~~这个就是子函数和任务程序的区别吧。。子函数不能同时运行。任务程序可以同时运行。不过我记得那个task好像是任务程序的……那个叫。。标号= =?定义符?……貌似去掉的话就会认为是子函数了吧。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2025-1-7 04:41 , Processed in 0.099398 second(s), 18 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表