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

공지사항

최근에 올라온 글

디버그모드에서 ASM코드를 보니, 3번째 코드가 가장 간결하다.
물론, 릴리즈모드에서는 어떻게 바뀔지 알 수 없다.


msg[4]=p[i];//1

msg[5]=p[i+1];//2

msg[6]=p[i+2];//3

msg[7]=p[i+3];//4

msg[8]=p[i+4];//5

msg[9]=p[i+5];//6


  msg[4]=*p;p++;//1

msg[5]=*p;p++;//2

msg[6]=*p;p++;//3

msg[7]=*p;p++;//4

msg[8]=*p;p++;//5

msg[9]=*p;p++;//6


  msg[4]=p[0];//1

msg[5]=p[1];//2

msg[6]=p[2];//3

msg[7]=p[3];//4

msg[8]=p[4];//5

msg[9]=p[5];p+=6;//6


Posted by 안녕1999
, |

AVR, ARM등의 CPU프로그램을 작성할때,

1) 프로그램 작성

2) 다운로드

3) 테스트

4) 1번 부터, 될때까지 무한 반복.


문제는 다운로드 시간이 1초든, 10초든, 시간이 걸린다는 점입니다.

다운로드가 마우스클릭만으로 되는 경우는 드물고,

CPU 리셋을 하고, 다운로드하는 과정이 적게는 수십초~몇분까지도 걸립니다.

프로그램코드가 크다면, 다운로드 시간은 더 많이 걸립니다.


오타 하나 고치려고, 수정하고, 다운로드하고, 테스트하는 시간이 생각보다 많이 소모됩니다.


그래서, 윈도우환경에서 프로그램코드를 검증하고, 나중에 CPU에 다운로드해서, 테스트해보는 방법이 빠를 수 도 있습니다.

윈도우 환경에서는 많은 메모리와, VC++ 같은 우수한 컴파일러 환경을 사용할 수 있습니다.

문제는 윈도우 환경에서 동작하기위해, 코드를 각각 작성해야 하므로, 약 1.5배 정도의 코드를 작성해야 합니다.


C언어의 장점은 함수만 동일하게 작성하면, 어떤 환경이든, 대부분 동작이 된다는 것입니다.

물론, 하드웨어 환경도 비슷하게 꾸며주어야 합니다.

예) EEPROM_write() => WIN_EEPROM_File_Write()


보통 아래와 같이 매크로를 사용하여, 함수를 각각 만들어 줍니다.

void LCD_putch(byte c)

{

#ifdef WIN32

printf("%c",c);

#else

LCD_send_data(c);

#endif

}


UART통신, EEPROM, LCD, KEY등도 각각 함수를 만들어 줍니다.

물론, 윈도우 환경에서 사용할 함수를 만드는 작업이 쉽지않고, 시간도 많이 걸립니다.

그러나, 잘 많들어 놓으면, CPU에 다운로드하고, 테스트하는 시간이 획기적으로 줄어들어, 전체 개발속도가 향상될 수 있습니다.

Posted by 안녕1999
, |

기존 장비의 프로그램에 문제가 있어, 수정하고 있습니다.

다른 사람이 만든거라, 거의 새로 작성해야합니다.

기존 프로그램 코드는 여러가지 문제가 많아,

도저히 "부분수정"이 안됩니다.


"블랙박스모델"처럼, 입출력 동작 데이터만으로

"재구현"이 필요합니다.

물론 시간이 많이 걸립니다.


"부분수정", "최소수정"을 하려고, 다각도로 검토해보았으나.

시간만 많이 소요되고, 별 진전이 없고, "어차피 전체 수정이 필요하다"는 결론이 나옵니다.


지난번 장비 수정에서 약 50%의 시간이, "부분수정, 최소수정 검토"하는데 시간이 소모되었습니다.

"어떻게 수정할것인지에 대한 검토"는 반드시 필요하나, 발견되지 않은(않는) 문제때문에, 불필요하게 시간이 소요되는 경우가 맣습니다.

그냥 차라리, 블랙박스 모델로 새로 만드는것이 더 확실하고, 깔끔합니다.


그런데말입니다. 여기서 또 문제가 있습니다.

기능이 복잡한 경우에는 시간이 많이 소요됩니다.

최소수정으로 하려고하나, 안되는 경우에는 울며겨자먹기로, "재프로그램"을 하게 됩니다.

물론, 이경우에는 더 많은 시간이 소요됩니다.

Posted by 안녕1999
, |

sin HEX 값(5도)

카테고리 없음 / 2016. 10. 7. 23:30
각도 16비트데이터 HEX HIGH LOW
0 32768 8000 80 0
5 35623 8B27 8B 27
10 38458 963A 96 3A
15 41248 A120 A1 20
20 43975 ABC7 AB C7
25 46616 B618 B6 18
30 49151 BFFF BF FF
35 51562 C96A C9 6A
40 53830 D246 D2 46
45 55938 DA82 DA 82
50 57869 E20D E2 0D
55 59609 E8D9 E8 D9
60 61145 EED9 EE D9
65 62465 F401 F4 1
70 63559 F847 F8 47
75 64419 FBA3 FB A3
80 65038 FE0E FE 0E
85 65411 FF83 FF 83
90 65535 FFFF FF FF
95 65411 FF83 FF 83
100 65038 FE0E FE 0E
105 64419 FBA3 FB A3
110 63559 F847 F8 47
115 62465 F401 F4 1
120 61145 EED9 EE D9
125 59609 E8D9 E8 D9
130 57869 E20D E2 0D
135 55938 DA82 DA 82
140 53830 D246 D2 46
145 51562 C96A C9 6A
150 49152 C000 C0 0
155 46616 B618 B6 18
160 43975 ABC7 AB C7
165 41249 A121 A1 21
170 38458 963A 96 3A
175 35623 8B27 8B 27
180 32768 8000 80 0
185 29912 74D8 74 D8
190 27077 69C5 69 C5
195 24287 5EDF 5E DF
200 21560 5438 54 38
205 18919 4.90E+08 49 E7
210 16384 4000 40 0
215 13973 3695 36 95
220 11705 2DB9 2D B9
225 9597 257D 25 7D
230 7666 1DF2 1D F2
235 5926 1726 17 26
240 4390 1126 11 26
245 3070 0BFE 0B FE
250 1976 07B8 7 B8
255 1116 045C 4 5C
260 497 01F1 1 F1
265 124 007C 0 7C
270 0 0 0 0
275 124 007C 0 7C
280 497 01F1 1 F1
285 1116 045C 4 5C
290 1976 07B8 7 B8
295 3070 0BFE 0B FE
300 4390 1126 11 26
305 5926 1726 17 26
310 7666 1DF2 1D F2
315 9597 257D 25 7D
320 11705 2DB9 2D B9
325 13973 3695 36 95
330 16383 3FFF 3F FF
335 18919 4.90E+08 49 E7
340 21560 5438 54 38
345 24286 5EDE 5E DE
350 27077 69C5 69 C5
355 29912 74D8 74 D8

#include "math.h"

#ifndef PI

#define PI 3.141592f

#endif

void sin_hex_high_low()

{

float s;int d,is;


for(d=0;d<360;d+=5)

{

s=32768+sin((d*PI)/180)*32768;

is=(int)s;

printf("%d %d %04X %02X %02X",d,is,is,(is>>8)&0xff,is&0xff);

}

}

 




Posted by 안녕1999
, |

네.


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

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


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

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

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

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

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


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

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

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

windef.h(142) : warning C4114: same type qualifier used more than once



//WINDEF.H

typedef unsigned long       DWORD;  <<--- 여기가 문제


원인 : 다른 파일에서 아래 문장을 사용해서 발생

#define DWORD    unsigned long




해결방법

소스파일에서 #include 순서 조정.

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함