[原创] LPC1500体验+mbed_rtos(2)

ddllxxrr   2014-9-8 16:40 楼主
前个贴是一个线程,这里是两个线程
类名
方法
用途
Thread
Thread(void (*task)(void const *argument),
void *argument=NULL,
osPriority priority=osPriorityNormal,
uint32_t stack_size=DEFAULT_STACK_SIZE,
unsigned char *stack_pointer=NULL);
构造函数,输出参数分别是任务函数指针,函数参数指针,线程优先级,堆栈大小,堆栈指针,默认为普通优先级,2K字节内存堆栈,使用内部分配方式,如果传入堆栈指针,则使用传入指针指向的内存
osStatus terminate();
结束本线程
osStatus set_priority(osPriority priority);
设置本线程优先级
osPriority get_priority();
获取本线程优先级
int32_t signal_set(int32_t signals);
设置本线程信号量
State get_state();
静态函数,获取当前线程状态
static osEvent signal_wait(int32_t signals, uint32_t millisec=osWaitForever);
静态函数,等待信号量
static osStatus wait(uint32_t millisec);
静态函数,挂起当前线程millisec毫秒
static osStatus yield();
静态函数,把运行权交给下一个线程
static osThreadId gettid();
静态函数,获取当前线程ID
为了保证正常运行,除了加了优先级外还有 Thread::wait方法就不会一样了,因为它等待的时间内并不需要运行权,所以别的低优先级的线程就有了运行的机会,但一定要注意的是,任何一个子线程必须有释放运行权的机制,否则别的线程就不再有运行的机会, 以下是程序:
  1. #include "mbed.h"
  2. #include "rtos.h"
  3. Serial pc(USBTX,USBRX);
  4. uint8_t theadindex[2];
  5. long count[2];
  6. void printstr(void const *args)
  7. {
  8. while (true) {
  9. count[*(uint8_t *)args-1]++;
  10. Thread::wait(500);
  11. }
  12. }
  13. int main()
  14. {
  15. theadindex[0]=1;
  16. theadindex[1]=2;
  17. Thread thread1(printstr,(void *)theadindex,osPriorityNormal);
  18. Thread thread2(printstr,(void *)(theadindex+1),osPriorityHigh);
  19. while (1)
  20. {
  21. pc.printf("Thread1 count is %ld,Thread2 count is %ld. \n",count[0],count[1]);
  22. Thread::wait(1000);
  23. }
  24. }
以下是运行效果: rtos33.JPG 本帖最后由 ddllxxrr 于 2014-9-8 16:43 编辑
http://shop34182318.taobao.com/ https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr

回复评论 (1)

可见到中文的了
不锈钢电阻,电阻器
点赞  2014-9-9 14:18
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复