LoginSignup
3
0

サンプルコードを1行修正するだけでslコマンドができちゃった話

Posted at

この記事はSpresense Advent Calendar 2023の1日目(12/1分)です。

この記事は何?

slコマンドをSpreseneで簡単にできたことを共有する記事です。

コード

コードはGitHubリポジトリに置きました。

slコマンドを確認するモチベーション

マイコンボードでLチカが確認できたら何をしていますか?
私の場合、つぎのステップとしてslコマンドを試してみることが多いのでSpresenseでも試してみました。

確認環境

ハードウェア

つぎのハードウェアで確認しました。

  • Spresenseメインボード
  • Spresense拡張ボード
  • LCD ILI9341

ソフトウェア

Spresense SDKで確認しました。

確認手順

つぎの手順で確認します。

環境構築

Spresense SDK 開発ツールのセットアップ

事前にSpresense SDKでの開発 -> Spresense SDK スタートガイド (CLI 版) -> 2. 開発ツールのセットアップを実施し、開発環境を構築しておきます。

ユーザアプリの追加

Spresense SDKでの開発 -> Spresense SDK スタートガイド (CLI 版) -> 6. ユーザーアプリの追加方法 -> 6.3. ツールを使用するを参照し、ユーザアプリを追加します。

今回はつぎのコマンドでユーザアプリを追加しました。

tools/mkappsdir.py sl “sl command”
tools/mkcmd.py -d sl sl “sl command”

コンフィグレーション

spresense/sdkディレクトリで次のコマンドを実行します。

tools/config.py examples/pdcurses

Macの場合、次のディレクトリでした。

/Users/ユーザ名/spresense/sdk

ソースコード準備

slコマンドのソースコードはオリジナルのslコマンドを流用させてもらいます。

オリジナルのslコマンド GitHubリポジトリ

sl.c, sl.hをslディレクトリにコピーします。

Makefileの変更

sl/MakefileのMAINSRCをsl.cに変更します。

include $(APPDIR)/Make.defs
include $(SDKDIR)/Make.defs

PROGNAME = $(CONFIG_SL_SL_PROGNAME)
PRIORITY = $(CONFIG_SL_SL_PRIORITY)
STACKSIZE = $(CONFIG_SL_SL_STACKSIZE)
MODULE = $(CONFIG_SL_SL)

ASRCS =
CSRCS =
MAINSRC = sl.c

include $(APPDIR)/Application.mk

コード変更

sl.cのヘッダーファイルインクルードをつぎのように変更します。

-#include <curses.h>
+#include "graphics/curses.h"
#include <signal.h>
#include <unistd.h>
#include "sl.h"

コード修正が終了したらmake、コードをflashします。
NuttXのプロンプト(nsh)からslとタイプすると冒頭の動画のようにslコマンドが実行できます。

なぜ簡単にslコマンドができたのか考察

オリジナルのslコマンドから1行の変更でSpresenseでslコマンドが実行できました。
なぜこんなに簡単にslコマンドができたのか考察します。

Spresenseでcursesが使えるため

オリジナルのslコマンドはcursesを使っています。
cursesのWindows向け実装PDCursesがNuttX(※)にポーティングされており、今回はPDCursesを使いました(コンフィグレーションでexamples/pdcursesを指定したところ)。

※Spresense SDKはNuttXのうえで動作しています。

今回はslコマンドでしたがcursesを使っているOSSであればSpresenseで割と簡単に移植ができるかもしれません。

3
0
0

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
3
0