Skip to content

Compile to Teensy 3.0 on Windows using Makefile

Good Night,

If you don’t want to use Arduino IDE (Or Teensy IDE? 😉 to programming and uploading your code to Teensy 3.0 you can use Makefiles.

The last IDE version can be found on PJRC Forum . As he said in the Beta 10 version, there is an Makefile example on “arduino-1.0.3\hardware/teensy/cores/teensy3” but to use it you need to add the arm binaries to your system path. To do this, open your command prompt. Start – execute – cmd.

And then type:

PATH = %PATH%;C:\CAMINHO_PARA_O_ARDUINO\arduino-1.0.3\hardware\tools\arm-none-eabi\bin

[If you don’t want to know the modifications that I did, just jump to the end where you can find a resume]

To guarantee that I will not screw everything, I did a copy of “arduino-1.0.3\hardware/teensy/cores/teensy3” and did my modifications on it. I executed:

cs-make.exe

Receveid this error message:

C:\CAMINHO_PARA_O_ARDUINO\arduino-1.0.3\Projects\Example_not_working>cs-make.exe
C:/Users/X-warrior/Desktop/tools/arm-none-eabi/bin/arm-none-eabi-gcc -Wall -g -Os -mcpu=cortex-m4 -mthumb -nostdlib -MMD -DF_CPU=48000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I. -c -o analog.o analog.c
process_begin: CreateProcess(NULL, C:/Users/X-warrior/Desktop/tools/arm-none-eabi/bin/arm-none-eabi-gcc -Wall -g -Os -mcpu=cortex-m4 -mthumb -nostdlib -MMD -DF_CPU=48000000 -DUSB_SERIAL -DLAYOUT_US_ENGLISH -I. -c -o analog.o analog.c, …) failed.
make (e=2): The system cannot find the file specified.
cs-make.exe: *** [analog.o] Error 2

Checking the Makefile I decided to change some configs and used FULL PATH for it.
TOOLSPATH = C:\CAMINHO_PARA_O_ARDUINO\arduino-1.0.3\hardware\tools
COMPILERPATH = C:\CAMINHO_PARA_O_ARDUINO\arduino-1.0.3\hardware\tools\arm-none-eabi\bin

The error received was the same, so checking the code again I saw the “abspath” and thought that maybe the problem was this, since I changed my folder location. So I removed all “$(abspath” remember that it has a parenthesis that closes the command. So for example:

$(abspath $(COMPILERPATH)) will be $(COMPILERPATH)

Trying to get it working again with cs-make, it started compiling it, but on the end I received this error:

C:\Users\X-warrior\Desktop\arduino-1.0.3\hardware\tools\arm-none-eabi\bin/arm-none-eabi-objcopy -O ihex -R .eeprom main.elf main.hex
C:\Users\X-warrior\Desktop\arduino-1.0.3\hardware\tools/teensy_post_compile -file=main -path= -tools=C:\Users\X-warrior\Desktop\arduino-1.0.3\hardware\tools
Opening Teensy Loader…
Teensy Loader could not find the file main
cs-make.exe: *** [main.hex] Error 1

Triple checking the Makefile I found “path=$(shell pwd)” and I didn’t remember this pwm command on windows so I tried to execute it and it didn’t work. So I changed it to “path=$(shell echo %cd%)”. Before I start compiling again I decide to clean directory using cs-make clean

I received the following errors:

C:\Users\X-warrior\Desktop\arduino-1.0.3\Projects\Example_not_working>cs-make.exe clean
rm -f *.o *.d main.elf main.hex
process_begin: CreateProcess(NULL, rm -f *.o *.d main.elf main.hex, …) failed.
make (e=2): The system cannot find the file specified.
cs-make.exe: *** [clean] Error 2

And then I noticed that it was calling rm -f which isn’t a windows command too. I changed the rm command to:

del *.o
del *.d
del $(TARGET).elf
del $(TARGET).hex

With this I managed to clean the files and tried to compile again, and… IT WORKS! I did a few tests using main.cpp that was being compiled and uploaded to my Teensy 3. Anyways to work with all that files wasn’t attractive so I decided to go a little further and do some cleaning. So inside my “Project” folder I copied all files excluding Makefile and main.cpp to my new folder inside my project “teensy/”. This way I can compile it without all that files on my working folder. I needed to do a few more changes on Makefile as follow:

C_FILES := $(wildcard *.c) \
$(wildcard $(addprefix teensy/, *.c)) \
$(wildcard $(addprefix teensy/util, *.c)) \
$(wildcard $(addprefix teensy/avr, *.c))
CPP_FILES := $(wildcard *.cpp) \
$(wildcard $(addprefix teensy/, *.cpp)) \
$(wildcard $(addprefix teensy/util, *.cpp)) \
$(wildcard $(addprefix teensy/avr, *.cpp))
OBJS := $(C_FILES:.c=.o) $(CPP_FILES:.cpp=.o)

Linker configuration to:

LDFLAGS = -Os -Wl,–gc-sections -mcpu=cortex-m4 -mthumb -Tteensy/mk20dx128.ld

And to keep it consistent:

$(TARGET).elf: $(OBJS) teensy/mk20dx128.ld
$(CC) $(LDFLAGS) -o $@ $(OBJS)

And then I found this error:

teensy/keylayouts.c:1: fatal error: avr/pgmspace.h: No such file or directory
compilation terminated.
cs-make: *** [teensy/keylayouts.o] Error 1

So I updated the CPPFLAGS to:

CPPFLAGS = -Wall -g -Os -mcpu=cortex-m4 -mthumb -nostdlib -MMD $(OPTIONS) -I. -Iteensy/

And also remembered that the clean should be updated too.

clean:
del *.o
del *.d
del $(TARGET).elf
del $(TARGET).hex
del $(CURRENT_PATH)\teensy\*.o
del $(CURRENT_PATH)\teensy\*.d

And add this on the begin of “Configurations that shouldn’t be updated”

CURRENT_PATH=$(shell echo %cd%)

With all this I managed to get the Makefile working on Windows compiling and uploading for Teensy 3.0

Summary:
You must update TOOLSPATH , COMPILERPATH and use your FULL PATH
Then create a folder “My_Project”
Create another folder inside your project called “teensy” (My_Project/teensy/)
Copy “arduino-1.0.3\hardware/teensy/cores/teensy3/” to “My_Project/teensy/” (subdir too, but not the Makefile)
Add the Makefile that you can download on the end of this post inside “My_Project”
Copy “Meu_Projeto/teensy/main.cpp” too “Meu_Projeto/main.cpp”
Programm inside main.cpp
Compile and upload with cs-make.exe

Makefile to Teensy on Windows

Matheus

Published inCcppTeensywindows

4,756 Comments

  1. This is very attention-grabbing, You’re an overly
    professional blogger. I have joined your feed and look forward to
    in search of extra of your great post. Additionally,
    I’ve shared your site in my social networks

  2. Городской ритм Петрозаводска с озёрным ветром, короткими сумерками и сезонной влажностью повышает сенсорную нагрузку в вечерние часы, поэтому наш маршрут спроектирован «мягко». Координатор заранее уточняет подъезд, парковку, код домофона, рекомендует «тихий режим» связи и присылает нейтральное уведомление о визите. Бригада приходит в гражданской одежде, сумки — без логотипов, разговоры — короткими фразами. Такое поведение снижает у пациента и семьи реактивность, выравнивает вариабельность ЧСС к сумеркам и уменьшает потребность «усиливать» схему на ночь. Если на предзвонке выявлены «красные флаги» — неукротимая рвота, выраженная дезориентация, «скачущий» ритм, одышка — мы предлагаем стационар сразу, чтобы не терять время на повторные маршруты.
    Выяснить больше – нарколог на дом

  3. DonaldTheak DonaldTheak

    В этой медицинской статье мы погрузимся в актуальные вопросы здравоохранения и лечения заболеваний. Читатели узнают о современных подходах, методах диагностики и новых открытий в научных исследованиях. Наша цель — донести важную информацию и повысить уровень осведомленности о здоровье.
    Перейти к полной версии – нарколог на дом спб круглосуточно

  4. Queremos organizar una noche tranquila para celebrar una fecha especial. Granada nos parece una zona practica porque podemos llegar sin demasiada carretera. Las fotos son bonitas, pero queremos entender los detalles cotidianos antes de elegir. Antes de escribir a varios sitios lei una guia de hotel burbuja granada y entendi que detalles merece la pena confirmar antes de reservar. Queremos saber si explican bien el aislamiento y la temperatura nocturna. Miraremos como es la llegada si anochece antes de registrarnos. Nos fijaremos en la separacion entre las unidades y las zonas comunes. Queremos comentarios recientes que expliquen la comodidad de forma concreta. El jacuzzi puede ser agradable, pero no sera nuestro unico criterio. Despues compararemos solo dos o tres lugares usando las mismas preguntas. Si alguien conoce la zona, me ayudaria saber que detalle practico le resulto importante. Queremos que sea una pequena celebracion serena, con tiempo para mirar el cielo y desconectar.

  5. Городская среда Петрозаводска со сменой ветров с Онежского озера, короткими сумерками и сезонными перепадами влажности может усиливать тревожность в вечерние часы. Мы учитываем это с момента первого контакта: согласованная парковка, отдельный вход без вывесок, короткая регистрация без «толстых анкет», приглушённый тёплый свет в зоне ожидания и отсутствие громких объявлений. Родственникам предоставляются «тихие окна» связи — лаконичные апдейты в фиксированное время, чтобы не перегружать пациента и не дёргать команду в критические окна наблюдения. Такой «мягкий» контур снижает сенсорную нагрузку, стабилизирует вариабельность ЧСС к сумеркам и сокращает число импульсивных просьб «усилить на ночь».
    Получить дополнительную информацию – https://narkologicheskaya-klinika-petrozavodsk15.ru/

  6. Lesterguext Lesterguext

    Мы придерживаемся инженерной логики: цель > маркер > окно проверки > отключение модуля. Никаких «сильных коктейлей на всякий случай»: сначала один точный шаг, затем — проверка результата. Именно так формируется прозрачность и доверие: пациент видит причину каждого назначения и понимает момент его завершения. Это уменьшает тревогу, ускоряет восстановление и убирает «инерцию лечения», когда лишние вмешательства продолжаются просто по привычке.
    Получить дополнительную информацию – [url=https://narkolog-na-dom-v-samare16.ru/]нарколог на дом в самаре[/url]

Leave a Reply

Your email address will not be published. Required fields are marked *