• Home
  • Tag
  • LocationLog
  • Guestbook
  • Admin
  • Write
블로그 이미지

감사합니다.

안녕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
Tistory 로고 이미지 티스토리 가입하기!
태그 : 지역로그
방명록 : 관리자 : 글쓰기
Blog is powered
by Daum /
Designed by Tistory
RSS FEED

달력

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

공지사항

태그목록

  • 이유
  • 에러
  • GCC
  • 대통령
  • 안드로이드
  • C
  • 갤럭시
  • 정부
  • 핸드폰
  • 맛집
  • 프로그램
  • 매실
  • 방법
  • 문제
  • 개선
  • arm
  • 어린이
  • pcb
  • 경제
  • 레고
  • 비교
  • 문재인
  • 옥션
  • 공무원
  • 광고
  • 자바스크립트
  • 제천
  • 윈도우
  • XP
  • 개발

최근에 올라온 글

'프로그램'에 해당되는 글 22건

  1. 2017.03.25 STM32 UART로 프로그램 다운로드
  2. 2017.02.13 윈도우용 무료 웹서버 다운로드
  3. 2016.10.24 ICON 추출 프로그램
  4. 2016.09.22 C언어를 잘하면, ATMega 프로그램도 잘 할 수 있나요?
  5. 2016.09.22 VC++ 6.0 크로스컴파일 디버깅
  6. 2016.09.20 다른사람의 프로그램 소스 수정
  7. 2016.09.09 gcc hex, bin file size 줄이기
  8. 2016.09.01 프로그램 코드 라이브러리 작성시 고려사항
  9. 2016.08.16 하드웨어는 점점 빨라졌지만, 소프트웨어는 오히려 점점 느려졌다
  10. 2016.08.13 WM_TOUCH

STM32 UART로 프로그램 다운로드

카테고리 없음 / 2017. 3. 25. 23:00

STM32 칩중에는 프로그램을 UART로 다운로드할 수 있는 기능이 있는 칩이 있다.

이를 활용하면, RS-232케이블만 있다면, 프로그램 다운로딩이 가능하다.


개발할때 JTAG나 ISP장비가 없어도 된다.

제품이 현장설치된 경우, 고객이 직접 다운로딩도 가능하여, 유지보수에도 효과적이다.


STM32 Flash loader demonstrator

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

다운로드 프로그램 : http://www.st.com/en/development-tools/flasher-stm32.html

가입(로그인)이 필요하다.


 Download Databrief 

USART1 (PA9/PA10)로 RS-232 통신이 되도록, 장비를 구성해 놓아야 한다.


HEX파일 다운로드 방법

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

1) PC에서 다운로드 프로그램을 실행하고,

2) 장비에서 다운로드 스위치 ON

3) 장비 리셋

4) PC에서 다운로드 진행

5) 장비에서 다운로드 스위치 OFF

6) 장비 리셋


언제나 그렇듯이, 데이터쉬트의 말은 반은 맞고, 반은 알기 어렵다.

아래 테이블을 보고, 2번째항목이, 프로그램 다운로드 모드라는걸 알기는 쉽지 않다.

아래는 Reference manual에 나와있는 내용이다. (데이터쉬트가 아니다.)

USART protocol used in the STM32 bootloader 

.

저작자표시 비영리 변경금지 (새창열림)
Posted by 안녕1999
, |

윈도우용 무료 웹서버 다운로드

카테고리 없음 / 2017. 2. 13. 23:30

윈도우에서 사용할 수 있는 무료 웹서버프로그램입니다.
단순 파일서버 기능만 있습니다.(게시판, SQL연동등 불가. html페이지만 사용가능)
파일다운로드 가능.

WebServer.zip



Windows 웹서버 구축 - BEATSLOTH 공대인의 무덤 - Tistory

beatsloth.tistory.com/155
2016. 3. 16. - [Windows 웹서버 구축] 윈도우7 으로 하는 웹서버 구축 자아자아 오늘은 윈도우7을 이용해 웹서버를 구축 해보겠습니다 벌써부터 설레이지 않나요 ...

Study For Us :: 개인 서버 구축 체크리스트 - IIS 웹서버 편

studyforus.tistory.com/164
2014. 11. 19. - 개인서버 만들기 - Check List IIS 웹 서버 최초 작성 날짜 : 2014 / 11 / 19 최근 업데이트 날짜 : 2014 / 11 / 22 IIS로 웹서버를 구축하면서 종종 글이 ...

윈도우7 에서 웹서버 구축하기 3 - 도메인 등록 :: 별머루(http://qortn ...

qortn.tistory.com › work › 웹서버구축
2010. 11. 19. - [관련글 보러가기 - 윈도우7 에서 APMSETUP 을 통한 웹서버 구축하기 ] ... 이제 자신의 개인 웹서버를 어느정도 구동 가능하게 되었는데요. 이번엔 ...

광고

  1. 집에서 웹서버 운영하기 - 생활코딩

    https://opentutorials.org/course/228/6040
    2014. 1. 25. - 공유기의 포트 포워딩을 이용해서 가정에서 웹서버를 운영하는 방법을 알아본다 ... 강의를 보고 다 따라해서 지금 현재 웹서버를 구축했는대요 .

  2. 웹서버를 처음 구축하려고 합니다. | KLDP

    https://kldp.org › Forums
    2011. 12. 28. - 댓글 5 - ‎작성자 5
    동료들과 지금까지 모아놓은 자료를 공유하기위해 웹서버를 구축하게 되었습니다. 처음해보는 분야인지라 이것저것 조사해본 결과. Linux, Apache ...
    웹서버를 구축할때 필요한것은 무엇인가요?
    게시물 2개
    2016년 7월 21일
    임베디드 웹서버 구축 관련하여 질문드립니다.
    게시물 1
    2013년 12월 21일
    [질문]웹서버 구축에 대한 질문입니다.
    게시물 1
    2001년 10월 12일
    kldp.org 검색결과 더보기


저작자표시 비영리 변경금지 (새창열림)
Posted by 안녕1999
, |

ICON 추출 프로그램

카테고리 없음 / 2016. 10. 24. 23:30

ICON 추출 프로그램

BMP파일로 추출합니다.


※32x32보다 큰 아이콘은 테스트되지 않았습니다.



icon_to_bmp.zip


저작자표시 비영리 변경금지 (새창열림)
Posted by 안녕1999
, |

C언어를 잘하면, ATMega 프로그램도 잘 할 수 있나요?

C언어,ARM / 2016. 9. 22. 23:30

네.


그러나, 문법을 안다고, 글을 잘쓰는건 아닙니다.

글을 잘쓰기위한, 기본 조건입니다.


프로그램을 잘만들려면, 많은 것이 필요합니다.

- C언어도 능통해야하고,

- 프로그램 작성에 대한 노하우(방법론)

- 프로그램하려는 분야에도 많은 지식이 있어야합니다.

- ATmega도 하려면, 하드웨어(전자회로)에 대한 지식도 있어야 합니다.


좋은 스승만나서, 열심히 하다보면, 잘하게 될겁니다.

천리길도 한걸음 부터...

저작자표시 비영리 변경금지 (새창열림)

'C언어,ARM' 카테고리의 다른 글

In-Application Programming (IAP)  (0) 2016.10.07
ARM Coretex STM3 - UART 인터럽트 송신 버그(?)  (0) 2016.09.28
C언어 - 노드가 먼가요?  (0) 2016.09.22
VC++ 6.0 크로스컴파일 디버깅  (0) 2016.09.22
warning: iteration 15u invokes undefined behavior [-Waggressive-loop-optimizations]  (0) 2016.09.22
Posted by 안녕1999
, |

VC++ 6.0 크로스컴파일 디버깅

C언어,ARM / 2016. 9. 22. 23:30

ARM cpu에서 돌아가는 프로그램을 작성중이다.

임베디드 개발환경은 주로 

1) PC에서 컴파일해서, 

2) cpu에 다운로딩하고,

3) 결과 확인, 코드 수정

4) 1,2,3번 반복 

이다.

그런데, 2번 다운로딩은 시간이 수십초이상 걸린다.

다운로딩하려면, 리셋도 눌러줘야하고, 케이블도 연결해줘야하고,

이래저래, 몇분이상이 걸린다.


VC++6.0 에서 ARM cpu용 코드를 윈도우용으로 수정하여,

입출력데이터, 논리함수등을 미리 테스트하고,

2번 과정을 거치면, 더 빠른 진행이 가능하다.

물론, WIN32환경과 ARM환경에 따라 매크로함수를 각각 만들어주는것이 복잡하긴하다.

아래 처럼 작성하면 편하다.

물론, 핀 입출력, 통신 입출력은 안되거나, 어렵다.

하지만, 논리데이터를 대입해서 테스트해보는것이 더 빠를 수 도 있다.

#ifdef WIN32

#define DEBUG_puts(s)    my_puts(s)

#else

#define DEBUG_puts(s)

#endif


물론, 돈이 많다면, 해당 칩을 에뮬레이션 해주는 프로그래밍 개발킷(컴파일러)을 구입하면, 좀더 쉽다.

그러나, 배우려면, 쉽지 않다. 모든것을 다 시뮬레이션해 볼 수 있는것도 아니다.

그냥, 빛좋은 개살구 정도...

저작자표시 비영리 변경금지 (새창열림)

'C언어,ARM' 카테고리의 다른 글

C언어를 잘하면, ATMega 프로그램도 잘 할 수 있나요?  (0) 2016.09.22
C언어 - 노드가 먼가요?  (0) 2016.09.22
warning: iteration 15u invokes undefined behavior [-Waggressive-loop-optimizations]  (0) 2016.09.22
프로그래밍 - 실수연산 오차문제  (0) 2016.09.20
warning C4027: function declared without formal parameter list  (0) 2016.09.20
Posted by 안녕1999
, |

다른사람의 프로그램 소스 수정

카테고리 없음 / 2016. 9. 20. 23:30

장비 프로그램(펌웨어)에 문제가 있어,

내가 수정하고 있다.


프로그램 소스를 보기전에 : 머, 스파게티코드인건 당연하지...

프로그램 소스를 본 후 : 예상대로군


이걸 새로 작성해, 아니면, 중요부분만 고쳐?


소스를 보고 있자니, 한숨만 나온다.

도대체 이걸 어떻게 만들었을까?

존경스럽기까지 하다.


이런 걸레같은 프로그램 소스가 돌아가는것이 신기...


누구는 싸고, 누구는 치우고...에휴...

저작자표시 비영리 변경금지 (새창열림)
Posted by 안녕1999
, |

gcc hex, bin file size 줄이기

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

임베디드용 프로그램은 컴파일된 코드사이즈가 작을 수 록 좋다.

보통 printf등의 함수를 사용하면, 수십kb 이상 파일크기가 증가한다.

약 68kbyte인 상태

=================
Generate binary file
Generate hex file
main.o  :
section               size         addr
.isr_vector            388    134217728
.text                67288    134218116
.eh_frame                4    134285404
.ARM                     8    134285408
.ARM.attributes         41            0
.init_array              8    134285416
.fini_array              4    134285424
.data                 1204    536870912
.jcr                     4    536872116
.fsmc_sram_data          0   1677721600
.fsmc_sram_bss           0   1677721600
.fsmc_sram_perma         0   1677721600
.bss                  2128    536872120
._user_heap_stack     1536    536874248
.factory_values          0    135264256
.debug_info         117485            0
.debug_abbrev         3591            0
.debug_loc          114940            0
.debug_aranges         176            0
.debug_ranges        21624            0
.debug_line          29503            0
.debug_str           20683            0
.comment               112            0
.debug_frame         14992            0
Total               395719
   text    data     bss     dec     hex filename
  67688    1220    3664   72572   11b7c main.o
 D 드라이브의 볼륨: D
 볼륨 일련 번호: 1473-2495
 D:\ARM\DP3000\DP3000 디렉터리
2016-09-09  오후 04:57            68,908 main.bin

printf함수대신, puts등을 여러번 사용하여 구현하기도 한다.

또는 %d, %s등만 구현이 되는 간단한 printf함수를 만들어 사용하기도 한다.


또한, printf, puts등에 사용된 문자열도 코드사이즈 증가에 한몫한다.

가는하면, 디버깅이 끝나면, 주석문으로 처리하는것이 좋다.



컴파일된 함수의 기계어 코드사이즈를 확인할 수 있는 방법

Usage: arm-none-eabi-objdump  
 Display information from object .
 At least one of the following switches must be given:
  -a, --archive-headers    Display archive header information
  -f, --file-headers       Display the contents of the overall file header
  -p, --private-headers    Display object format specific file header contents
  -P, --private=OPT,OPT... Display object format specific contents
  -h, --[section-]headers  Display the contents of the section headers
  -x, --all-headers        Display the contents of all headers
  -d, --disassemble        Display assembler contents of executable sections
  -D, --disassemble-all    Display assembler contents of all sections
  -S, --source             Intermix source code with disassembly
  -s, --full-contents      Display the full contents of all sections requested
  -g, --debugging          Display debug information in object file
  -e, --debugging-tags     Display debug information using ctags style
  -G, --stabs              Display (in raw form) any STABS info in the file
  -W[lLiaprmfFsoRt] or
  --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,
          =frames-interp,=str,=loc,=Ranges,=pubtypes,
          =gdb_index,=trace_info,=trace_abbrev,=trace_aranges,
          =addr,=cu_index]
                           Display DWARF info in the file
  -t, --syms               Display the contents of the symbol table(s)
  -T, --dynamic-syms       Display the contents of the dynamic symbol table
  -r, --reloc              Display the relocation entries in the file
  -R, --dynamic-reloc      Display the dynamic relocation entries in the file
  @                  Read options from 
  -v, --version            Display this program's version number
  -i, --info               List object formats and architectures supported
  -H, --help               Display this information


arm-none-eabi-objdump -S -h -d main.o > ..\main.lst
Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .isr_vector   00000184  08000000  08000000  00008000  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  1 .text         000106d8  08000184  08000184  00008184  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 .eh_frame     00000004  0801085c  0801085c  0001885c  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .ARM          00000008  08010860  08010860  00018860  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  4 .ARM.attributes 00000029  00000000  00000000  000204b8  2**0
                  CONTENTS, READONLY
  5 .init_array   00000008  08010868  08010868  00018868  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  6 .fini_array   00000004  08010870  08010870  00018870  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  7 .data         000004b4  20000000  08010874  00020000  2**3
                  CONTENTS, ALLOC, LOAD, DATA
  8 .jcr          00000004  200004b4  08010d28  000204b4  2**2
                  CONTENTS, ALLOC, LOAD, DATA
  9 .fsmc_sram_data 00000000  64000000  64000000  000204e1  2**0
                  CONTENTS
 10 .fsmc_sram_bss 00000000  64000000  64000000  000204e1  2**0
                  CONTENTS
 11 .fsmc_sram_perma 00000000  64000000  64000000  000204e1  2**0
                  CONTENTS
 12 .bss          00000850  200004b8  200004b4  000204b8  2**2
                  ALLOC
 13 ._user_heap_stack 00000600  20000d08  2001fa00  00020d08  2**0
                  ALLOC
 14 .factory_values 00000000  080ff800  080ff800  000204e1  2**0
                  CONTENTS
 15 .debug_info   0001caed  00000000  00000000  000204e1  2**0
                  CONTENTS, READONLY, DEBUGGING
 16 .debug_abbrev 00000e07  00000000  00000000  0003cfce  2**0
                  CONTENTS, READONLY, DEBUGGING
 17 .debug_loc    0001c0fc  00000000  00000000  0003ddd5  2**0
                  CONTENTS, READONLY, DEBUGGING
 18 .debug_aranges 000000b0  00000000  00000000  00059ed8  2**3
                  CONTENTS, READONLY, DEBUGGING
 19 .debug_ranges 00005478  00000000  00000000  00059f88  2**3
                  CONTENTS, READONLY, DEBUGGING
 20 .debug_line   0000733f  00000000  00000000  0005f400  2**0
                  CONTENTS, READONLY, DEBUGGING
 21 .debug_str    000050cb  00000000  00000000  0006673f  2**0
                  CONTENTS, READONLY, DEBUGGING
 22 .comment      00000070  00000000  00000000  0006b80a  2**0
                  CONTENTS, READONLY
 23 .debug_frame  00003a90  00000000  00000000  0006b87c  2**2
                  CONTENTS, READONLY, DEBUGGING

Disassembly of section .text:

08000184 <__do_global_dtors_aux>:
 8000184:	b510      	push	{r4, lr}
 8000186:	4c05      	ldr	r4, [pc, #20]	; (800019c <__do_global_dtors_aux+0x18>)
 8000188:	7823      	ldrb	r3, [r4, #0]
 800018a:	b933      	cbnz	r3, 800019a <__do_global_dtors_aux+0x16>
 800018c:	4b04      	ldr	r3, [pc, #16]	; (80001a0 <__do_global_dtors_aux+0x1c>)
 800018e:	b113      	cbz	r3, 8000196 <__do_global_dtors_aux+0x12>
 8000190:	4804      	ldr	r0, [pc, #16]	; (80001a4 <__do_global_dtors_aux+0x20>)
 8000192:	f3af 8000 	nop.w
 8000196:	2301      	movs	r3, #1
 8000198:	7023      	strb	r3, [r4, #0]
 800019a:	bd10      	pop	{r4, pc}
 800019c:	200004b8 	.word	0x200004b8
 80001a0:	00000000 	.word	0x00000000
 80001a4:	0801085c 	.word	0x0801085c

080001a8 <frame_dummy>:
 80001a8:	4b08      	ldr	r3, [pc, #32]	; (80001cc <frame_dummy+0x24>)
 80001aa:	b510      	push	{r4, lr}
 80001ac:	b11b      	cbz	r3, 80001b6 <frame_dummy+0xe>
 80001ae:	4808      	ldr	r0, [pc, #32]	; (80001d0 <frame_dummy+0x28>)
 80001b0:	4908      	ldr	r1, [pc, #32]	; (80001d4 <frame_dummy+0x2c>)
 80001b2:	f3af 8000 	nop.w
 80001b6:	4808      	ldr	r0, [pc, #32]	; (80001d8 <frame_dummy+0x30>)
 80001b8:	6803      	ldr	r3, [r0, #0]
 80001ba:	b903      	cbnz	r3, 80001be <frame_dummy+0x16>
 80001bc:	bd10      	pop	{r4, pc}
 80001be:	4b07      	ldr	r3, [pc, #28]	; (80001dc <frame_dummy+0x34>)
 80001c0:	2b00      	cmp	r3, #0
 80001c2:	d0fb      	beq.n	80001bc <frame_dummy+0x14>
 80001c4:	e8bd 4010 	ldmia.w	sp!, {r4, lr}
 80001c8:	4718      	bx	r3
 80001ca:	bf00      	nop
 80001cc:	00000000 	.word	0x00000000
 80001d0:	0801085c 	.word	0x0801085c
 80001d4:	200004bc 	.word	0x200004bc
 80001d8:	200004b4 	.word	0x200004b4
 80001dc:	00000000 	.word	0x00000000

080001e0 <_mainCRTStartup>:
 80001e0:	4b15      	ldr	r3, [pc, #84]	; (8000238 <_mainCRTStartup+0x58>)
 80001e2:	2b00      	cmp	r3, #0
 80001e4:	bf08      	it	eq
 80001e6:	4b13      	ldreq	r3, [pc, #76]	; (8000234 <_mainCRTStartup+0x54>)
 80001e8:	469d      	mov	sp, r3
 80001ea:	f5a3 3a80 	sub.w	sl, r3, #65536	; 0x10000
 80001ee:	2100      	movs	r1, #0
 80001f0:	468b      	mov	fp, r1
 80001f2:	460f      	mov	r7, r1
 80001f4:	4813      	ldr	r0, [pc, #76]	; (8000244 <_mainCRTStartup+0x64>)
 80001f6:	4a14      	ldr	r2, [pc, #80]	; (8000248 <_mainCRTStartup+0x68>)
 80001f8:	1a12      	subs	r2, r2, r0
 80001fa:	f010 f819 	bl	8010230 <memset>
 80001fe:	4b0f      	ldr	r3, [pc, #60]	; (800023c <_mainCRTStartup+0x5c>)
 8000200:	2b00      	cmp	r3, #0
 8000202:	d000      	beq.n	8000206 <_mainCRTStartup+0x26>
 8000204:	4798      	blx	r3
 8000206:	4b0e      	ldr	r3, [pc, #56]	; (8000240 <_mainCRTStartup+0x60>)
 8000208:	2b00      	cmp	r3, #0
 800020a:	d000      	beq.n	800020e <_mainCRTStartup+0x2e>
 800020c:	4798      	blx	r3
 800020e:	2000      	movs	r0, #0
 8000210:	2100      	movs	r1, #0
 8000212:	0004      	movs	r4, r0
 8000214:	000d      	movs	r5, r1
 8000216:	480d      	ldr	r0, [pc, #52]	; (800024c <_mainCRTStartup+0x6c>)
 8000218:	2800      	cmp	r0, #0
 800021a:	d002      	beq.n	8000222 <_mainCRTStartup+0x42>
 800021c:	480c      	ldr	r0, [pc, #48]	; (8000250 <_mainCRTStartup+0x70>)
 800021e:	f010 f8f7 	bl	8010410 <atexit>
 8000222:	f00f ffdd 	bl	80101e0 <__libc_init_array>
 8000226:	0020      	movs	r0, r4
 8000228:	0029      	movs	r1, r5
 800022a:	f00f ff5d 	bl	80100e8 <main>
 800022e:	f00f ffc7 	bl	80101c0 <exit>
 8000232:	bf00      	nop
 8000234:	00080000 	.word	0x00080000
	...
 8000244:	200004b8 	.word	0x200004b8
 8000248:	20000d08 	.word	0x20000d08
 800024c:	08010411 	.word	0x08010411
 8000250:	0801041d 	.word	0x0801041d


symbol table에서 각 함수의 크기를 확인할 수 있다.

크기가 큰 함수나, 불필요한 함수는 제거하자.

arm-none-eabi-objdump -S -h -d -t main.o > ..\main.lst
SYMBOL TABLE:
08000000 l    d  .isr_vector	00000000 .isr_vector
08000184 l    d  .text	00000000 .text
0801085c l    d  .eh_frame	00000000 .eh_frame
08010860 l    d  .ARM	00000000 .ARM
00000000 l    d  .ARM.attributes	00000000 .ARM.attributes
08010868 l    d  .init_array	00000000 .init_array
08010870 l    d  .fini_array	00000000 .fini_array
20000000 l    d  .data	00000000 .data
200004b4 l    d  .jcr	00000000 .jcr
64000000 l    d  .fsmc_sram_data	00000000 .fsmc_sram_data
64000000 l    d  .fsmc_sram_bss	00000000 .fsmc_sram_bss
64000000 l    d  .fsmc_sram_perma	00000000 .fsmc_sram_perma
200004b8 l    d  .bss	00000000 .bss
20000d08 l    d  ._user_heap_stack	00000000 ._user_heap_stack
080ff800 l    d  .factory_values	00000000 .factory_values
00000000 l    d  .debug_info	00000000 .debug_info
00000000 l    d  .debug_abbrev	00000000 .debug_abbrev
00000000 l    d  .debug_loc	00000000 .debug_loc
00000000 l    d  .debug_aranges	00000000 .debug_aranges
00000000 l    d  .debug_ranges	00000000 .debug_ranges
00000000 l    d  .debug_line	00000000 .debug_line
00000000 l    d  .debug_str	00000000 .debug_str
00000000 l    d  .comment	00000000 .comment
00000000 l    d  .debug_frame	00000000 .debug_frame
00000000 l    df *ABS*	00000000 C:\DOCUME~1\a\LOCALS~1\Temp\ccG34aLa.o
08010184 l       .text	00000000 LoopCopyDataInit
0801017c l       .text	00000000 CopyDataInit
08010198 l       .text	00000000 LoopFillZerobss
08010192 l       .text	00000000 FillZerobss
080101bc l       .text	00000000 Infinite_Loop
00000000 l    df *ABS*	00000000 d:/arm/bin/../lib/gcc/arm-none-eabi/4.9.3/armv7-m/crti.o
00000000 l    df *ABS*	00000000 crtstuff.c
0801085c l     O .eh_frame	00000000 __EH_FRAME_BEGIN__
200004b4 l     O .jcr	00000000 __JCR_LIST__
08000184 l     F .text	00000000 __do_global_dtors_aux
200004b8 l       .bss	00000000 completed.8108


저작자표시 비영리 변경금지 (새창열림)

'C언어,ARM' 카테고리의 다른 글

VC++ 6.0 으로 gcc 크로스 컴파일 환경 구축 방법  (0) 2016.09.09
STMicroelectronics HEX파일 gcc HEX파일 비교  (0) 2016.09.09
LinkerScript - stm32_flash.ld  (0) 2016.09.09
uint64_t gcc err  (0) 2016.09.09
gcc - error: two or more data types in declaration specifiers  (0) 2016.09.09
Posted by 안녕1999
, |

프로그램 코드 라이브러리 작성시 고려사항

C언어,ARM / 2016. 9. 1. 23:30

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

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


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

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

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

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

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

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

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

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

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


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

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

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


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


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

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


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

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

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



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

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

장점

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

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


단점

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

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

- 관리가 어렵다.

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

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

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



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

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

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

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

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

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



해결방법

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

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


장점

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


단점

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

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



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

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


저작자표시 비영리 변경금지 (새창열림)

'C언어,ARM' 카테고리의 다른 글

gcc - error: two or more data types in declaration specifiers  (0) 2016.09.09
startup_stm32f2xx.s - arm? gcc_ride7?  (0) 2016.09.09
임베디드용 io 라이브러리 설계 계획-io라이브러리로 추상화 했을때의 장단점  (0) 2016.09.01
C언어-itoa 성능테스트  (0) 2016.08.31
error: conflicting declaration of 'long unsigned int xxx()' with 'C' linkage  (0) 2016.08.30
Posted by 안녕1999
, |

하드웨어는 점점 빨라졌지만, 소프트웨어는 오히려 점점 느려졌다

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

C++은 객체지향형 언어라고 한다.

보통 "Class"라고 부르는 C++의 자료형 때문이다.

C++에서는 함수와 변수를 묶어서 Class로 표현한다.

덕분에, 특정 동작을 하는 모듈을 상속을 통해, 쉽게 설계할 수 있고,

강력한 추상화를 지원한다.

추상화를 통해, C언어에서는 만들기 어려웠던 것들도, C++에서는 쉽게 구현이 가능해지는것도 있다.

어쨌든 C++은 C언어보다는 진보된 언어이다.

그러나, 장점이 많지만, 단점도 존재한다.

바로, 속도가 느려진것이다.


C언어에서는 클래스포인터등을 사용하지 않고, 주로 전역변수등을 통해, 쉽게 속도향상이 가능했다.

그러나, 전역변수를 많이 사용할 수록, 복잡한 프로그램은 작성이 어려워진다.

유지보수 또한 매우 어려워진다.

C언어에서도 구조체를 통해, 상속을 구현할 수 도 있다.

원리는 C++와 동일하다.

단, C에서는 클래스포인터를 따로 처리해주지 않으므로, 동일한 동작을 하는 코드를 작성했을때는, C++로 작성한 프로그램이 더 빠르다.(컴파일러가 지원해주지 않으니)

장점이 있다면, 단점도 있다.


Class의 멤버함수, 변수를 참조, 호출하기위해서는 this라고 하는 클래스 포인터가 필요하며, this 포인터 참조를 한번은 더 해야한다.

가끔 호출하는 멤버함수나 변수는 성능에 문제가 없으나, 매우 자주 호출되는 기능을 멤버함수나 변수로 만들경우, 엄청나게 느려질 수 도 있다.


컴퓨터가 발전함에따라, 메모리양이 늘어나고, 속도도 빨라져, C++로 작성해도, 큰 불편함은 없었다.

아니, 사실은 잘 못느낄 뿐이었다.

C++로 작성한 프로그램을 사용하다가, C로 작성된 프로그램을 사용하면, 매우 빨리, 매우 부드럽게, 잘 동작하는것을 느낄 수 있다. 물론, 기능은 떨어진다.

하지만 그만큼의 가치가 있는지 묻고 싶다.(대부분 어쩔 수 없다.)


C++언어는 상속이라는 과정을 통해, 어떤 기능을 호출하면, 마치 양파을 까듯이, 하나 하나 호출하는 방식으로 동작한다.

그러니 당연히 느릴 수 밖에 없다.

C언어로도 C++처럼 동일한 방식으로 작성한다면, 동일하거나, 더 느리다.

그러나, C언어는 위에서도 설명했지만, 비교적 간단한 기능을 프로그램하며, 사람이 직접 전역변수등을 통해, 직/간접적으로 최적화를 시킨다.

그러므로, 속도는 매우 빠르다.


C언어의 단점은 위와 같은 방식으로 전역변수를 많이 사용할 경우, 규모가 큰 프로그램은 작성이 어려워진다.

또한 스파게티 코드라고 부르는 디버깅이 난해한 프로그램이 자주 탄생한다.


규모가 큰 프로그램은  C++로 작성하는것이 좋고, 소규모의 간단하고, 속도가 필요한 프로그램은 전역변수를 많이 사용하는 C언어처럼 작성하는것이 좋다.


C++언어로도 C코드를 만들 수 있다. 당연한 소리.

C++언어로 C와 똑같은 방식으로 프로그램이 가능하다.


어쨌든, 최신 컴퓨터를 사용하는 사람은 잘 못느끼지만, 10년전 20년전 컴퓨터를 사용하는 사람도 많다.

오래된 컴퓨터를 사용하는 사람들에게는 C++언어로 작성된 프로그램은 느릴 수 밖에 없다.


윈도우 운영체제도 내부적으로 C함수로 작성되던 것이, 이제는 점점 C++클래스로 바뀌고 있다.

덕분에 윈도우 업그레이드를 할 수록, 전체적으로 무거워진다.

최신 윈도우에 불필요한(?)기능이 많기도 하지만, C++ 언어의 클래스 때문에 느려지는것 한몫한다.


윈도우XP를 사용하던 컴퓨터에 윈도우7을 설치하니, 너무 느려서, 답답하다.

똑같은 프로그램을 실행하는데도 말이다.


대부분의 사용자들은 최신 컴퓨터에, 최신 기술을 선호한다.

그러나, 최신 기술들은 대부분, 속도면에서 더 느려진다.

동일한 작업을 하는데 있어, 필요이상의 고급 하드웨어와 많은 프로그램 코드를 사용하고 있지는 않은지?


그래도, 최신 컴퓨터와, 최신 운영체제와, 최신 프로그램을 선호하는 사람이 더 많은것은, 어쩔 수 없는 인간의 특성인듯 싶다.


"짜증나면, 컴퓨터를 바꿔라"....???



어쨌든, 이런 특성을 지닌 인간이 설계한 기계는, 가격을 낮추거나, 규모를 축소하는데, 많은 어려움이 있다.

대부분의 개발자들은 컴퓨터의 운영체제가 지원해주는 편리한 기능들을 마구(?) 가져다 사용한다.

그리고나서, 최소 사양을 결정지을때는, 동작하기도 어려운 버벅임을 해결하는데, 고생도 한다.

때로는 아예 실행이 안되는 경우도 있다.


인터넷 뱅킹을 하는데, 여러가지 설치프로그램들이 덕지덕지 설치해야한다.

윈도우XP라면, 서비스펙2이상을 설치해야하고, .Net프레임워크, XML 등도 설치해야한다.

설치가 안되면, 아예 동작이 안된다.


물론 윈도우7에서는 기본적으로 설치가 되어 있다.


사람들은 현재의 편리함을 위해, 약간의 성능 희생하고, 점점 느려지는 컴퓨터를 원망하기도 한다.


물론, 컴퓨터가 느려지는것이, C에서 C++로 바뀌었기때문만은 아니다.

그러나, 상당 부분 영향이 있는것은 사실이다.

하드웨어는 점점 빨라졌지만, 소프트웨어는 오히려 점점 느려졌다.


요약 : 컴퓨터가 점점 느려지는 원인중에 하나는 C++ Class의 영향도 무시할 수 없다.

저작자표시 비영리 변경금지 (새창열림)

'C언어,ARM' 카테고리의 다른 글

arm-none-eabi?  (0) 2016.08.30
gcc include 디렉토리  (0) 2016.08.30
C언어 컴파일 속도를 빠르게하는 방법  (0) 2016.07.16
strlen() 같은 기본 함수도 SIMD 명령으로 최적화할 수 있을까?  (0) 2016.06.02
SSE SIMD link  (0) 2016.05.03
Posted by 안녕1999
, |

WM_TOUCH

카테고리 없음 / 2016. 8. 13. 23:30

WM_TOUCH


멀티터치 관련 메세지

윈도우7 이상부터 지원


Programming Guide
Architectural Overview
Choosing the Right Approach to Windows Touch
Troubleshooting Applications
Windows Touch Input
Windows Touch Gestures
Manipulations and Inertia
Windows Touch Samples
Windows Touch Programming Reference
Windows Touch Glossary


Manipulations and Inertia Programming Guide
Windows Touch Input Programming Guide

 MSDN 코드 샘플

 UINT cInputs = LOWORD(wParam);

PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];

if (NULL != pInputs)

{

    if (GetTouchInputInfo((HTOUCHINPUT)lParam,

                          cInputs,

                          pInputs,

                          sizeof(TOUCHINPUT)))

    {

        // process pInputs

        if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))

        {

            // error handling

        }

    }

    else

    {

        // GetLastError() and error handling

    }

    delete [] pInputs;

}

else

{

    // error handling, presumably out of memory

}

return DefWindowProc(hWnd, message, wParam, lParam);



관련 한글 블로그

  1. Windows 7 멀티터치 시작하기
  2. 미리 정의된 9가지 제스쳐 지원하기 (WM_GESTURE)
  3. 멀티터치 Raw 데이터를 사용 (WM_TOUCH)
  4. Manipulation and Inertia 활용
  5. WPF4 멀티터치 프로그래밍
  6. 실버라이트 4의 멀티터치 프로그래밍

 

저작자표시 비영리 변경금지 (새창열림)
Posted by 안녕1999
, |
«이전 1 2 3 다음»

최근에 달린 댓글

글 보관함

링크

티스토리툴바