arm-none-eabi-gccとボードのライブラリを準備する。

必要なもの

  • Teensy 3.6本体。
  • ARMコンパイラ。
  • Teensyの場合はlibarm_cortexM4l_math.aをダウンロードし、arm-none-eabi/libにコピー。
  • それぞれのボードのライブラリ。Teensyの場合はここ
    • makeで開発できるテンプレートを使用すると楽。ここからダウンロード。
      • tools以下にダウンロードしたgccを置く。
      • src以下にmain.cppを書く。サンプルは以下の通り。
// ©2017 Yuichiro Nakada

#include "WProgram.h"

void setup()
{
	pinMode(13, OUTPUT);
	analogWriteResolution(8);	// 8bit/Resolution
}

void loop()
{
	if (usb_audio_receive_buffer[0]<0x7fff) digitalWriteFast(13, LOW);
	else digitalWriteFast(13, HIGH);
	analogWrite(9, 50);
}

extern "C" int main()
{
	setup();
	while (1) {
		loop();
		yield();
	}
}

参考

参考: clang+llvm

  • 1からnの総和を求める関数sum()
int sum(int x)
{
	int sum = 0;
	for (int i=1; i<=x; i++) {
		sum += i;
	}
	return sum;
}
$ clang -target arm -march=armv7-a -O -S sum.c
	.text
	.syntax unified
	.eabi_attribute	67, "2.09"	@ Tag_conformance
	.eabi_attribute	6, 10	@ Tag_CPU_arch
	.eabi_attribute	7, 65	@ Tag_CPU_arch_profile
	.eabi_attribute	8, 1	@ Tag_ARM_ISA_use
	.eabi_attribute	9, 2	@ Tag_THUMB_ISA_use
	.eabi_attribute	34, 0	@ Tag_CPU_unaligned_access
	.eabi_attribute	17, 1	@ Tag_ABI_PCS_GOT_use
	.eabi_attribute	20, 1	@ Tag_ABI_FP_denormal
	.eabi_attribute	21, 1	@ Tag_ABI_FP_exceptions
	.eabi_attribute	23, 3	@ Tag_ABI_FP_number_model
	.eabi_attribute	24, 1	@ Tag_ABI_align_needed
	.eabi_attribute	25, 1	@ Tag_ABI_align_preserved
	.eabi_attribute	38, 1	@ Tag_ABI_FP_16bit_format
	.eabi_attribute	18, 4	@ Tag_ABI_PCS_wchar_t
	.eabi_attribute	26, 2	@ Tag_ABI_enum_size
	.eabi_attribute	14, 0	@ Tag_ABI_PCS_R9_use
	.file	"sum.c"
	.globl	sum                     @ -- Begin function sum
	.p2align	2
	.type	sum,%function
	.code	32                      @ @sum
sum:
	.fnstart
@ %bb.0:
	cmp	r0, #1
	movlt	r0, #0
	bxlt	lr
	sub	r1, r0, #2
	sub	r2, r0, #1
	umull	r1, r2, r2, r1
	and	r2, r2, #1
	lsrs	r2, r2, #1
	rrx	r1, r1
	add	r0, r1, r0, lsl #1
	sub	r0, r0, #1
	bx	lr
.Lfunc_end0:
	.size	sum, .Lfunc_end0-sum
	.cantunwind
	.fnend
                                        @ -- End function

	.ident	"clang version 7.0.1 (Fedora 7.0.1-6.fc29)"
	.section	".note.GNU-stack","",%progbits
	.addrsig