码迷,mamicode.com
首页 > 其他好文 > 详细

CMSIS_RTOS 之点灯

时间:2014-12-06 15:21:52      阅读:1441      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   ar   color   os   使用   sp   for   

RTX作为MDK自带的操作系统,比起ucOS使用之前先要做一大堆移植工作,无疑是要简单多了。

 
只需要在RTE里面把想要的勾上,保证下面不会有警告,所有的勾勾都是绿色的,就算配置成功,可以直接用了。
 
参照官方例程很快就可以点上灯:
 
首先在App1.C里面的内容,定义好一个任务。
  1. #include<main.h>
    void job1 (voidconst*argument){// thread function ‘job1‘
    
    while(1){
    bsp_led_toggle(2);
    osDelay (200);// delay execution for 10 milliseconds
    }
    }
    

     

注意将该任务作为一个函数extern出去,使之在main文件里面能够调用函数名。
然后在main文件里面配置该任务的优先级,任务的实例数量,任务的堆栈大小
 
  1. osThreadDef(job1, osPriorityAboveNormal,1,0);// define job1 as thread function
 
 
再在main函数里面初始化并开始就可以了
  1. int main(void)
  2. {
  3. osThreadId id_job1;
  4. /* STM32F4xx HAL library initialization:
  5. - Configure the Flash prefetch, Flash preread and Buffer caches
  6. - Systick timer is configured by default as source of time base, but user
  7. can eventually implement his proper time base source (a general purpose
  8. timer for example or other time source), keeping in mind that Time base
  9. duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
  10. handled in milliseconds basis.
  11. - Low Level Initialization
  12. */
  13. HAL_Init();
  14. /* Configure the System clock to have a frequency of 168 MHz */
  15. SystemClock_Config();
  16. bsp_led_init();
  17. osKernelInitialize();
  18. id_job1 = osThreadCreate (osThread(job1),NULL);
  19. osKernelStart();
  20. }
直接编译,下载,运行,就可以看到闪灯了!非常快。
 
接下来我开始看RTX帮助文档的时候,看到 osThreadDef 有任务实例个数,以及堆栈大小两个参数。我对RTX的堆栈设置还不是很了解,但是这个任务实例个数应该还是比较好理解的,意思就是我可以运行好几个QQ呗。
 
但是我需要登录不同的账号,也就是说我的不同的任务需要有不同的参数。回头看到任务的声明以及开始任务的时候,确实有传递参数的位置((void const *argument)),折腾了一会儿,终于把参数传递进去了。
 
以下为我的理解(不对还请更正):
void const *arg : 指的是arg是一个指针类型,它可以指向任意类型。指针指向的具体的值是不可以修改的,但是指针本身的位置是可以修改的(但是一般不会去动的吧)。
 
具体使用的时候参见下文:
  1. void job1 (voidconst*argument){// thread function ‘job1‘
  2. int*ptr;
  3. ptr =(int*)argument;
  4. while(1){
  5. bsp_led_toggle(*ptr);
  6. osDelay (200);// delay execution for 10 milliseconds
  7. }
  8. }
 
此时我定义了两个进程实例,然后自定义任务堆栈为250
  1. osThreadDef(job1, osPriorityAboveNormal, 2, 250); // define job1 as thread function /* Private macro -------------------------------------------------------------*/ /* Private variables ---------------------------------------------------------*/ int tt1 = 1; int tt2 = 2;
然后再main里面定义两个任务:
  1. int main(void)
  2. {
  3. osThreadId id_job1;
  4. /* STM32F4xx HAL library initialization:
  5. - Configure the Flash prefetch, Flash preread and Buffer caches
  6. - Systick timer is configured by default as source of time base, but user
  7. can eventually implement his proper time base source (a general purpose
  8. timer for example or other time source), keeping in mind that Time base
  9. duration should be kept 1ms since PPP_TIMEOUT_VALUEs are defined and
  10. handled in milliseconds basis.
  11. - Low Level Initialization
  12. */
  13. HAL_Init();
  14. /* Configure the System clock to have a frequency of 168 MHz */
  15. SystemClock_Config();
  16. bsp_led_init();
  17. osKernelInitialize();
  18. id_job1 = osThreadCreate (osThread(job1),(void*)&tt1);
  19. id_job1 = osThreadCreate (osThread(job1),(void*)&tt2);
  20. osKernelStart();
  21. }
 
这样,就可以看到两盏灯同时在闪了。
 
 
 

CMSIS_RTOS 之点灯

标签:style   blog   io   ar   color   os   使用   sp   for   

原文地址:http://www.cnblogs.com/sprone/p/4f2c78892e70992f29bf0c307dd63ad3.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!