目次

リアルタイムOS, プロトコル, List

+
その他

Arduino, OS
Arduino上で走るOSの作り方 | Arduino

OSは日常のあらゆる場所で目にします. パソコンには必ずと言っていいほどOSが走っており, 携帯, ゲーム機などにもOSが走っております. このような普段よく使うOSですが, そのOSの仕組みを分かっていても, 実際どのように作るのかはよく知られておらず気になります.

このページでは, 実際にArduinoで動くOSを作成することで, OSの理解を深めます. 使用するプログラミング言語はC言語です. (作成といいましても, すでに在りますFreeRTOSから必要な機能を抜き出し, Arduinoで動くようにしました.) なお, 今回扱うOSは汎用OSではなくリアルタイムOS(RTOS)と呼ばれるものです. 汎用OSとは, すべてのタスクに等しく優先度が与えられますが, RTOSではタスクごとに優先度を設定できます.

話の進め方ですが, 今回のOS製作では実装に重きを置くため, コードを中心に話を進めていきます. 各コードごとに簡単な説明を行い, その中で特に重要な部分―OSの仕組みに深くかかわる部分―もしくはさらに詳しい説明については別ページで行います. これら別ページ―詳細ページ―は子コンテンツである"仕組み"にまとめられています.

話の流れは次のとおりです.

  • RTOSとは
  • 目標と使い方
  • 準備
  • ファイル構成
  • スクリプト
  • ボードの設定
  • 仕組み

対応状況

  • Arduino UNO
  • Arduino Mega

動作確認済み環境

  • Arduino IDE 1.8.10
  • Arduino AVR Boards 1.8.1
校正, 文章
文章校正プロトコル | 文章

本稿は, 筆者が今まで文を書いてきて, 先輩, 先生方から言われた文の校正内容をまとめたものです. 文の意味で校正をするのではなく, 文を文字列として扱いプロトコル的に校正します.

ライブラリ, Cpp
C++でC#のようなListを使いたい | C++ライブラリ

C#からC++に入った人もいるでしょう. その時C#で大変よく使っていたListが恋しい場合があります. C++を書きつつC#を感じたい時があります.

上の問題を解決する方法でここで紹介するListがあります. このListで用意されている関数名はほぼC#と一致します. C#でのListは要素数が容量を上回ったとき自動でメモリが再確保されますが, ここで紹介するListもそのように動作します. アルゴリズムも同じです(はずです).

C#で非常に便利だったSort関数も用意されています. もちろんですが, 処理が一番早いとされているクイックソートアルゴリズム(O(n*log(n)))を使用しています.

Listを強化, 改良何でもしてください. ( `ー´)ノ

CAUTION

C#のListを使ったことがない方は, これをお勧めすることはできません. これと同様かそれ以上の機能を持つC++のvectorをお使いください. C++ですでに用意されています.

C#, C++
C++でC#のようなListを使いたい | C++ライブラリ

C#からC++に入った人もいるでしょう. その時C#で大変よく使っていたListが恋しい場合があります. C++を書きつつC#を感じたい時があります.

上の問題を解決する方法でここで紹介するListがあります. このListで用意されている関数名はほぼC#と一致します. C#でのListは要素数が容量を上回ったとき自動でメモリが再確保されますが, ここで紹介するListもそのように動作します. アルゴリズムも同じです(はずです).

C#で非常に便利だったSort関数も用意されています. もちろんですが, 処理が一番早いとされているクイックソートアルゴリズム(O(n*log(n)))を使用しています.

Listを強化, 改良何でもしてください. ( `ー´)ノ

CAUTION

C#のListを使ったことがない方は, これをお勧めすることはできません. これと同様かそれ以上の機能を持つC++のvectorをお使いください. C++ですでに用意されています.

Listの使い方 | C++でC#のようなListを使いたい

ここでは, Listの基本的な使い方を説明します. 各説明項目は以下のとおりです.

  • 使用例
  • C#との相違点
  • Sortについて
Listの導入方法 | C++でC#のようなListを使いたい

ここでは, Listの導入方法を説明します. 説明項目は以下のとおりです.

  • ダウンロード
  • インクルード
Listの関数一覧 | C++でC#のようなListを使いたい

Listが持つ関数は以下のとおりです.

List コンストラクタ
Count 要素数を取得
Capacity 容量を取得
SetCapacity 容量を設定
Array 内部配列先頭アドレス取得
Add List末尾に要素追加
Insert 指定した位置に要素挿入
IndexOf 指定されたオブジェクトの位置
LastIndexOf 最後から検索して最初に見つかったオブジェクトの位置
CopyTo 配列にコピー
RemoveAt 指定した位置を削除
Clear 要素をゼロ
Sort 並び替え
Trim 容量を要素数に設定
CopyFrom 指定されたListからコピー
MoveFrom 指定された配列そのものをListに差し替え

筆者がこのListを作る際, C#のListリファレンス(accessed: 2.1.2017) を参考にしました. 関数名はほとんど同じにしています.

ダウンロード
Listの導入方法 | C++でC#のようなListを使いたい

ここでは, Listの導入方法を説明します. 説明項目は以下のとおりです.

  • ダウンロード
  • インクルード
更新履歴
更新履歴 | ContentsViewer

ここにはWebPageViewerの更新履歴が書かれます.

更新履歴 | TwitterBot

ここにはTwitterBotの更新履歴が書かれます.

ゲーム, 製作, アプリ
製作ゲーム一覧 | アプリケーション一覧

私が製作に携わったゲームを紹介します.

編集中
状態リスト | タスク管理

それぞれのタスクにはそのタスクの状態というものがあります. 今回のOSでは, このタスクの状態を状態リストを用いて判別することにします. 以下から, タスク状態の種類, 状態リストの構造, リストを用いたタスク状態の切り替え方法を詳しく見ていきます.

「https://contentsviewer.work/Master/:tagmap/リアルタイムOS,プロトコル,List?layer=ja」から取得