개발환경: TrueSTUDIO 9.3.0

결론: 프로젝트 속성 - Tool Settings에 있는 Assembler, C Compiler, C Linker에 Target FPU 속성을 FPv4-SP-D16으로 설정

 

안녕하세요.

 

CubeMX를 통해 TrueSTUDIO 프로젝트를 만들고 컴파일을 했는데

 

아래와 같은 메세지가 나타나면서 실패되는 현상이 있었습니다.

 

저는 아무것도 안했는데 말이죠...

error: Core\Src\adc.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\adc.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\gpio.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\gpio.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\main.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\main.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\stm32f4xx_hal_msp.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\stm32f4xx_hal_msp.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\stm32f4xx_it.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\stm32f4xx_it.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\syscalls.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\syscalls.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\system_stm32f4xx.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\system_stm32f4xx.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\tim.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\tim.o
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: error: Core\Src\usart.o uses VFP register arguments, Test.elf does not
d:/program files (x86)/atollic/truestudio for stm32 9.3.0/armtools/bin/../lib/gcc/arm-atollic-eabi/6.3.1/../../../../arm-atollic-eabi/bin/ld.exe: failed to merge target specific data of file Core\Src\usart.o

 

 

그래서 구글링 해 본 결과

 

프로젝트 Tool 설정에서 Miscellaneous에  -mfloat-abi=softfp 옵션을 주라고 해결책이 있었습니다.

 

그래서 아래와 같이 -mfloat-abi=softfp 옵션을 줘서 컴파일을 했더니 에러가 싹 사라졌습니다.

 

 

하지만 디버그 버튼을 통해 프로그램 다운을 했는데 동작이 되지 않았습니다.

 

그래서 설정했던 옵션을 지우고, 다른 프로젝트와 설정 비교를 해보니 Target에 FPU가 None으로 되어있었습니다.

 

아래 빨간 박스에 있는 

Assembler, C Compiler, C Linker에 Target FPU 속성을 FPv4-SP-D16으로 설정해주었더니 컴파일도 정상적으로 되었고 디버그 버튼으로 다운로딩도 잘 되고 프로그램도 정상 동작하는 것을 확인 하였습니다.

 

 

 

 

출처: gcc - ARM compilation error, VFP registers used by executable, not object file - Stack Overflow

반응형

TrueStudio로 프로젝트를 진행하다가

디버그 버튼을 눌러 다운로딩 할 때 프로젝트에 에러가 있으면 아래와 같은 메세지 창이 뜹니다.

 

저 메시지가 너무 귀찮았던 나머지 "항상 확인 없이 실행" 에 체크 후 진행 버튼을 눌렀었죠..

 

그 다음부터는 에러가 발생해도 저 메시지를 보여주지 않고 펌웨어 다운로드를 하더라고요

 

아 이건 아니지 싶어 다시 원상복구를 시키려고 찾아보니 

창-> 환경설정 -> 실행/디버그 -> 실행 -> 프로젝트에 오류가 있어도 계속 실행에 "항상"에 체크되어있더라고요

 

이것을 "프롬프트"로 바꿔주고 확인버튼을 누르면 다시 위의 메시지를 볼 수 있습니다.

 

반응형

안녕하세요.

 

20.05.18일 기준 TrueStudio는 9.3.0 까지 Release되었습니다.

 

결론부터 말씀드리자면 새로 개발하는 사람들은 STM32CubeIDE로 넘어가시길 추천드립니다.

 

STM32CubeIDE는 TrueStudio와 STM32CubeMX를 결합한 개발툴로 Eclipse기반입니다.

 

ST사의 TrueStudio 홈페이지로 가면 TrueStudio가 아닌 STM32CubeIDE를 추천하고 있습니다.

 

For new designs we recommend using STM32CubeIDE instead of Atollic TrueSTUDIO. There will be no new releases of TrueSTUDIO.

 

더 이상 TrueStudio의 새 버전을 내지 않는다고 선언했습니다.

 

만약 기존 프로젝트가 TrueStudio로 되어있다면 그대로 개발을 계속 하고,

새 프로젝트를 진행하게 될 때 CubeIDE로 넘어가시면 될 것 같습니다.

 

 

 

 

 

CubeIDE, TrueStudio, CubeMX 아이콘

 

 

 

STM32CubeIDE 화면, TrueStudio와 동일하다.

 

 

STM32CubeIDE에서 .ioc 파일을 실행한 화면, IDE내에 CubeMX가 도킹이 된 상태로 실행이된다.

 

반응형

트루스튜디오는 이클립스 IDE 기반이기 때문에 단축키는 같다.




Ctrl + A 로 전체 선택 후 Ctrl + Shift + f



반응형

** 해당 포스팅은 ST-LINK Utility 버전 4.3.0 에서 작성되었습니다. 이전버전에서는 적용되지 않습니다.


일반적으로 TrueStudio에서 빌드 후 ST-Link로 hex파일을 이식하기 위해서 ST-LINK Utility 프로그램을 사용합니다.



하지만 프로젝트 빌드 후 이 소프트웨어를 키고 hex파일을 불러와서 프로그램 주입(program verify) 하기에 너무 귀찮다.


찾아보니 단축키 하나로 프로그램을 넣을 수 있는 방법이 있었습니다.


설정방법은 


실행 -> 외부도구 -> 외부 도구 구성 으로 갑니다.



왼쪽 트리에 "프로그램" 을 더블클릭하면 하단에 새_구성이 생깁니다.


아래와 같이 위치, 작업 디렉토리, 인수를 작성합니다.




위치 필드는 설치된 ST-LINK Utility폴더 내에 ST-LINK_CLI.exe의 경로로 설정해 줍니다.


작업 디렉토리 필드에는 "작업공간 찾아보기"를 클릭하여 프로젝트를 선택합니다.


인수 필드에는 -c ID=0 SWD UR LPM -P "프로젝트_빌드_헥사파일_절대경로.hex"  로 설정해 줍니다.


빌드 output이 .hex파일이 생성되기 위해서는 [TrueStudio].hex 파일이 생성되도록 빌드하기 를 참조해주세요.



세 필드를 채워 넣고 "실행"버튼을 누르면 아래와 같이 프로젝트를 빌고 프로그램이 주입됩니다.





단축키(컨트롤 +F11)를 눌러 프로그램을 넣기 위해서 아래와 같이 설정합니다.


실행 -> 실행 구성



Launch Group을 더블클릭하면 새_구성이 생성되고 오른쪽에 "Add..." 버튼을 클릭합니다.



그러면 아래 창이 나옵니다.

Launch Mode를 run으로 두고, 외부 도구 구성에서 생성한 것을 클릭 후 확인 버튼을 클릭합니다.



위 설정이 완료되면 단축키(컨트롤 + F11)를 눌러 프로그램 됩니다. 


단, ST-LINK Utility 프로그램 버전이 4.3.0 이상부터 가능합니다.


프로그램이 끝나면, 디바이스를 리셋해주어야 동작됩니다.






반응형

Dead Code: 사용되지 않는 코드 및 데이터


TrueStudio에서 기본적으로 Dead Code를 지워 Linker를 최적화 해줍니다. 


설정 위치는 프로젝트 특성 -> C/C++ Build -> Settings -> Tool Settings 탭 -> C Linker -> Optimization에서 Dead code removal 을 체크하여 설정합니다.






또한 같은 창에서 Page size allocation for malloc() 설정도 있습니다.


기본적으로 malloc을 사용하면 heap 메모리 영역에 할당됩니다. 이 heap 메모리 영역의 size를 설정하는 옵션으로


128bytes와 4096bytes 두 옵션이 있습니다. 128bytes보다 큰 heap 영역이 필요하다면 이 옵션을 4096bytes으로 설정하여야 합니다.

반응형

GNU C/C++ 컴파일러는 6개 레벨의 컴파일러 옵티마이저 속성을 가집니다.


최적화 없는 -O0 부터 -O3, 속도 최적화를 위한 -Ofast, size 최적화를 위한 -Os, 디버깅을 위한 -Og가 있습니다.


자세한 최적화 내용에 대해서는 다음 링크를 참조하세요.


https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html


설정을 위해서는 프로젝트 특성 -> C/C++ Build -> Settings -> C Compiler -> Optimization -> Tool Settings 탭에서 설정 할 수 있습니다.





Configuration을 Debug로 설정하면 기본적으로 Optimization Level이 None -O0로 설정되어있고, Release에서는 Size 최적화인 -Os로 설정됩니다.


코드 블록 단위로 최적화를 하기 위해서는 아래와 같은 방법으로 할 수 있습니다.


 

void __attribute__((optimize("O1"))) myFunc(unsigned char data)

{

     // The code the needs to have the –O1 optimizing 







반응형

TrueStudio는 기본적으로 프로젝트를 빌드하면 기본적으로 .elf 파일만 생성된다.


.hex 파일이 생성되도록 하기 위해서는 프로젝트 설정을 변경하여야한다.


프로젝트 특성 -> C/C++ Build -> Settings -> Tool Settings 탭 -> Output format 으로 가서


Convert Build output 에 체크하여 Format을 Intel Hex 로 설정한 후 적용 버튼을 누릅니다.


설정을 마친 후 빌드하면 "프로젝트 폴더/Debug" 위치에 hex파일이 생성되는 것을 확인 할 수 있습니다.







반응형

+ Recent posts