사용자 환경에서 PlaatformIO 사용
16925 단어 embeddedPlatformIO끼워 넣다tech
PlaatformIO
PlaatformIO는 VScode와 Clion 등의 확장 기능과 독립된 CLI로 활용할 수 있는 교차 개발 환경군으로IDE와 상관없이 다양한 삽입식 프레임워크의 다운로드, 설정, 이용이 간단합니다. Arduiino와mbed 등 주요 환경 (기판의 정의와 프레임워크 교차 컴파일러) 은 기본적으로 지원됩니다.
이런 PlaatformIO 중에서도 (시스템을 구축한 이상) PlaatformIO가 상상할 수 없는 환경을 사용할 수 있다.
예시적 환경
이 문장에 포함되지 않은 내용
맞춤형 환경을 만들자.
이제 만드는 거.
extra_scripts
로 읽은 것입니다 platformio.ini
: PlaatformIO의 프로젝트 설정에서 구축 스크립트 지정기판 정의의 제작
공식 문서: Custom Embedded Boards에 따라 제작되었습니다.
PlateformIO의 프로젝트 디렉토리 아래에서 작성
boards/(基板名).json
합니다.여기에 정의해야 할 값은 CPU 구조와 프레임워크에 따라 정해진 것이고 문서화되지 않은 경우도 있기 때문에 공식 GiitHub 중의 창고를 확인하는 것이 좋다.
이번 경우platform-titiva. 창고 자체에 정의된 JSON이 몇 개 있으므로 참고하거나 구축 스크립트
builder/
이하를 확인하십시오.{
"build": {
"core": "tivac",
"cpu": "cortex-m4",
"f_cpu": "80000000L",
"mcu": "lptm4c1230c3pm",
"variant": "EK-TM4C123GXL"
},
"debug": {
"svd_path": "TM4C1230C3PM.svd",
"tools": {
"ti-icdi": {
"onboard": true,
"server": {
"arguments": [
"-s",
"$PACKAGE_DIR/scripts",
"-f",
"board/ti_ek-tm4c123gxl.cfg"
],
"executable": "bin/openocd",
"package": "tool-openocd"
}
}
}
},
"frameworks": [],
"name": "EK-TM4C123GXL",
"upload": {
"maximum_ram_size": 32768,
"maximum_size": 262144
},
"url": "http://www.ti.com/ww/en/launchpad/launchpads-connected-ek-tm4c123gxl.html",
"vendor": "TI"
}
build
아래에 판의 CPU 종류와 주파수를 정의했습니다. 프레임을 사용하지 않을 때 구축 스크립트에서 f_cpu
,cpu
만 참조합니다.debug
다음은 디버깅에 대한 설정입니다. svd_path
는 CPU 내의 메모리 구조 등이 저장된 파일입니다. 파일 자체는 아까 창고에 저장됩니다. tools
는 디버깅 도구를 지정했습니다. 이번에는 일반적인 OpenOCD를 사용하는 설정입니다. 여기 설정은,방금 창고 구축 스크립트에서 몇 개를 사용한 것 외에 PlaatformIO 내부에서도 사용되고 있습니다.frameworks
사용 가능한 프레임을 일람표string[]
로 정의했는데 이번에는 독자적인 HAL만 사용하기 때문에 지정하지 않습니다.upload
RAM 및 ROM의 최대 값을 정의합니다.스크립트 작성
PlaatformIO에서는 Python을 기반으로 한 구축 시스템 SCons 을 사용합니다. 지정한 구축 시스템의 구축 스크립트 형식으로 개입할 수 있기 때문에 HAL을 읽었습니다.
이번에는 이런 각본을 사용했다.
from os.path import isdir, join
Import("env")
TIVAWARE_DIR = join(env['PROJECT_DIR'], "../../../../ti/TivaWare_C_Series-1.0") # HAL directory
assert isdir(TIVAWARE_DIR)
env.Append(
CPPDEFINES=[
("PART_TM4C123GH6PM", ""), # define for HAL
("PART_TM4C123GE6PM", ""),
("TARGET_IS_BLIZZARD_RB1", ""),
("gcc", ""),
],
CCFLAGS=[
"-mfloat-abi=hard",
"-mfpu=fpv4-sp-d16",
"-mabi=aapcs",
"--param", "max-inline-insns-single=500",
"-nostdlib"
],
LINKFLAGS=[
"-Wl,--entry=ResetISR",
"-Wl,--check-sections",
"-Wl,--gc-sections",
"-Wl,--unresolved-symbols=report-all",
"-Wl,--warn-common",
"-Wl,--warn-section-align",
"-Wl,-Tscripts/linker.ld", # linker script
"-mfloat-abi=hard",
"-mfpu=fpv4-sp-d16",
"-fsingle-precision-constant"
],
LIBS=["libc", "driverlib"],
CPPPATH=[
TIVAWARE_DIR,
join(TIVAWARE_DIR, "inc"),
join(TIVAWARE_DIR, "driverlib"),
join(TIVAWARE_DIR, "utils"),
],
LIBSOURCE_DIRS=[
join(TIVAWARE_DIR, "driverlib")
]
)
libs = []
libs.append(
env.BuildLibrary(
join("$BUILD_DIR", "driverlib"), # library destination
join(TIVAWARE_DIR, "driverlib"))) # library source
env.Prepend(LIBS=libs)
Import("env")
는 파이톤의 import문이 아니라 PlateformIO 고유의 것이다.env
: C++의 define 일람env.Append
: C++ 컴파일러의 매개 변수CPPDEFINES
: 린카의 매개 변수. CCFLAGS
에서 린카 스크립트가 지정되었다(후술). LINKFLAGS
: 컴파일러에 전달된 라이브러리의 일람-Wl,-Tscripts/linker.ld
파라미터 사용LIBS
: 디렉토리 포함-l
: 라이브러리 소스이곳의 변수는 Scons의Construction Variables 등에 표시됩니다.
CPPPATH
는 HAL을 프로그램 라이브러리로 구축하는 지정입니다.이 함수는 PlaatformiO 혼자서 이루어진 것이다. platformio.py 등을 보면 Scons에 해당하는
LIBSOURCE_DIRS
을 알 수 있다.platformio.ini
이 파일에는 대상의 기판, 구축 스크립트, 환경 이름이 ini 형식으로 기록되어 있습니다. 환경 이름은 platform-titiva 사용하기 때문에
env.BuildLibrary
로 지정됩니다.구축 스크립트도 여기서 지정합니다.
이번에는 이렇게 됐어.
[env:tm4c123gxlevk]
platform = titiva
board = tm4c123gxl
extra_scripts = pre:scripts/build.py
monitor_speed = 9600
영역 이름StaticLibrary
은 여러 사용 환경을 정의하는 데 사용됩니다.titiva
는 env:lptm4c1230c3pm
이하에서 제작된 JSON 파일이며, board
에서 구축 전(pre)에서 구축 스크립트를 읽는다.boards/
는 직렬 모니터의baudrate 지정입니다.부팅 코드
이번에는HAL에 첨부된 example에서 빌려온 것으로 C 언어, 어셈블리 문서, 인터럽트 벡터표, 메인 프로그램 전의 초기화 코드를 포함한다
린카 스크립트
HAL이 첨부한 example에서 빌려온 것입니다. 어느 주소에서 코드를 설정했는지 표시하는 파일입니다.
후기
이외에도 mbed를 프레임워크로 사용하는 경우와 PlaatformIO의 라이브러리 시스템을 활용했다.
Reference
이 문제에 관하여(사용자 환경에서 PlaatformIO 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/for/articles/6809e392052c75텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)