블로그 이미지
안녕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

달력

« » 2025.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

공지사항

최근에 올라온 글

uint64_t gcc err

C언어,ARM / 2016. 9. 9. 23:30
uint64_t gcc err

=================
Compiler version
=================
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150303 (releas
e) [ARM/embedded-4_9-branch revision 221220]
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

=================
Compile
=================
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=d:/arm/bin/../lib/gcc/arm-none-eabi/4.9.3/lto-wrapper.exe
Target: arm-none-eabi
...

D:\ARM\xxxxxxxxx\inc\stm32f2xx_flash.h:301:65: error: expected ';', ',' or '
)' before 'Data'
 FLASH_Status FLASH_ProgramDoubleWord(uint32_t Address, uint64_t Data);
                                                                 ^ 


임시 해결 : 사용하지 않으므로, 해당 함수 주석처리함.

Posted by 안녕1999
, |

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

Compiler version

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

arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150303 (releas

e) [ARM/embedded-4_9-branch revision 221220]

Copyright (C) 2014 Free Software Foundation, Inc.

This is free software; see the source for copying conditions.  There is NO

warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


macro.h:182:16: error: two or more data types in declaration specifiers

 #define int8_t signed char

                ^ 



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
, |

C언어는 표준라이브러리가 기본으로 들어 있다.

예)stdlib.h, string.h, ..


그러나, 이런 함수들만으로는 프로그램하기가 어렵다.

그래서, 이 함수들을 이용하여, 프로그램이 자주 사용하는 기능을 함수로 만든다.

자주 사용하는 함수들은 여러 프로젝트에서 공용으로 사용할 수 도 있다.

이런 함수들을 얼마나 많이 가지고 있느냐가, 프로그래머의 재산이라고도 할 수 있다.

특정 기능을 하는 함수 하나를 만드는데는, 상당한 시간과 노력이 필요하다.

단순해도, 성능도 좋아야하고, 범용성도 있어야 하고, 코드 사이즈도 작아야 한다.

예를 들면, line과 같은 직선 그리기 함수를 제대로 만들려면, 상당히 어렵다.

물론, 인터넷에서 소스 복사해서 사용해도 된다.

그러나, 무조건 복사해서 사용할 수 없는 경우가 대부분이다.


어쨌든, 이런 함수들을 모아서 개인용 라이브러리를 제작할 수 있다.

물론 *.lib로 만들어서 사용해도 되나,

소스코드 수정이 자주 발생하기 때문에, 큰 도움은 안된다.


소스수정 -> lib로 컴파일 -> 실행파일 재 컴파일


위와같이 라이브러리 컴파일 과정이 추가된다.

이는 실제 프로그램 작성할때는 상당한 시간을 소비한다.


그래서, lib로 만들지 않고, 응용프로그램에 소스코드로 추가하기도 한다.

당연히, 재컴파일하면, 시간이 상당히 많이 소모된다.

그러나, 라이브러리의 소스코드를 수정하고, 확인하기가 용이하기때문에, 나는주로 이 방식을 사용한다.



개인이 만든 공용라이브러리의 장단점

-----------------------------------------------------------

장점

- 자주 사용하는 전용 함수가 있어, 프로그램 개발이 빨라진다.

- 라이브러리 함수의 오류 수정으로, 관련된 모든 프로그램의 오류도 수정된다.


단점

- 공용이기때문에, 마음대로 수정할 수 없다.

  작은 수정으로도, 다른 프로그램에는 문제가 될 수 도 있다.(가장 큰 문제)

- 관리가 어렵다.

  공용이라, 함수, 파일의 개수는 작은 기능차이로 인해, 점점 많아진다.

- 간단한 프로그램도, 소스파일 백업할때, 라이브러리까지 포함해야 해서, 배보다 배꼽이 큰 경우가 많다.

  백업파일의 크기가 매우 크게 증가



개인용 공용라이브러리를 만들경우,

여러 프로그램에서 공용으로 사용하는 경우가 생긴다.

간혹, 기능추가나, 변경등을 해야할 경우가 생긴다.

원칙적으로하면, 함수명을 바꾸어 사용해야하나,

그렇게 되면, 공용 라이브러리의 의미가 없어지는 경우도 있다.

여러 프로그램이 하나의 라이브러리를 사용하여, 라이브러리 수정으로, 예상치 못한 오류가 발생하기도 한다.



해결방법

----------------------------

각 프로그램별로, 전용 라이브러리로 복사하여 사용.


장점

- 해당 프로그램용, 전용 라이브러이므로, 라이브러리 수정으로, 다른 프로그램에는 영향이 없다.


단점

- 동일한 기능을 가진 프로그램이 여러개일 경우, 각각 수정해주어야 하는 번거로움이 있다.

- 백업파일의 크기가 매우 크게 증가한다.



현재는 상용프로그램이라서, 버그 수정이 필요하지만, 공용으로 라이브러리를 사용할 경우, 예기치 못한 버그가 발생하기도 하여, 각 프로그램 별로 라이브러리를 복사하여 사용하고 있다.

백업 파일의 크기는 라이브러리의 크기가 매우커서, 자주 백업하는것이 어렵다.


Posted by 안녕1999
, |

임베디드용 io 라이브러리 설계 계획



avr, pic, arm등의 작은 마이컴칩에 프로그램을 하다보면,

eeprom, uart,spi,i2c,can,...등의 많은 장치와 통신 또는 데이터를 읽고, 쓰는 기능이 필요하다.

그런데 문제는 각 장치들의 특성이 동일하지 않다는 것이 문제.

단순히, write, read함수로 통일할 수 있을것 같지만, 그렇지 않다.

윈도우의 Write함수도 내부적으로 장치별로 verify기능을 가지고 있을 수 있지만, 확실하게 하려면, verify기능도 넣어야 한다. 또한, 내부적으로 verify기능이 있다고 해도, 전체적으로는 각 장치마다 verify코드가 필요하다.

코드 사이즈 감소는 어려워 보인다.


io라이브러리로 추상화 했을때의 장단점을 비교해보자.




io_read/io_write로 추상화하면

--------------------------------------------------------

장점

- write-verify기능을 공용으로 사용할 수 있다.

- 모든 io에 대해 동일한 기능 적용

  각각의 전용 write-verify함수를 작성하는것과의 차이는?

- 약간 코드 수정으로 다양하게 사용할 수 있다.

- 다양한 장치를 하나의 코드를 사용하여, 코드 사이즈 감소가 될 수 도 있다.(거의 불가능)


단점

- 복잡해짐

- 코드사이즈 증가

- 느려짐



verify

----------------------------

- UART와 같은 포트에서는 write-read-cmp가 아닌, crc, check-sum을 데이터에 포함해서 전송하고, 처리 결과 응답을 받아서 확인해야한다.

  (write-read-cmp 적용불가. 능동장치. 속도가 느려, 대역폭에 제한이 큼)

- flash, eeprom등은 write-read-cmp적용가능(수동장치. 속도가 빨라, 대역폭에 제한이 별로 없음)



결론

---------

임베디드 환경에서는 추상화는 다소 무리가 있다.

불편하더라도, 전통적인 방식의, 장치별로 제작된 전용 함수를 사용하는것이 좋을듯 싶다.

Posted by 안녕1999
, |

인터넷에 있는 코드 몇개를 테스트했다.

임베디드를 하다보면, itoa를 직접 구현해야 할 경우가 가끔있다.


2번째가 라이브러리에 있는 함수

라이브러리에 포함된 함수가 가장 빨랐다.



테스트코드

void _debug_puts2(char *s,int a,int b);

void test_speed_itoa10_buf()

{

int v_start=-1000000,v_end=1000000,n=0,v;char buf[32];DWORD t[8];


_debug_puts("test_speed_itoa10_buf START\r\n");

t[0]=GetTickCount();

for(v=v_start;v<v_end;v++)

{

itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);//1

itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);//2

itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);//3

itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);//4

itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);itoa10_buf(v,buf);//5

}

t[1]=GetTickCount();

for(v=v_start;v<v_end;v++)

{

itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);//1

itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);//2

itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);//3

itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);//4

itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);itoa(v,buf,10);//5

}

t[2]=GetTickCount();

for(v=v_start;v<v_end;v++)

{

i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);//1

i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);//2

i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);//3

i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);//4

i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);i_to_a(v,buf);//5

}

t[3]=GetTickCount();

for(v=v_start;v<v_end;v++)

{

itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);//1

itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);//2

itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);//3

itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);//4

itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);itoa2(v,buf,10);//5

}

t[4]=GetTickCount();


t[0]=t[1]-t[0];

t[1]=t[2]-t[1];

t[2]=t[3]-t[2];

t[3]=t[4]-t[3];

_debug_puts("test_speed_itoa10_buf END\r\n");

//[0] 6485

//[1] 5328

//[2] 8891

//[3] 7750

Posted by 안녕1999
, |

..\xxx.h:3:21: error: conflicting declaration of 'long unsigned int xxx()' with 'C' linkage


arm 컴파일중, 확장자가 c인것들을 CPP로 변경하여 발생.

원래대로 확장자를 C로 변경하여, 해결됨.

Posted by 안녕1999
, |

arm-none-eabi-gcc: error: CreateProcess: No such file or directory

위 문제는 gcc가 내부적으로 cc1.exe을 호출하기 때문입니다.

gcc설치당시 설정된 경로 "../lib/gcc/arm-none-eabi/4.9.3/"에서 호출하기때문입니다.


 d:/XXXX/bin/../lib/gcc/arm-none-eabi/4.9.3/cc1.exe -E -lang-asm -quiet -v -I D

:\Source\Lib -I D:\Source\Lib\XXXX -imultilib armv6-m -iprefix d:\XXXX\bin\../

lib/gcc/arm-none-eabi/4.9.3/ -isysroot d:\XXXX\bin\../arm-none-eabi -D__USES_IN

ITFINI__ -D CORTEX_M0 -D USE_STDPERIPH_DRIVER D:\Source\LAN-AUDIO/XXXX/startup_

XXXX.S -mthumb -mcpu=cortex-m0 -g -fworking-directory -O3 -fno-directives-only

-o C:\DOCUME~1\a\LOCALS~1\Temp\ccwt5swb.s 


결론:

arm-none-eabi

bin

lib

Source

※arm-none-eabi, bin, lib 폴더는 Source폴더와 같이 있어야 한다.(변경불가)


Posted by 안녕1999
, |

arm-none-eabi?

C언어,ARM / 2016. 8. 30. 23:30

arm-none-eabi?


ABI : Application binary Interface

EABI : embedded ABI


ABI : 운영체제가 실행시켜주는 파일

none-ABI : 운영체제가 없이 독립적으로 실행되는 파일

none-EABI : 운영체제가 없이 독립적으로 실행되는, 마이컴용 파일






EABI:

ELF:


Posted by 안녕1999
, |

gcc include 디렉토리

C언어,ARM / 2016. 8. 30. 23:00

gcc include 기본 디렉토리(빨간색)

#include "..." search starts here:

#include <...> search starts here:

 D:\Source\Lib

 D:\Source\Lib\xxxx

 d:\xxxx\bin\../lib/gcc/arm-none-eabi/4.9.3/include

 d:\xxxx\bin\../lib/gcc/arm-none-eabi/4.9.3/include-fixed

 d:\xxxx\bin\../lib/gcc/arm-none-eabi/4.9.3/../../../../arm-none-eabi/include

End of search list. 


Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함