[Atmel] 跑一下SAM4N例程(十):FREE RTOS

[复制链接]
776|0
 楼主| ddllxxrr 发表于 2015-3-10 21:01 | 显示全部楼层 |阅读模式
按照以前的方法开打FREE RTOS的例程。



则可以看出这个例程跑两个线程:

一个LED闪,一个打印当前运行的线程。

其中,定义两个线程的堆栈如下:

  1. #define TASK_MONITOR_STACK_SIZE            (2048/sizeof(portSTACK_TYPE))
  2. #define TASK_MONITOR_STACK_PRIORITY        (tskIDLE_PRIORITY)
  3. #define TASK_LED_STACK_SIZE                (1024/sizeof(portSTACK_TYPE))
  4. #define TASK_LED_STACK_PRIORITY            (tskIDLE_PRIORITY)
定义两个线程如下:

  1. **
  2. * \brief This task, when activated, send every ten seconds on debug UART
  3. * the whole report of free heap and total tasks status
  4. */
  5. static void task_monitor(void *pvParameters)
  6. {
  7.         static portCHAR szList[256];
  8.         UNUSED(pvParameters);

  9.         for (;;) {
  10.                 printf("--- task ## %u", (unsigned int)uxTaskGetNumberOfTasks());
  11.                 vTaskList((signed portCHAR *)szList);
  12.                 printf(szList);
  13.                 vTaskDelay(1000);
  14.         }
  15. }

  16. /**
  17. * \brief This task, when activated, make LED blink at a fixed rate
  18. */
  19. static void task_led(void *pvParameters)
  20. {
  21.         UNUSED(pvParameters);
  22.         for (;;) {
  23.         #if SAM4CM
  24.                 LED_Toggle(LED4);
  25.         #else
  26.                 LED_Toggle(LED0);
  27.         #endif
  28.                 vTaskDelay(1000);
  29.         }
  30. }
建立两个线程及开始运行如下:

  1. /* Create task to monitor processor activity */
  2.         if (xTaskCreate(task_monitor, "Monitor", TASK_MONITOR_STACK_SIZE, NULL,
  3.                         TASK_MONITOR_STACK_PRIORITY, NULL) != pdPASS) {
  4.                 printf("Failed to create Monitor task\r\n");
  5.         }

  6.         /* Create task to make led blink */
  7.         if (xTaskCreate(task_led, "Led", TASK_LED_STACK_SIZE, NULL,
  8.                         TASK_LED_STACK_PRIORITY, NULL) != pdPASS) {
  9.                 printf("Failed to create test led task\r\n");
  10.         }

  11.         /* Start the scheduler. */
  12.         vTaskStartScheduler();


运行结果:

灯一闪一闪并在闪的同时打印出如下信息:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部