블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.5
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

공지사항

최근에 올라온 글

gcc 컴파일러로 프로그램 작성하는 중에,
리스트파일을 확인해보니,
함수가 여기저기 조각 조각 널려있는게 아닌가?
원래 있어야할 위치에 없고, 말그대로, 조각 조각 널려져 있었다.
-O3 옵션을 주었다.
예)
void func1(int a)
{
    ...
void func1(int a)  <<---똑같은 함수명(코드는 다름. 호출변수등에 따라 달라지는듯)
{
    ...
void func2()
{
    ...
}
    ...


결론
===========
최적화 옵션을 주면, inline 표시를 안해도, 컴파일러가, 함수를 적당한 위치에,
함수를 용도에 맞게 조각 조각 내서(또는 통째로), 끼워넣어준다.
이는 함수 호출과 리턴할때 필요한 코드를 없애, 속도를 빠르게하고, 코드사이즈를 작게하는 효과가 있다.
최적화 옵션을 주어 컴파일한다면, 굳이 inline 표시를 안해도 될듯 싶다.
(그러나, inline 옵션을 주면, inline이 꼭 필요한 함수는 거의 대부분(?) inline 적용해줄것이다.)

Posted by 안녕1999
, |

MicroSoft Visual Studio C++에서는 디버그(_DEBUG) 매크로를 지원합니다.
컴파일러에서 기본적으로 지원되지 않더라도, 사용자가 만들어 사용할 수 도 있습니다.

컴파일모드는 디버깅모드와 릴리즈모드가 있습니다.
(구분이 없는 컴파일러도 있을 수 있습니다.)

디버그 매크로에는 프로그램이 완성되어 출시될때, 포함되지 않는 "테스트코드, 개발중인 코드" 등이 들어가게 됩니다.

#ifdef _DEBUG

test_run_xxxx();

#endif 

프로그램 업그레이드, 개발중에 디버그 매크로안에 코드를 넣으면, 출시(릴리즈)할때, 디버깅 코드는 들어가지 않습니다.
이는, 개발/수정중에도, "급한/사소한 수정사항"이 발생했을때도, 테스트코드에 영향이 없는 배포(릴리즈)용 실행파일을 생성할 수 있습니다.

요약 : 테스트코드는 디버그 매크로안에 넣자.

Posted by 안녕1999
, |

아트멜사는 ATMega128을 비롯하여, 공전의 히트 제품을 출시하여, ARM cortex시리즈가 나오기 몇년전까지만해도,

엄청난 인기를 끌었다.

보통 AVR칩, AVR컴파일러등으로 불렀다.

(비디오 기록장치인 AVR과 관련이 없다.)


EEPROM을 내장하고, 적당한 성능에, 적당한 가격과, 무료컴파일러 지원이라는 시스템으로,

많은 사용자를 만들어냈다.

그당시에는 대부분의 컴파일러는 유료였고, 크렉하여 사용하던 시절이다.


현재의 대세인 ARM cortex시리즈와 비교해보면, AVR칩은 8비트에 16MHz이 저사양(?) cpu이고,

ARM cortex는 32비트에 보통 48MHz이상을 대부분 지원한다.

또한, 가격을 대폭 낮추어, 2016년 현재에는 AVR칩이 더 비싼 경우도 있다.

(수요가 줄어서, 가격이 올라간것도 이유)


어쨌든, 2016년에는 ARM cortex가 대세이다.

많은 칩제조회사들이 ARM코어를 사다가 칩을 제조하며,

이들 칩들은 대부분 호환이 가능하다.


가격

========

ARM coretex는 수많은 제조사들이 경쟁하여, 가격이 매우 낮아졌다.

AVR칩은 수요감소로 인해, 가격이 올라가는 추세이다.



소스코드 호환성

================

 ARM coretex는 소스코드 조금만 손보면, 대부분의 칩에서 동작이 가능하다는 엄청난 메리트가 있다.

소스레벨에서는 어느정도 호환 가능하나, 사실상, 그냥 컴파일되는 경우는 없다.

또한, 32비트 CPU라서, 윈도우환경에서 개발하여, 포팅하는것도, 더욱 쉬워졌다.


AVR컴파일러는 1~2종류라고 봐도 된다.

2가지 컴파일러중 한가지에서 돌아가는 소스코드이다.



컴파일러 비교

==============

AVR컴파일로는 무료이나, ARM cortex 컴파일러는 gcc로 툴체인 구성하지않는한, 대부분 유료이다.

물론, 무료 컴파일러도 있으나, 많이 사용하지 않는다.


AVR컴파일러는 대표적인것이 2가지가 있다.

ARM컴파일러는 칩종류도 많고, 컴파일러 종류도 많다.


ARM은 소스문법에 따른 버그가 적으나,

AVR은 최적화시, 소스코드 작성을 어떻게 하느냐에따라, 알수없는 버그가 많은 편이다.

잘동작하는코드, 한두줄만 수정해도, 엉뚱한 상황이 벌어지는 경우가 생각보다 많다.

그냥 코드를 새로 다시 작성하다보면, 해결되는 경우도 있다.

코드의 순서를 어떻게 하느냐에 따라 문제가 생길 수 도 있고, 아닐 수 도 있다.




칩의 버그

=========

ARM칩은 각 제조사마다, 칩의 버그가 있는 경우가 있다.

아무래도, 초반이니 있을 수 있는 버그이나, 칩의 종류가 많기때문에, 해당버그는 수정되지 않고, 칩이 단종될 가능성도 있다.

예) STM사의 어떤칩은 UART인터럽트가 중간에 꺼져버린다.(호출이 안된다.)


AVR은 칩의 종류가 사실상 많지 않고, 10년넘게 사용되어, 많은 버그가 수정된 상태이다.




다음 프로젝트에 사용할 CPU는?

================================

당연히, ARM coretex이다.

AVR은 알수없는 컴파일러 문제가, 개발자들을 상당히 괴롭힌다.

이번에도 거의 다된 상태에서, 이상하게 동작을 한경우이다.

최적화 옵션을 끄니, 더 황당한 짓을 하기도 했다.

오히려, Os옵션으로 최적화 했을때, 그래도, 비교적 정상적인 동작을 했다.(어이 없음)

(물론, 윈도우에서 크로스컴파일 에뮬레이션까지 다해본 코드이다.)

Posted by 안녕1999
, |

임베디드 mcu프로그램을 하기위해,

gcc arm 컴파일러를 준비하고,


compile.bat 파일을 만들어, 컴파일 할 수 있게 설정했다.


VC++6.0에서는 MakeFile 프로젝트를 만들어서, 아래와 같이

배치파일을 넣어준다.


Debug모드 : Build command line = compile.bat

Release모드 : Build command line = DownLoad_main_HEX.bat


VC++ 6.0에서

Debug모드로 컴파일하면, 컴파일이 되고,

Release모드로 컴파일하면, 다운로딩이 된다.


장점

- 프로젝트를 WIN32환경으로도 구축하여, WIN32에서 알고리즘 동작테스트 후,

  gcc로 컴파일하여 다운로딩하면, 개발 시간을 단축할 수 있다.

  gcc등으로 "컴파일 -> 다운로딩 -> 테스트 -> 수정 -> ..." 무한반복을

  "WIN32에서 알고리즘 동작테스트 -> gcc컴파일 -> 다운로드"

- 도스창(배치파일)로 컴파일하는것 보다는 훨씬 편하다.

- 도스창에 나오는 내용은 Build창에 나온다.


단점

- VC++ 6.0 사용하는 사람이 적음

- 도스창에 나오는 내용중, 진행상황을 표시하는것은, 완료가 되어야 나온다.

  예) 다운로딩



VC++ 6.0자체가 가볍지는 않고, 유료 프로그램이라서,

약간 부담은 되나,

크로스컴파일러를 설치하고, 해당 컴파일러 환경을 사용하는데, 불편한 사람들

(즉, VC++ 6.0이 익숙한 사람들)에게는 좋은 환경이된다.



VC++ 6.0의 편집툴(IDE)은 비교적 가볍고, 검은색 배경으로 설정하면,

눈도 덜아프다.(색상 조절이 잘되는편)


현재 나온 대부분의 크로스컴파일러들은 VS 2005와 비슷한 IDE를 가지고 있으며,

무겁고, 색상, 폰트 변경이 조금만 되는 것들이 많다.



WIN32, gcc 크로스컴파일 환경 구축방법

==================================

WIN32 프로젝트를 만들고, 위에서처럼, MakeFile 프로젝트를 추가하면 된다.

Posted by 안녕1999
, |

How to remove unused C/C++ symbols with GCC and ld?


gcc컴파일시, 사용하지 않는 함수도 코드사이즈에 포함되어, 불필요하게 코드사이즈가 증가된다.

사용하지 않는 함수는 제거할 수 있는 옵션이 있나?


-fdata-sections -ffunction-sections -Wl,--gc-sections 옵션 추가하면됨.


69,156 => 28,976가 되었음

Posted by 안녕1999
, |

gcc컴파일러에서, 스타트업 파일을 찾아야하는데,


Libraries\CMSIS\Device\ST\STM32F2xx\Source\Templates 폴더에

arm, gcc_ride7, iar, TASKING, TrueSTUDIO 등이 있다.


arm=MDK-ARM toolchain

gcc_ride7 = RIDE7 toolchain



arm\startup_stm32f2xx.s 으로 선택 (MDK-ARM toolchain)하니, 에러발생.

gcc_ride7\startup_stm32f2xx.s 으로하니, OK.



Ride7 - Raisonance Microcontroller

www.raisonance.com/ride7.html
이 페이지 번역하기
Ride7 is a free software tool that is available with Raisonance RKit C toolsets, RLink ... Includes RLink debugger programmer, license dongle, GCC compiler,.

ARM GCC Compiler - Raisonance Microcontroller

www.raisonance.com/arm-compiler.html
이 페이지 번역하기
The GCC compiler is seamlessly integrated into the Ride7 integrated development environment to facilitate starting projects and multiple builds/rebuilds of your ...

[PDF]Ride7 for ARM - Elmicro.com

https://elmicro.com/files/raisonance/gettingstartedarm_ride7.pdf
이 페이지 번역하기
Ride7 for ARM comes with the following tools from RAISONANCE: • Ride7: the ... everything under the “arm-gcc” and “GNU” subdirectories of Ride7 installation ...

STMicroelectronics ARM Cortex-M3 STM32F103

hayanmail.com/jsy/index.html?board=cizblog_zboard3&ln_mode...id...
Ride7GCC가 내장된 IDE * Codesourcery Lite는 Cortex-M4의 하드웨어 FPU를 지원하지 않는다고 함 https://launchpad.net/gcc-arm-embedded: 하드웨어 FPU ...

Ride7 and GCC compiler - stm32circle.com

www.stm32circle.com/resources/tools.php
이 페이지 번역하기
Your STM32 Primer comes with a complete Ride7 software toolset that allows you to: modify and compile applications; program the STM32Fxxx on the Primer ...


Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함