Compare commits

...

12 Commits
main ... avr

6 changed files with 180 additions and 16 deletions

2
.gitignore vendored
View File

@ -10,3 +10,5 @@ build/cmake_install.cmake
build/compile_commands.json build/compile_commands.json
.cache/clangd/index .cache/clangd/index
build/.cache/clangd/index build/.cache/clangd/index
build/mocks
build/main.hex

View File

@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
# Use the fancy version substitution # Use the fancy version substitution
project(cmake-cpputest-template project(main
VERSION 1.0 VERSION 1.0
DESCRIPTION "template for cmake + cpputest" DESCRIPTION "template for cmake + cpputest"
LANGUAGES C CXX LANGUAGES C CXX
@ -22,17 +22,16 @@ endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# Request C 17 standard features # Request C 17 standard features
set(CMAKE_C_STANDARD 17) set(CMAKE_C_STANDARD 11)
set(CMAKE_C_STANDARD_REQUIRED True) 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 # 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_STANDARD_REQUIRED True)
set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic") set(CMAKE_CXX_FLAGS "-Wall -Werror -Wpedantic")
# ####################################### # #######################################
# TESTING STUFF # TESTING STUFF
# ####################################### # #######################################

49
avr-gcc-toolchain.cmake Normal file
View File

@ -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
View File

@ -3,7 +3,7 @@
# Date: 2024 # Date: 2024
# Filename: otto.sh # Filename: otto.sh
CROSS_TC_WIN="$(pwd)/i686-w64-mingw32_toolchain.cmake" AVR_TC="$(pwd)/avr-gcc-toolchain.cmake"
CMAKE_VERBOSE="ON" CMAKE_VERBOSE="ON"
CROSS_COMPILE=1 CROSS_COMPILE=1
TEMPLATE_FILES=".template_files" TEMPLATE_FILES=".template_files"
@ -166,11 +166,37 @@ build_release() {
build_main () { build_main () {
clear_cmake_cache clear_cmake_cache
cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ cmake -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
make main 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 () { run_c_tests () {
clear_cmake_cache clear_cmake_cache
cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../ cmake -DUNIT_TESTING=ON -DCMAKE_VERBOSE_MAKEFILE=${CMAKE_VERBOSE} ../
@ -180,9 +206,9 @@ run_c_tests () {
print_menu () { print_menu () {
echo "BUILD MENU:" echo "BUILD MENU:"
echo "1. Run Tests" echo "1. Run Tests"
echo "2. Build Project" echo "2. Build Project(hex)"
echo "3. Build for release" echo "3. Build for release(hex)"
echo "4. cross compile for XXXXXX" echo "4. Flash to AVR"
echo "5. Add new module to project" echo "5. Add new module to project"
echo "6. Delete module from project" echo "6. Delete module from project"
echo "7. Exit" echo "7. Exit"
@ -206,17 +232,17 @@ main() {
2) 2)
echo "You selected Option 2" echo "You selected Option 2"
valid_choice=true valid_choice=true
build_main build_hex
;; ;;
3) 3)
echo "You selected Option 3" echo "You selected Option 3"
valid_choice=true valid_choice=true
build_release build_hex_optimized
;; ;;
4) 4)
echo "You selected Option 4" echo "You selected Option 4"
valid_choice=true valid_choice=true
cross_compile flash_avr
;; ;;
5) 5)
echo "You selected Option 5" echo "You selected Option 5"

View File

@ -1,3 +1,40 @@
add_executable(main add_executable(${PROJECT_NAME}
main.c 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()

View File

@ -1,8 +1,59 @@
#include "stdio.h" #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) int main(int argc, char **argv)
{ {
printf("Hello!\n"); led_blink();
while(1) {
led_blink();
_delay_ms(500);
}
return 0; 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);
}