28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FreeRTOS のメモ

Last updated at Posted at 2016-12-03

FreeRTOS を使っていて調べたことをメモしました。

待つ

  • タスクを待たせるにはvTaskDelay()を使う。
  • 引数にtickを指定する。1tick待たせる場合は、vTaskDelay(1);とする。
  • 指定したtickの期間だけタスクを待たせる。
  • ms単位で待たせたい場合はportTICK_RATE_MSで割る。
  • 10ms待たせたる場合は、 vTaskDelay(10/portTICK_RATE_MS); とする。

タスク

  • タスクの生成はxTaskCreateを使う
  • タスクの優先度は、数字が大きいほど優先度が高い。
  • タスクの優先度の範囲:0 から (configMAX_PRIORITIES-1)
  • スタック深さを指定する。ARMの場合はスタック幅は4バイトなので、 スタック深さ100を指定すると、400バイト使用する。

周期処理

#include <timer.h>

TimerHandle_t handle;
uint32_t count=0;

void interval_func(TimerHandle_t pxTimer)
{
  count++;
  printf("count=%u\n", count);
}

void start_interval_func(void)
{
  handle = xTimerCreate("print_every_10ms",(10 / portTICK_RATE_MS), pdTRUE, (void *)0, interval_func);
  if(handle != NULL)
  {
    xTimerStart(handle, 0);
  }
}

時間を測定

  • xTaskGetTickCount()を使ってtickを取得する。
portTickType StartTime, EndTime;

StartTime = xTaskGetTickCount();
vTaskDelay(1)
EndTime = xTaskGetTickCount();

printf("Elapsed %d[ticks] %d[ms]", ( EndTime - StartTime ),( EndTime - StartTime ) * portTICK_RATE_MS);

SysTick

  • ARM Cortex-M で FreeRTOSを使う場合、OSのタイマにはARMが提供する NVICのSysTickを使う。
  • SysTickの仕様:Cortex-M3 テクニカルリファレンス マニュアル→ネスト型ベクタ割り込みコントローラ→NVICのプログラマモデル→NVICレジスタの説明→SysTick制御およびステータスレジスタ
  • 通常は、1ms毎の割り込みを発生する設定にして、割り込みハンドラでxPortSysTickHandler()を呼び出す。

#HEAP

  • heapはアルゴリズムの違う、hap1 から heap5までの5種類がある。
  • pvPortMalloc()でメモリを割り当てる。

割り込みハンドラ

  • 割り込みハンドラ内では、関数名の末尾がFromISRがあるならそちらを使う。使わないと固まる。

OSの設定

  • FreeRTOSConfig.hにOSの各種設定値を定義する。

  • TICKの設定

config description
configTICK_RATE_HZ 1秒間に何回TICKを刻むか。1000なら1ms毎にtickを刻む。
  • HEAPの設定
config description
configTOTAL_HEAP_SIZE トータルのヒープサイズ (OSがタスクの生成などで使うヒープ)
configTOTAL_APP_HEAP_SIZE アプリのヒープサイズ
  • タイマの設定
config description
configUSE_TIMERS 1ならタイマを使う
configTIMER_TASK_PRIORITY タイマタスクの優先度
configTIMER_QUEUE_LENGTH タイマキューの長さ
configTIMER_TASK_STACK_DEPTH タイマタスクのスタック深さ

ソースコード

28
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?