你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

mbed的Thread创建方式有多少种?

[复制链接]
adlu 提问时间:2016-11-30 17:55 /
本帖最后由 adlu 于 2016-12-1 09:34 编辑

我看到mbed的例程中,创建一个Thread有很多种方式。但不知道他们是怎么来的,有什么区别?
PS:本人C++比较薄弱。

比如有以下几种形式:
    Thread thread(print_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
    Thread thread(print_thread);

    Thread t2(test_thread, (void *)"Th 2");

在编译的时候通过了,但是都出现了类似的警告。
Warning: Function "rtos::Thread::Thread(void (*)(const void *), void *, osPriority, std::uint32_t, unsigned char *)" (declared at <a href="#">mbed-rtos/rtos/Thread.h:189</a>) was declared "deprecated" in "main.cpp", Line: 20, Col: 16


求高人指点!
收藏 1 评论5 发布时间:2016-11-30 17:55

举报

5个回答
adlu 回答时间:2016-12-1 09:32:32
本帖最后由 adlu 于 2016-12-1 09:33 编辑
adlu 发表于 2016-12-1 09:08
下面是mbed的一个例程,编译的时候,第23行有一个警告。
我应该怎么改创建例程的代码,才是mbed OS 5的创 ...

尝试了几次,终于摸索出来。
对于带参数的可以这样:
  1. void print_thread(void const *argument)
  2. {
  3.     while (true) {
  4.         Thread::wait(1000);
  5.         print_char();
  6.     }
  7. }

  8. Thread thread;

  9. int main()
  10. {
  11.     printf("\n\n*** RTOS basic example ***\n");
  12.     thread.start(callback(print_thread,(void *)NULL));//如果要传入参数,NULL可换成相应参数的指针
  13.     while (true) {
  14.         led1 = !led1;
  15.         Thread::wait(500);
  16.     }
  17. }
复制代码
对于不带参数的,则可以这样:
  1. void print_thread(void)
  2. {
  3.     while (true) {
  4.         Thread::wait(1000);
  5.         print_char();
  6.     }
  7. }

  8. Thread thread;

  9. int main()
  10. {
  11.     printf("\n\n*** RTOS basic example ***\n");
  12.     thread.start(print_thread);
  13.     while (true) {
  14.         led1 = !led1;
  15.         Thread::wait(500);
  16.     }
  17. }
复制代码


评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

霹雳之火 回答时间:2016-11-30 19:29:57
根据c++猜测,rtos/rtos/Thread.h里有这个函数的定义,但是这个函数或者关键字 以后可能会被弃用吧,最好可以查看一下头文件有没有新的api
shaoziyang 回答时间:2016-11-30 20:44:25
mbed好像在调整,Mbed5和以前有很多区别了。
党国特派员 回答时间:2016-11-30 20:50:18
Mbed 5.1 以后,使用thread.start(callback(task, argument)) 代替过时的构造函数产生线程。
adlu 回答时间:2016-12-1 09:08:25
党国特派员 发表于 2016-11-30 20:50
Mbed 5.1 以后,使用thread.start(callback(task, argument)) 代替过时的构造函数产生线程。 ...

下面是mbed的一个例程,编译的时候,第23行有一个警告。
我应该怎么改创建例程的代码,才是mbed OS 5的创建方式?
  1. #include "mbed.h"
  2. #include "rtos.h"

  3. void print_char(char c = '*')
  4. {
  5.     printf("%c", c);
  6.     fflush(stdout);
  7. }

  8. DigitalOut led1(LED1);

  9. void print_thread(void const *argument)
  10. {
  11.     while (true) {
  12.         Thread::wait(1000);
  13.         print_char();
  14.     }
  15. }

  16. int main()
  17. {
  18.     printf("\n\n*** RTOS basic example ***\n");
  19.     Thread thread(print_thread, NULL, osPriorityNormal, DEFAULT_STACK_SIZE);
  20.     while (true) {
  21.         led1 = !led1;
  22.         Thread::wait(500);
  23.     }
  24. }
复制代码




所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版