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

공지사항

최근에 올라온 글

자바스크립트에는 클래스가 없다. 함수를 이용하여, 클래스처럼 사용한다. 보통 아래의 class1,class2와 같이, 함수내부에서 this에 멤버변수를 할당하는 방식을 사용한다. 그러나, this는 함수가 아닌, Window객체이다. 함수내부의 멤버함수 내부에서 this는 호출한 부모 오브젝트이다. 물론, this에 동일한 이름의 멤버변수가 없는 경우, 문제가 되지 않는다.(잘 돌아간다.) 배열로 만들거나, 동일한 멤버변수(함수)가 존재할 경우, 문제가 된다.
(크롭브라우져에서는) 멤버변수를 만들때, class3()과 같이 사용하는것이 좋을듯 싶다. function class1() { this.a=1;//결론:전역변수(Window이다) 크롭브라우져에서 브레이크 걸어서 확인하면된다. } function class2() { this.a=2; } function class3()//이렇게 사용해라. { var o={}; o.a=3; return o; } function test_class_this1() { console.log("클래스를 만들기위해 함수내에서 this를 사용할 경우, 클래스함수 내에서 this는 무엇인가?"); var a=class1(),b=class2(),c=class3(); console.log("this.a=",this.a); console.log("c.a=",c.a);//c.a= 3 console.log("a.a=",a.a);//Uncaught TypeError: Cannot read property 'a' of undefined console.log("b.a=",b.a); } test_class_this1();



'자바스크립트' 카테고리의 다른 글

8비트, 16비트, 32비트 버퍼 메모리 액세스  (0) 2017.06.14
Sleep  (0) 2017.06.12
this  (0) 2017.06.08
자바스크립트-멤버함수내에서 this를 항상 사용해야하는가?(생략가능한가?)  (0) 2017.06.07
sprintf  (0) 2017.05.27
Posted by 안녕1999
, |

html문서에 아래와 같이 자바스크립트 파일을 추가하면,

<script src="xxx.j"></script>

웹브라우져는 모든 파일을 로딩하고, 파싱한다.
따라서, 각 스크립트파일간 함수 의존관계 체크는 모든 스크립트 파일이 로딩된 이후에 처리된다.

그러나, include함수를 작성하여, 필요시마다 include할 경우,
해당 스크립트에서 사용하는 함수가 없을 경우, 에러처리된다.
따라서, include 순서가 중요해진다.

//로드되기전에, 다른 파일에 있는 함수를 참조할 경우, 에러발생(html에 스크립트파일로 추가하는 경우엔, 모두 로딩되고나서 실행되므로 에러 발생없음)

var include_file_cnt=0;

function include(file)

{

var script=document.createElement('script');

script.src=file;

include_file_cnt++;

script.onload=function()

{

console.log("include(",file,")");

include_file_cnt--;

if(include_file_cnt==0)

{

main();

}

}

document.body.appendChild(script);

//console.log("include",file);

return script;

}

include("hxxx.j");

include("wxxx.j");


Posted by 안녕1999
, |

자바스크립트에서, onload()같은 콜백함수에 인자(파라메터)를 넘기는 방법에 대해 테스트해보았다.

C언어와 동작방식이 달라서, 어렵다.

결론 : 아래와 같이 작성한 경우, onload()함수를 호출한 곳의 파라메터 및 지역변수까지 모두 보존된다.(호출이 끝날때까지)

테스트환경 : 크롬브라우져

var test_parm,test_url,test_i=0;
function test_print_parm1(i)
{
	console.log("test_print_parm1()--------",i);
	console.log("test_parm=",test_parm);
	console.log("test_url=",test_url);
	console.log("test_i=",test_i);
	console.log("--------");
}
function test_call_back(url,parm)
{
	var i=10,a=new Image();
	i++;
	//a.onload=onload;
	a.onload=function()
	{
		console.log("test_call_back::onload()");
		test_parm=parm;//지역변수, 파라메터, 모두 보존된다. 헐~
		test_url=url;
		test_i=i;
		test_print_parm1(i);
	};
	a.src=url;
	return a;
}
var test_img,parm1,parm2;
parm1="img/k81.JPG";
parm2="test_parm";
test_img=test_call_back(parm1,parm2);
console.log("test_call_back() end1");
test_print_parm1(1);
parm1="xxx1";
parm2="xxx2";
test_print_parm1(2);

parm1="img/j2.JPG";
parm2="test_parm2";
test_img=test_call_back(parm1,parm2);
console.log("test_call_back() end2");
test_print_parm1(3);
parm1="xxx11";
parm2="xxx22";
test_print_parm1(4);


Posted by 안녕1999
, |

자바스크립트에서는, 마우스 이벤트 핸들러 함수등록시, event 1개만 사용할 수 있다.

onmousedown(event)

html로 넣을때는 사용자 변수(값)을 추가할 수 있으나, 자바스크립트로는 어렵다.


간단하게, object에 사용자 변수를 추가하여, 해결할 수 있다.

단, 기존 변수와 이름이 중복되면, 기존값은 사라진다.

예)

img1.parm1=user_data1;

img1.onmousedown=startDrag;

Posted by 안녕1999
, |

var hex_0_to_F="0123456789ABCDEF";

function byte_to_HEX(a)

{

return hex_0_to_F.charAt((a>>4)&0x0f)+hex_0_to_F.charAt(a&0x0f);

}

Posted by 안녕1999
, |

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


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

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

cpp에서 c함수 호출

아래와 같이 extern "C" 를 붙여주면 됩니다.

extern "C" void on_timer_xmsec();

VOID CALLBACK win_timer(HWND hwnd,UINT a,UINT b,DWORD c)

{

on_timer_xmsec();



Posted by 안녕1999
, |

atoi에 해당되는 함수는 못찾았다.

대신 2가지 방법을 추천한다.


방법1. 아래와 같이, 특정 문자열을 제거하고, 숫자로 변환하는 방법

=VALUE(SUBSTITUTE(LOWER(B6),"개",""))


방법2. 숫자를 보이지 않는 셀(보통 우측)에 넣고, 보여지는 셀에는 해당 숫자와 문자를 조합하여 표시하는 방법.

        계산은 보여지지 않는 숫자로 한다.

        문자열은 "..."에 넣어주고, 변수는 &로 붙여준다.

        예) "문자열...."&A1&"입니다."

예) ="1"&O4&"("&M4&"개)"  => "1통(50개)"    O4="통",  M4=50

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함