RISC-V MCU中文社区

【求助】 在Helloworld中添加sleep()函数报错

发表于 GD32VF103 MCU 2021-03-25 16:57:35
3
2867
0

这可能是个傻问题。

我在论坛搜索了一下helloworld相关的问题,没有找到跟我相似的。

默认的helloworld代码我是能跑通的,没有问题,所以我认为开发环境应该是没有问题的。

我想在helloworld程序中,添加一个sleep函数,让它sleep 2秒之后再继续循环,然后就出错了:



而且错误是在ld的时候出错的,也就是链接的时候,好像错误是“未定义的索引sleep”。

我是添加了 #include <unistd.h> 的,如图:




按理说应该能找到的呀。

而且我右键点击sleep,然后选 Open Declaration ,能够打开unistd.h ,并且看到sleep函数的声明。

如图:




然后我又 sleep(2); 那一行给注释掉了,程序就正常了,如图:



我把循环次数改成30次了,而不是demo中的20次。

这么来看,问题应该是出在sleep这行上了。

请问如果这里想停2秒,应该怎么写呢?

谢谢!


顺便说一下,帖子里要想输入 <unistd.h> 是需要转义的,转义的方法是:

https://www.w3school.com.cn/html/html_entities.asp

喜欢0
用户评论 (3)
  • 张皓

    2021-03-26 15:40:53 张皓 1#

    胡灿

    1. sleep函数在newlib C里面并没有进行实现,所以这里即使能打开头文件,但是链接也找不到,没记错的话,sleep应该是POSIX函数,不是标准C函数库里的。

    2. 想实现停顿2s的话,可以用delay_1ms(2000)来实现,这个delay是提供内核timer实现的,具体函数在gd32vf103_soc.c这个文件中

    多谢!以前在linux上搞程序,习惯直接用sleep(),没有想到嵌入式库的问题。多谢多谢!

  • 张皓

    2021-03-26 15:03:15 张皓 2#

    胡灿

    1. sleep函数在newlib C里面并没有进行实现,所以这里即使能打开头文件,但是链接也找不到,没记错的话,sleep应该是POSIX函数,不是标准C函数库里的。

    2. 想实现停顿2s的话,可以用delay_1ms(2000)来实现,这个delay是提供内核timer实现的,具体函数在gd32vf103_soc.c这个文件中

    谢谢!

  • 胡灿

    2021-03-26 15:02:24 胡灿 3#

    1. sleep函数在newlib C里面并没有进行实现,所以这里即使能打开头文件,但是链接也找不到,没记错的话,sleep应该是POSIX函数,不是标准C函数库里的。

    2. 想实现停顿2s的话,可以用delay_1ms(2000)来实现,这个delay是提供内核timer实现的,具体函数在gd32vf103_soc.c这个文件中

张皓

张皓 实名认证

Those who do not study history are doomed to repeat it.

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板