arm-none-eabi-gccとボードのライブラリを準備する。
必要なもの
- Teensy 3.6本体。
- ARMコンパイラ。
- GNU Tools for ARM Embedded Processorsからgccをダウンロードし展開。
- https://developer.arm.com/open-source/gnu-toolchain
- GNU Tools for ARM Embedded Processorsからgccをダウンロードし展開。
- Teensyの場合はlibarm_cortexM4l_math.aをダウンロードし、arm-none-eabi/libにコピー。
- それぞれのボードのライブラリ。Teensyの場合はここ。
- makeで開発できるテンプレートを使用すると楽。ここからダウンロード。
- tools以下にダウンロードしたgccを置く。
- src以下にmain.cppを書く。サンプルは以下の通り。
- makeで開発できるテンプレートを使用すると楽。ここからダウンロード。
// ©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