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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。