ST8
cxstm8はST8シリーズをすべてサポートします。
- ANSI/ISOに準拠したCで記述
- STM8周辺機器のためにヘッダーファイルもサポート
- Cレベルでのサポートはショートアドレッシングとビット変数によって提供
具体的な特徴
- 実行時支援パッケージ
- CのルーティンサポートはANSIのサブセットで構成されているのでライブラリのルーティンを自由に変更可能
- すべてのルーティンライブラリはROM化が可能
- →整数のみのライブラリと単精度浮動小数点のライブラリの2種類から選べるので、必要がなければより高速な整数のみのライブラリを選択することが可能
- メモリモデル
- アプリケーションのサイズによって異なる2種類のメモリモデルを提供しています。
- サイズが64kよりも小さい場合 → “section0”メモリモデル…関数呼び出しなどをデフォルトで2byteにすることでメモリコードの密度を最適化
- サイズが64kよりも大きい場合 → 標準的メモリモデル …リニアアドレス指定の領域を簡単に使えるような柔軟性を持つ
- アプリケーションのサイズによって異なる2種類のメモリモデルを提供しています。
※それぞれのメモリモデルは、個々のライブラリに付属しています。
- 最適化
- 大域的最適化とマイクロコントローラに合わせた特異的最適化の両方を含みます。
- 最適化を自分でコントロールすることが出来るので、アプリケーションの詳細な設計に合わせて微調整することが可能です。
- ピーホール(覗き穴)最適化ソフトは、非効率的なコードを適切なコードに置き換えることで最適化します。
- char型変数(文字列)はint型変数(整数)に変換されずに関数の引数に渡されます。
- 頻繁に使うスタティックなデータは@tinyコード、またはコンパイルタイムオプションの使用によってゼロページに置くことが出来ます。
- コード属性分配の最適化は、コードチャンクをサブルーティンへグループ分けすることによって出来るコピーに置き換えます。
- アセンブラで書かれた命令はパイプライン機能が停止することを避けます。
- IEEE754規格に準拠した単精度浮動小数点(32bit)で数学的演算を行います。
- 他には以下の最適化があります。
- 岐路短縮ロジック
- 局所分岐の削除
- 定数の畳み込み
- 到達不能コードの除去
- 冗長な負荷/記憶の削除
- switch文の最適化
- 拡張機能
- Bool型変数をグローバル/ローカル変数のコンパイラによって宣言可能
- bitフィールドをchar型かint型か選択可能
- bitの番号付けを右からか左からか選べます
- 拡張的な以下のようなコードが用意されています
- asm()または#asm/#endasm・・・Cコード内にアセンブリコード直接挿入
- @interrupt・・・C関数/オブジェクトを割り込みハンドラとして定義
- @〈adress〉・・・C関数/オブジェクトを絶対的アドレスとして定義
- コンパイラの付属的な特徴
- Cおよびアセンブリのソースレベルでデバッグが可能
- コンパイルによって絶対的で再配置可能なリストを出力
- エラー診断
- 素早いコンパイルとアセンブル
- ファイルパス、オブジェクトの配置、エラーファイルのリスト化はすべてユーザーコントロール
- すべてのオブジェクトはホストコンピュータに依存しない
- 関数コードとスイッチテーブルは(.text)コードのセクションに生成
- 文字列や定数データは(.const)コードのセクションに生成
- 初期化されたスタティックデータは他のデータと区別されます
- 関数は共有され、ROMに配置されます。デフォルトによって自動的に修正されることはありません。
- コードはSAL(記号アセンブリ言語)ファイルとして生成されるのでコンパイラの出力をテストすることが出来ます。
- 大きなソースコードに対応するため、ヒープ(短期記憶領域)にテーブルをリアルタイムに作成
- 文字列操作ルーティンは高速の実行するためにアセンブリ言語で実装されています。
- デバッグサポート
- cxstm8はZAP/SIMまたは多くの一般的なインサーキットエミュレータ(ICE)メーカの提供するデバッガが使えます。
- IEEE695またはELF/DWARFを含むいくつかの補助的なデバッグフォーマットもサポートしています。
- 対応機種
Host Product code
PC (DOS/Windows) CXSTM8-PC
PC Linux CXSTM8-LIN
SUN SPARC(SunOS/Solalis) CXSTM8-SUN