day27

jae up·2024년 11월 22일

ubuntu os환경 세팅

1.ubuntu os설치
[1]준비물
1.usb
2.sd카드
3.ubuntu설치 파일(ubuntu 사이트에서 다운)
[2]ubuntu사이트 접속
-https://ubuntu.com/download/desktop
-ubuntu 24.04.1 다운로드 (5.8gb)
[3]usb에 저장공간 만들기
-usb파티션 나누는 프로그램 설치 후에 파티션 분리 하기
-usb 분리 작업이 끝났으면 usb를 본체 앞면에 장착시킨다
-컴퓨터를 재부팅하면서 브랜드 아이콘이 뜨기전 부터 [delete]키 연타 부트로딩화면으로 이동
-부트화면에서 우분투 설치파일 선택하여 설치
-우분투 세팅 및 로그인과 비밀번호 설정 (우분투 접속후 파일 설치 및 삭제시 자료를 비밀번호를 요구하기 때문에 신경써야한다
-우분투gni에서는 인터넷에서 다운을 받을 수 있고, 아니면 터미널에서 커맨드를 통해 다운을 받거나,아니면 '앱센터'에서 다운을 받는다(주로 앱센터에서 다운을 받는다)
-언어설정
(1)톱니바퀴 앱(setting)->지역 및 언어(reigional and language)->
언어변경->키보드도 같이 변경

2.우분투환경-vscode-라즈베리파이 구동
1.관련 설치 프로그램 설치(avr8,cmake,make,avrdude
2.저장 경로를 확인하기 쉽게 폴더 생성 (atmegaprtice2)
3.관련 설치 프로그램들을 위치시킬 파일 생성(임의로 tool이라는 파일 생성)
4.코드가 작업될 폴더 작성 (ex:atmega128ab)생성
5.vscode 접속
+++왼쪽 토글창에서 extesion아이콘 클릭
+++{c/c++,c/c++ extesion,c/c++thems,cmake,cmake tols,task explorer,vscode- icons} 검색 후 설치
6.[file]-[save workspace as...]-저장경로확인폴더에 -[save]실행-파일에 들어가보면 workspace파일 생성됨(코드 작성을 위한 종이를 세팅했다고 생각하기(몰루?))
7.[file]-[add folder to workspace]-코드 작업될 폴더에 save(atmega128ab)
8.왼쪽 작업창에 atmega128ab라는 이름으로 폴더 생성된거 확인
9.작업 연동을 위한 tool 및 코드 프로그램 연동을 해야함
10.atmega128ab폴더 클릭하고 오른쪽 마우스클릭 후 [뉴폴더]클릭하고 이름에 'tools'이름 작 성
11.tools 그림이 나타난거 확인하면 tools 클릭하고 오른족 마우스 [파일 생성] 후
[avr-gcc.cmake]이름 설정
12.atmega 클릭하고 오른쪽 마우스 클릭 후 [뉴폴더]클릭하여 [.vscode]입력
13.vscode 선택 후 [cmake-kits.json]
14.tool과 코드 세팅이 된거 확인
15.[extesion]-[cmake tools]-[톱니바퀴]모양 클릭-settings-중앙 상단 부분 workspace선택
16.cmake path확인: - cmake 파일 입력-(ex:/usr/bin/cmake)(터미널(which cmake)또는 다운로드 파일 확인 하여 주소 복사 붙여넣기 하면 된다)
17.configure arg확인:
(1)-DAVR_TOOLCHAIN _DIR=/home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64
(2)-DCMAKE_MAKE_PROGRAM=/usr/bin/make
(1)avr8파일위치를 확인
(2)make파일 위치를 확인

18.cmake:generator:Unix Makefiles
19.[cmake-kits.json]파일에
[
{
"name": "AVR-GCC Embedded",
"toolchainFile": "${workspaceFolder}/tools/avr-gcc.cmake"
}
]
코드 입력

20.[avr-gcc.cmake]파일에

set(CMAKE_SYSTEM_NAME Generic)
set(CMAKE_SYSTEM_PROCESSOR AVR)

#이거넣어주어야 빌드가 됨 (2024.10.11 수정)
set(MCU atmega128a)
set(CMAKE_C_FLAGS "-mmcu=MCU")set(CMAKECXXFLAGS"mmcu={MCU}") set(CMAKE_CXX_FLAGS "-mmcu={MCU}")

set(BINUTILS_PATH ${AVR_TOOLCHAIN_DIR})

set(TOOLCHAIN_PREFIX ${AVR_TOOLCHAIN_DIR}/bin/avr-)

set(CMAKE_C_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc)
set(CMAKE_CXX_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-g++)
set(CMAKE_ASM_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc)

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

set(CMAKE_C_COMPILER "{TOOLCHAIN_PREFIX}gcc" CACHE FILEPATH "C Compiler path") set(CMAKE_ASM_COMPILER ${CMAKE_C_COMPILER}) set(CMAKE_CXX_COMPILER "{TOOLCHAIN_PREFIX}g++" CACHE FILEPATH "C++ Compiler path")

set(CMAKE_OBJCOPY /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-objcopy CACHE INTERNAL "objcopy tool")
set(CMAKE_SIZE_UTIL ${TOOLCHAIN_PREFIX}size CACHE INTERNAL "size tool")

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 11)

#Disable compiler checks.
set(CMAKE_C_COMPILER_FORCED TRUE)
set(CMAKE_CXX_COMPILER_FORCED TRUE)

set(CMAKE_FIND_ROOT_PATH ${BINUTILS_PATH})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
입력

21.[F1]-[cmake:quick make]-이름정하기 - 뒤에 방법은앞에 작성한게 있으니 참조
22.생선된 cmakelist, mainc에 코드 대입
23cmakelist
cmake_minimum_required(VERSION 3.20.0)

project(atmega128a
LANGUAGES ASM C CXX
)

set(EXECUTABLE ${PROJECT_NAME}.elf)

#set(CMAKE_C_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc)
#set(CMAKE_CXX_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-g++)
#set(CMAKE_ASM_COMPILER /home/jo589396/atmega_pratice/avr_tools/avr8-gnu-toolchain-linux_x86_64/bin/avr-gcc)

#해당 폴더의 파일만 찾는다.
file(GLOB SRC_FILES CONFIGURE_DEPENDS
*.c
.cpp
)

#해당 폴더를 포함해서 하위 폴더까지의 파일도 찾는다.
file(GLOB_RECURSE SRC_FILES_RECURSE CONFIGURE_DEPENDS
src/.c
src/*.cpp
)

#Build the executable based on the source files
add_executable(${EXECUTABLE}
${SRC_FILES}
${SRC_FILES_RECURSE}
)

target_compile_definitions(${EXECUTABLE} PRIVATE
-DF_CPU=16000000UL
)

#List of includ directories
target_include_directories(${EXECUTABLE} PRIVATE
src
src/ap
src/bsp
src/hw
src/common
src/common/hw/include
)

#Compiler options
target_compile_options(${EXECUTABLE} PRIVATE
-mmcu=atmega128a

-fdata-sections
-ffunction-sections
-MMD
-flto
-fno-fat-lto-objects

-Wall
-Os
-g3
)

#Linker options
target_link_options(${EXECUTABLE} PRIVATE
-mmcu=atmega128a

-flto
-fuse-linker-plugin

-lm
-Wl,-Map=${PROJECT_NAME}.map,--cref
-Wl,--gc-sections
-Xlinker -print-memory-usage -Xlinker
)

add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} ARGS -O ihex -R .eeprom ${EXECUTABLE} ${PROJECT_NAME}.hex
COMMENT "Invoking: Make Hex"
)

add_custom_command(TARGET ${EXECUTABLE}
POST_BUILD
COMMAND ${CMAKE_OBJCOPY} ARGS -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 ${EXECUTABLE} ${PROJECT_NAME}.eep
COMMENT "Invoking: Make EEPROM"
)
대입
24.main.c
#include <stdio.h>
#include <avr/io.h>
#include <util/delay.h>

int main()
{
DDRA=0xff;

while (1)
{
   PORTA=0xff;
   _delay_ms(100);
   PORTA=0x00;
   _delay_ms(100); 
}

}

15.작성된 코드를 라즈베리 파이로 보내 작동시켜보기
16.[terminal]-[configure task]-[configure default...]-[reset]-[build]-설정 완료하고-run task- 하드웨어 기기 반응 확인

   
profile
gullove

0개의 댓글