2015/06/21

[nrf51]SSPをちょっとだけ動かす

BluetoothにSPPというプロファイルがあるが、それではない。
TOPPERS/SSPだ。

ちょうどarmv6_m_gcc – Contributed Softwareがあったので、ちょいちょいと変更できるかと思ったのだけど、Cortex-M0+だったのでベクタオフセットを変更できるレジスタが使われていたし、SysTickも使われていた。
nRF51822にはその辺がないので、ベクタテーブルは今と同じくRegion1の先頭に置き、タイマはそのうち載せることにした。
UARTのログ出力も対応方針を決めていないので、引き抜いた。
とりあえずタスクが起動するだけ、というものを動かすことにした。

その状態でビルドすると、このくらいだ。
.exeという拡張子になっているが、ELF。
TOPPERSはなぜか.exeなのだ。

arm-none-eabi-size ssp.exe
   text    data     bss     dec     hex filename
   2434       4     424    2862     b2e ssp.exe

えっと、

text : コード
data : 初期値あり変数
bss : 初期値なし変数

だそうだ。
あれ、初期値ありはいいとして、初期値なし変数もELFの中に入っているのか?
あるいは単に情報として表示しているだけで、ROM化したときには残らないのか?


気になったので、objdump -h で見た。

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         0000077e  00018000  00018000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .rodata       00000204  00018780  00018780  00008780  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  2 .data         00000004  20002000  00018984  0000a000  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  3 .bss          000001a8  20002008  00018990  0000a008  2**3
                  ALLOC
  4 .ARM.attributes 0000002d  00000000  00000000  0000a004  2**0
                  CONTENTS, READONLY
  5 .comment      00000070  00000000  00000000  0000a031  2**0
                  CONTENTS, READONLY
  6 .debug_line   000012a5  00000000  00000000  0000a0a1  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_info   00002755  00000000  00000000  0000b346  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_abbrev 00000e19  00000000  00000000  0000da9b  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_aranges 00000180  00000000  00000000  0000e8b8  2**3
                  CONTENTS, READONLY, DEBUGGING
10 .debug_loc    00000b7a  00000000  00000000  0000ea38  2**0
                  CONTENTS, READONLY, DEBUGGING
11 .debug_str    00000dd1  00000000  00000000  0000f5b2  2**0
                  CONTENTS, READONLY, DEBUGGING
12 .debug_frame  00000350  00000000  00000000  00010384  2**2
                  CONTENTS, READONLY, DEBUGGING
13 .debug_ranges 00000180  00000000  00000000  000106d4  2**0
                  CONTENTS, READONLY, DEBUGGING

sizeコマンドがtextで表示しているのは、text + rodataだ。
なので、純粋にROMとしてはこのサイズになるはず。
dataやbssはアドレスがRAMになっているから、ROMからは除外されるだろう。


これをnRF51822に焼いて、サンプルのhello_worldのログ無し版のタスク呼び出しまでは確認できた。
元々はログにHello Worldを出すだけのサンプルなので、それのログ無し版となると中身がないのだ・・・。

さて、これにnRF51 SDKを組み合わせないと意味がない。
Advertisingくらいまで動けばよいのだが、まずはベクタテーブルを解決せんといかん。
nRF51 SDK v8.1.0を見る限りでは、components/drivers_nrfがハンドラを持っている。
それをSSPで置き換えないと、OSが割込を管理できないのではないかと思う。

思うのだが、そもそもSoftDevice自体がかなりOSっぽいことをしているので、その流れは変えたくない。
じゃあ、RTOSを入れなくてもいいやん、となってしまい、頭の中がぐるぐるしている。

まあ、もう少し粘ってみますかね。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。