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

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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版