Compare commits
12 Commits
Author | SHA1 | Date |
---|---|---|
jakeg00dwin | 88c08d4c98 | |
jakeg00dwin | 13495717a0 | |
jakeg00dwin | 577ccb79e2 | |
jakeg00dwin | 2ab9d8e18e | |
jakeg00dwin | 3e550f4ac5 | |
jakeg00dwin | 144fc068ae | |
jakeg00dwin | 74384000d8 | |
jakeg00dwin | abaaaaaa0d | |
jakeg00dwin | 943274d3da | |
jakeg00dwin | bda7fe7e03 | |
jakeg00dwin | d4c3a251a2 | |
jakeg00dwin | d0809894ca |
|
@ -10,3 +10,5 @@ build/cmake_install.cmake
|
|||
build/compile_commands.json
|
||||
.cache/clangd/index
|
||||
build/.cache/clangd/index
|
||||
build/mocks
|
||||
build/main.hex
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
cmake_minimum_required(VERSION 3.20)
|
||||
|
||||
# Use the fancy version substitution
|
||||
project(cmake-cpputest-template
|
||||
project(main
|
||||
VERSION 1.0
|
||||
DESCRIPTION "template for cmake + cpputest"
|
||||
LANGUAGES C CXX
|
||||
|
@ -22,17 +22,16 @@ endif()
|
|||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Request C 17 standard features
|
||||
set(CMAKE_C_STANDARD 17)
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
set(CMAKE_C_STANDARD_REQUIRED True)
|
||||
set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")
|
||||
# set(CMAKE_C_FLAGS "-Wall -Werror -Wpedantic")
|
||||
|
||||
# SETUP THE CXX flags for .cpp
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic")
|
||||
|
||||
|
||||
|
||||
# #######################################
|
||||
# TESTING STUFF
|
||||
# #######################################
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
# ###############################
|
||||
# AVR-GCC toolchain file
|
||||
# ###############################
|
||||
|
||||
# Specify the cross-compiler
|
||||
set(CMAKE_SYSTEM_NAME Generic)
|
||||
set(CMAKE_SYSTEM_VERSION 1)
|
||||
set(CMAKE_SYSTEM_PROCESSOR avr)
|
||||
|
||||
# Specify the compiler and linker
|
||||
set(AVR_MCU atmega328p) # The old Classic
|
||||
#set(AVR_MCU attiny85) # The older ATtiny series, avr25
|
||||
#set(AVR_MCU attiny404) # this is the avrxmega3 series
|
||||
#set(AVR_MCU avr64dd28) # Newer DX series, avrxmega2
|
||||
|
||||
# The default frequency of an 328p devboard using the external crystal.
|
||||
set(F_CPU 16000000UL)
|
||||
#set(F_CPU 8000000)
|
||||
add_compile_definitions(F_CPU=${F_CPU})
|
||||
# add_compile_definitions(MCU=atmega328p)
|
||||
add_compile_definitions(__AVR_ATmega328P__)
|
||||
|
||||
# Set up the programmer for it
|
||||
#set(PROGRAMMER usbasp-clone)
|
||||
set(PROGRAMMER arduino)
|
||||
|
||||
# Set the Port for the programmer
|
||||
set(PORT /dev/ttyUSB0)
|
||||
|
||||
|
||||
# Define the toolchain executables
|
||||
set(CMAKE_C_COMPILER avr-gcc)
|
||||
set(CMAKE_CXX_COMPILER avr-g++)
|
||||
set(CMAKE_ASM_COMPILER avr-gcc)
|
||||
set(CMAKE_LINKER avr-ld)
|
||||
set(CMAKE_OBJCOPY avr-objcopy)
|
||||
set(CMAKE_SIZE avr-size)
|
||||
|
||||
|
||||
# Define compile options
|
||||
set(CMAKE_C_FLAGS " -Os -mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
|
||||
set(CMAKE_CXX_FLAGS "-mmcu=${AVR_MCU} -DF_CPU=${F_CPU}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_INIT "-mmcu=${AVR_MCU}")
|
||||
|
||||
|
||||
# Define the archiver and other tools
|
||||
set(CMAKE_AR avr-ar)
|
||||
set(CMAKE_RANLIB avr-ranlib)
|
||||
|
42
otto.sh
42
otto.sh
|
@ -3,7 +3,7 @@
|
|||
# Date: 2024
|
||||
# Filename: otto.sh
|
||||
|
||||
CROSS_TC_WIN="$(pwd)/i686-w64-mingw32_toolchain.cmake"
|
||||
AVR_TC="$(pwd)/avr-gcc-toolchain.cmake"
|
||||
CMAKE_VERBOSE="ON"
|
||||
CROSS_COMPILE=1
|
||||
TEMPLATE_FILES=".template_files"
|
||||
|
@ -166,11 +166,37 @@ build_release() {
|
|||
|
||||
build_main () {
|
||||
clear_cmake_cache
|
||||
|
||||
cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
||||
make main
|
||||
}
|
||||
|
||||
build_hex () {
|
||||
clear_cmake_cache
|
||||
|
||||
CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
|
||||
|
||||
cmake ${CMAKE_ARGS} ../
|
||||
make all
|
||||
make hex
|
||||
}
|
||||
|
||||
build_hex_optimized () {
|
||||
clear_cmake_cache
|
||||
|
||||
CMAKE_ARGS="-DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE}"
|
||||
CMAKE_ARGS="${CMAKE_ARGS} -DCMAKE_TOOLCHAIN_FILE=${AVR_TC}"
|
||||
|
||||
cmake ${CMAKE_ARGS} ../
|
||||
make all
|
||||
make hex-release
|
||||
}
|
||||
|
||||
flash_avr () {
|
||||
build_hex_optimized
|
||||
make upload
|
||||
}
|
||||
|
||||
run_c_tests () {
|
||||
clear_cmake_cache
|
||||
cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
|
||||
|
@ -180,9 +206,9 @@ run_c_tests () {
|
|||
print_menu () {
|
||||
echo "BUILD MENU:"
|
||||
echo "1. Run Tests"
|
||||
echo "2. Build Project"
|
||||
echo "3. Build for release"
|
||||
echo "4. cross compile for XXXXXX"
|
||||
echo "2. Build Project(hex)"
|
||||
echo "3. Build for release(hex)"
|
||||
echo "4. Flash to AVR"
|
||||
echo "5. Add new module to project"
|
||||
echo "6. Delete module from project"
|
||||
echo "7. Exit"
|
||||
|
@ -206,17 +232,17 @@ main() {
|
|||
2)
|
||||
echo "You selected Option 2"
|
||||
valid_choice=true
|
||||
build_main
|
||||
build_hex
|
||||
;;
|
||||
3)
|
||||
echo "You selected Option 3"
|
||||
valid_choice=true
|
||||
build_release
|
||||
build_hex_optimized
|
||||
;;
|
||||
4)
|
||||
echo "You selected Option 4"
|
||||
valid_choice=true
|
||||
cross_compile
|
||||
flash_avr
|
||||
;;
|
||||
5)
|
||||
echo "You selected Option 5"
|
||||
|
|
|
@ -1,3 +1,40 @@
|
|||
add_executable(main
|
||||
add_executable(${PROJECT_NAME}
|
||||
main.c
|
||||
)
|
||||
|
||||
# Ensure the build rules are defined
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".elf")
|
||||
|
||||
if(NOT TARGET size)
|
||||
# Set the size utility to display the size of the final binary
|
||||
add_custom_target(size ALL
|
||||
COMMAND ${CMAKE_SIZE} --format=avr --mcu=${AVR_MCU} ${CMAKE_PROJECT_NAME}.elf
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT TARGET hex)
|
||||
# Define how to convert ELF to HEX
|
||||
add_custom_target(hex ALL
|
||||
COMMAND ${CMAKE_OBJCOPY} -O ihex -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.hex
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT TARGET bin)
|
||||
# Define how to convert ELF to BIN
|
||||
add_custom_target(bin ALL
|
||||
COMMAND ${CMAKE_OBJCOPY} -O binary -R .eeprom ${CMAKE_PROJECT_NAME}.elf ${CMAKE_PROJECT_NAME}.bin
|
||||
DEPENDS ${CMAKE_PROJECT_NAME}.elf
|
||||
)
|
||||
endif()
|
||||
|
||||
|
||||
if(NOT TARGET upload)
|
||||
# Upload command (adjust according to your programmer)
|
||||
add_custom_target(upload ALL
|
||||
COMMAND avrdude -c ${PROGRAMMER} -P ${PORT} -p ${AVR_MCU} -U flash:w:${CMAKE_PROJECT_NAME}.hex
|
||||
DEPENDS hex
|
||||
)
|
||||
endif()
|
||||
|
|
55
src/main.c
55
src/main.c
|
@ -1,8 +1,59 @@
|
|||
#include "stdio.h"
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <util/delay.h>
|
||||
|
||||
|
||||
//#############################
|
||||
//Globals
|
||||
//#############################
|
||||
|
||||
#define LED_PORT (1<<5)
|
||||
#define LED_PIN PB5
|
||||
#define BLINK_DELAY_MS 5000
|
||||
|
||||
//#############################
|
||||
//Prototypes
|
||||
//#############################
|
||||
|
||||
void led_blink(void);
|
||||
|
||||
|
||||
|
||||
//#############################
|
||||
//MAIN
|
||||
//#############################
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
printf("Hello!\n");
|
||||
{
|
||||
led_blink();
|
||||
|
||||
while(1) {
|
||||
led_blink();
|
||||
_delay_ms(500);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//#############################
|
||||
//FUNCTIONS
|
||||
//#############################
|
||||
|
||||
/*
|
||||
* Input: None
|
||||
* Output: None
|
||||
* Description: Toggles the pin for the LED indicator.
|
||||
*/
|
||||
void led_blink(void) {
|
||||
//Set the DDR for output.
|
||||
DDRB |= LED_PORT;
|
||||
|
||||
PORTB ^= (1<<LED_PIN);
|
||||
_delay_ms(500);
|
||||
PORTB ^= (1<<LED_PIN);
|
||||
_delay_ms(500);
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue