ARMのスタートアップルーチンをハック

、組み込みの仕事をしておりまして。いま新しいプロジェクトが立ち上がり、動き始めたところなんです。が、早速一つ問題が発生。やれやれ。さて、まずは今回の開発環境を軽く説明。とはいえハードの仕様は機密事項なので公開できません。なので、コンパイル環境を記載します。



さて、プロジェクト開始当初はもちろんスタートアップルーチンから作成するわけです。例外ベクタハンドラ、各種スタック、ヒープの設定をアセンブリコードで記述した後、armccでは_main()呼び出すことでarmlib内のスタートアップルーチンが走り、ROM、RAMの配置、初期値付き変数の初期化、ZI領域のゼロクリア、その後ユーザーのmain()をコールするところまでやってくれるようになっています。しかし、このarmlib内のスタートアップルーチンというのが社内の規定にひっかかりまして。会社での規約として





ブラックボックスになっているモジュールは使用しない”





というものがあります。まあ、ライブラリだろうがなんだろうがソースコードの無いモジュールは使用するなという事でして。「ARMが提供しているものだから…使っちゃだめ?」とダメ元で聞いてみたら案の定だめでした。仕方ありません。



日はとりあえず_main()ではなく、自前のメイン関数をコールするように変更し、間違いなくその関数に飛んでくることを確認するところまで作りました。とりあえず明日はリンカの仕様書とにらめっこしてRAMクリア処理を実装していくとします。うまく動いたらまた書きます。