ライブラリの使用量を最小限に抑えてオンボードLEDをオンにするためだけに、Stellarisランチパッド用のコードをCで記述したいと思いました。驚いたことに、コンパイルされたコードのサイズは約800バイトでした。そこで、コンパイラがコンパイルしたコードに何が入っているかを確認するために、逆アセンブラを使用してアセンブリコードを確認しました。Cコードを書かなかったコードがたくさんありました。それらのコードが何のためにあるのか、そしてそれがどのようにコンパイラ設定に入ったのか知りたいのですが。私は、コンパイラーがどのように動作するか、そしてコンパイラーが舞台裏で何をしているのかを学ぼうとしています。私を助けてください。
これは私のCプログラムです:
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#define GPIOFBASE 0x40025000
#define GPIOCLK *((volatile unsigned long *)(0x400FE000 + 0x608))
#define FDIR *((volatile unsigned long *)(GPIOFBASE + 0x400))
#define FDEN *((volatile unsigned long *)(GPIOFBASE + 0x51C))
#define FDATA *((volatile unsigned long *)(GPIOFBASE + 0x3FF))
void main(void) {
ROM_SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_XTAL_16MHZ | SYSCTL_OSC_MAIN);
GPIOCLK |= (1<<5);
FDIR |= 0xE;
FDEN |= 0xE;
FDATA |= 0xE;
while (1);
}
私が使用した唯一のAPI呼び出しは、オンチップROMライブラリを使用して時計設定を設定することでした。このペーストビンで分解コードを確認してください:(メイン:0x190にあります。)