본문 바로가기

programming

programming english - A hit the assertion that IRQs are disable. programming english A hit the assertion that IRQs are disabled.의 의미.. A 라는 system 이 ASSERT() 코드를 가지고 있음.내용은 IRQ 가 disable 되었는지 check 하고 맞으면 ok, 틀리면 assert 를 발생시키는...헌데 이 ASSERT() 에 hit 되어 assert 가 발생했다는 의미임 더보기
get pid by process name - example source code (예제 코드) 원문 : https://phoxis.org/2013/09/13/find-process-ids-of-a-running-process-by-name/ 이름으로 pid 를 찾아내는 예제 #include #include #include #include #include #include /* checks if the string is purely an integer * we can do it with `strtol' also */int check_if_number (char *str){ int i; for (i=0; str[i] != '\0'; i++) { if (!isdigit (str[i])) { return 0; } } return 1;} #define MAX_BUF 1024#define PID_LIST_BL.. 더보기
root 계산 함수 만들기 원문 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0Xrxs&articleno=41 #include double SQRT(double, double);void main() { double input, x, result; while(1) { scanf("%lf", &input); scanf("%lf", &x); result = SQRT(input, x); printf("제곱근은? : %lf \n", result); } } double SQRT(double input, double x) { for(int i=0; i 더보기
빠르게 랜덤변수 발생시키기 int g_seed;int fastrand() { g_seed = (214013 * g_seed + 2531011);return (g_seed >> 16) & 0x7FFF;} 기존에는 아래와 같은 방식으로 랜덤 변수를 생성하였었다.time_t seconds;time(&seconds);srand((unsigned int)seconds);//srand((unsigned)time(0));v0 = rand() % 10; 하지만 이 방식은 초당으로 seed 가 변해서 그런지, 랜덤숫자가 빠르게 변하지 않는 단점이 있다. 이 대신에 fastrand 를 사용하면, 빠른 속도로 랜덤한 변수를 얻을 수 있다. 더보기
#if 로 define 을 하면 좋은점. define 을 선언할때 #define __CONFIG_A__ 1 로 선언해 놓고 #ifdef __CONFING_A__ 가 아닌 #if __CONFIG_A__ 로 하면 나중에 개발이 완료된후 define 문들을 삭제할때 간편하다. source insight 같은 tool 에서 찾아 바꾸기 기능을 이용해서 "__CONFIG_A__" -> "0 /*__CONFIG_A__*/" 로 변환하면#if 들이 자동으로 disable 되면서 구별이 된다. 더보기
sorting algorithm 을 한눈에 보여주는 동영상들 오오 멋진데요. 더보기
The cost of inline functions The cost of inline functions [Posted April 28, 2004 by corbet] The kernel makes heavy use of inline functions. In many cases, inline expansion of functions is necessary; some of these functions employ various sorts of assembly language trickery that must be part of the calling function. In many other cases, though, inline functions are used as a way of improving performance. The thinking is that.. 더보기
배열 초기화 선언 int aaaa[10] = {2,}; 로 선언하면 어떻게 저장될까요? ... 정답은 {2, 0, 0, 0, 0, 0, 0, 0, 0, 0} 나는 2로 다 채워주는 줄 알았을 뿐이고..;;; 더보기
c 와 c++ 의 const 내용정리 학생때 쓴 강좌인데 필요로 하시는 분들이 계시내요. 참고 하세요. 아래 static부분이 어서 const 정리 내용입니다. 순서는 다음과 같습니다. 1. const 2. 배열과 const 3. const와 Intenal Linkage 4. 포인터의 const 5. const 함수 6. const 멤버변수 7. const 멤버함수 8. 함수의 파라미터를 (const &)로 쓰자! 빼먹은 부분없이 정리해 볼려고 했는데.. 잘 되었는지는 모르겠내요. 읽어보시고 틀린곳이나 추가할 부분은 지적해 주세요. 많은 도움되길 바랍니다. ^^ =============================================================================== 과거에 상수를 정의할때는 메크로를 썻다.. 더보기
해킹방지를 위한 코딩법 네이버에 이런기사가 뜨다니.. 하핫 x86 에만 적용되는 내용도 있지만.. (예를 들면 break point 에 대한 내용, ARM에서는 bp를 위한 Asm 이 존재하지 않는다) 상당히 잼있는 내용들이다. - 해킹방지를 위한 코딩법 - http://www.imaso.co.kr/?doc=bbs/gnuboard.php&bo_table=article&wr_id=35757 더보기
__read_mostly keyword linux kernel source 를 분석중 생소한 keyword 가 눈에 띄어서 posting 해 본다. 원문 : http://pyun9998.springnote.com/pages/1318976?print=1 리눅스 커널 소스에서 전역변수 뒤에 __read_mostly 라고 선언한 코드를 볼 수 있습니다. 예를 들면 이런 식이죠. static struct list_head ptype_all __read_mostly; __read_mostly 로 선언한 변수들은 말 그대로 주로 읽히기만 하는 변수들로서 __read_mostly 를 사용한 전역변수들은 실행이미지에서 인접한 주소 영역에 그룹으로 위치하게 됩니다. 이렇게 되는 이유는 SMP 시스템에서 성능을 높이기 위해서입니다. CPU 는 캐쉬라인 사이즈 .. 더보기
L1, L2 cache 와 I cache, D cache 의 관계 전에도 언급한 적이 있듯이 어떠한 instruction set 이나 data 를 읽어올때 부근에 있는 data 들을 cache 로 저장합니다. 이때 L1 cache 를 사용하게 되며 L1 cache 에 없는 내용은 L2 cache 에서 뒤지게 됩니다. L2 cache 에도 없으면 Ram 에서 해당 데이터와 주변의 값들을 읽어오는 것이지요. I cache 는 instruction 이고 D cache 는 data cache 를 말합니다. L1 은 I cache 와 D cache 를 모두 가지고 있으며, L2 는 자주 access 가 이루어 지는 D cache 만으로 이루어져 있습니다. ==> 실제 확인해 본 결과 (Havard Archithecture 의 프로세서에서) L2 cache 에 Data와 Inst.. 더보기
L1, L2 cache 원문 : http://www.bcpark.net/bbs/31751 CPU는 Central Processing Unit의 머릿글자로 이 용어에서 알수 있듯이 여러개의 장치가 모여서 CPU를 구성하고 있습니다 이 구성요소중 하나가 케시메모리인데 케시 메모리는 L1 cache와 L2 cache로 나뉩니다. L1 cache memory는 CPU가 처리하는과정에서 필요한 여러가지 계산식이나 명령코드를 저장하는 케시메모리로써 CPU에 포함되어 있습니다 반복되는 계산을 줄이는 방법이 되는 중요한 케시 입니다 L2 cache memory는 CPU와 다른 장치와의 속도차이를 개선하기 위해 사용되는 메모리인데 CPU가 연산처리를 하는동안 다음에 필요한 데이터를 미리 저장해두는 공간입니다 즉 가장빠른 CPU가 상대적으로 느.. 더보기
symbol table 로 code area 에서 함수 위치 찾기 readelf -s library.so 를 치면 symbol table 이 나온다. 9315: 000c3230 28 FUNC LOCAL DEFAULT 11 __GI_delete_module 9316: 00093188 540 FUNC LOCAL DEFAULT 11 __pathconf 9317: 0006ca08 952 FUNC LOCAL DEFAULT 11 __malloc 9318: 00059b88 236 FUNC LOCAL DEFAULT 11 _IO_padn_internal 9319: 000b4614 24 FUNC LOCAL DEFAULT 11 __read_nocancel # cat /proc/1456/maps 을 해서 나온 code 영역에서 40242000-4035b000 r-xp 00000000 8b:.. 더보기
readelf - 섹션 위치 한눈에 보기 readelf 에는 다음과 같은 기능이 있습니다. elf의 각 섹션들을 나열해 주고 크기와 속성을 보여줍니다. > readelf -l core.1455 Elf file type is CORE (Core file) Entry point 0x0 There are 79 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align NOTE 0x000a14 0x00000000 0x00000000 0x001dc 0x00000 0 LOAD 0x001000 0x2a000000 0x00000000 0x4d000 0x4d000 R E 0x1000 LOAD 0x04e000 0x2a0550.. 더보기
objdump - 실행파일에서 asm code 확인 objdump 의 여러 기능이 있지만 다음과 같은 기능이 있습니다. 바로 실행 파일에서 sam code 를 바로 확인해 볼 수 있는거지요. 옵션을 보면 source 와 매칭을 시킬 수도 있을것 같은데 좀 더 익숙해 지면 업데이트 하겠습니다. >objdump -d a.out | grep -A10 '' 08052cbc : 8052cbc: 0d c0 a0 e1 30 or $0x30e1a0c0,%eax 8052cc1: d8 2d e9 04 b0 4c fsubrs 0x4cb004e9 8052cc7: e2 38 loop 8052d01 8052cc9: 30 90 e5 00 40 a0 xor %dl,0xa04000e5(%eax) 8052ccf: e1 00 loope 8052cd1 8052cd1: 00 53 e3 add.. 더보기
linux mailing list 정리 linux 를 하면 할 수록 깊이있는 정보는 구글에서도 얻기가 힘들어 지고, 결국 mailing list 를 이용할 수 밖에 없더군요 근식이 형에게 메일링 리스트를 문의했더니 유용한 리스트들을 작업해 둔 페이지를 보내주었습니다. http://invain.homeip.net/maintainer.php 앞으로 도움이 많이 될것 같네요. 필요하신분들 참고하시기 바랍니다. 더보기
Platform_get_irq & struct resource kernel 소스를 보다보면 irq handler 를 등록하는 부분에서 다음과 같은 code 를 볼 수 있다. static int __devinit kp_probe(struct platform_device *pdev) { ... keypad->irq = platform_get_irq(pdev, 0); printk("[KEY] %s() irq = 0x%x\n", __FUNCTION__, keypad->irq); if (keypad->irq irq; goto err_disable_clk; } ... } Platform_get_irq 는 어디서 등록된 irq 정보를 가지고 오는 것일까? probe 에서 가지고 온것을 보니 분명 어딘가에서 register_device 를 한.. 더보기
RCU (read-copy update) 에 대한 이해 원문 : http://barriosstory.blogspot.com/2009/01/rcu.html RCU에 대해 이해하기 쉽게 정리한 문서가 있다. RCU에 대한 이해 아래 링크도 그림으로 잘 표현되어 있습니다. http://2005elc.elancer.co.kr/eTimes/page/eTimes_view.html?str=c2VsdW5vPTI5MDM= 더보기
struct 변수 사용 bit 한계 설정하기 다음과 같이 사용이 가능하다. struct i2c_gpio_platform_data { unsigned int sda_pin; unsigned int scl_pin; int udelay; int timeout; unsigned int sda_is_open_drain:1; unsigned int scl_is_open_drain:1; unsigned int scl_is_output_only:1; }; 이것의 의미는 해당 변수에서 오로지 N bit 만 사용하겠다는 의미 이다. 즉, 변수 사용상의 명확성을 준 것이다. 그리고 선언시에만 가능하다. 간단히 Test code 를 보자. // 각각 1, 2 ,3 bit 만 사용하도록 set struct AAA{ unsigned int a:1; unsigned int .. 더보기
Makefile 예제 자주 사용하는 Makefile 예제를 하나 올려둔다. 복사용~ CC = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc// 리눅스 머신에서 돌릴경우CC = /usr/bin/gcc CFLAGS = -Wall -lpthread -g -O0 -DLSI6410 CSRCS = ./key_test.c OBJS = $(CSRCS:.c=.o) .SUFFIXES:.c.o all: key_test cap_test: $(CC) $(CFLAGS) -o $@ $(CSRCS) clean: rm -f key_test $(OBJS) 더보기
[TIP] easy mistake casting buffer 사이즈가 다른 배열을 케스팅 하면 어떨게 될까? unsigned short (size 2 byte) 0x1234 0xabcd 0x00ff 0xff00 ==> casting char (size 1 byte) ? ? ? ? ? ? ? ? 쉽게 다음을 생각할 수 있을것입니다. 0x12 0x34 0xab 0xcd 0x00 0xff 0xff 0x00 하지만, 결과는 다르다는것.. byte ordering 의 차이가 있기 때문이지요. int i=0; unsigned short temp_data[4]={0x1234, 0xabcd, 0x00ff, 0xff00}; unsigned char* pConData = (unsigned char*)temp_data; unsigned char buf[2]; printk("[CAM].. 더보기
AtoH function 리눅스 커널에는 기본적인 함수들이 없다보니 구현해서 쓰게 된다 ;; static int ishex (char ch) { if (((ch>='0') && (ch ='a') && (ch ='A') && (ch = '0') && (ch = 'a') && (ch = 'A') && (ch 더보기
커널에서 파일 오퍼레이션 하기(File operation in Kernel) 원문 : http://blog.naver.com/netohk?Redirect=Log&logNo=80045492480 커널에서 파일 오퍼레이션 하기... (드라이버에서 펌웨어 로딩시 유용) #include #ifndef __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__ #endif #incude //#include function() { int fp; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); open("file", O_RDONLY, 0); size = lseek(fd, 0, 2); //END lseek(fd, 0, 0); //START read(..); close(fp); set_fs(fs); } [출처] 커널에서 파일 .. 더보기
Branch Prediction 비록 우리 과제에서는 disable 하기는 했지만, 이런기능도 있다는 것이 흥미롭다. 하지만, enable 했을경우 LCD에서 buffer under run 현상이 발견되어서 임베디드 과제에는 적용이 힘들지도 모르겠다.(혹은 ARM 계열에서만 발생하는 문제일 수 있다.) 원문 : http://minjang.egloos.com/503419 (2008년 6월 21일에 수정) 대부분의 고성능 CPU들은 거의 모두 Out-of-Order Execution이라고 불리는 비순차 실행을 지원하고 있다. Out-of-Order(OOO)의 목적은 하나의 스레드 내에서 최대의 병렬성을 찾는 것이다. 당연한 이야기겠지만 프로그램 코드는 프로그래머가 의도한 대로 위에서 아래로 순차적으로 실행된다. 중간에 if, for, 함수.. 더보기
svn 명령어 모음 원본 : http://blog.naver.com/binoz?Redirect=Log&logNo=40039908311 저장소 만들기 svnadmin create [디렉토리명] Import svn import (-m) . [저장소경로] 체크아웃 svn checkout [저장소경로] [workspace] checkout = co Workspace 정보 svn info [workspace] 커밋 svn commit (-m) 갱신(update) svn update : 기본으로 하위 디렉토리 모두 갱신 [ A ] 저장소에 새로 추가된 파일을 Workspace로 받아옴 [ U ] 저장소에 새 버전이 체크인 되어 Workspace의 파일을 그 버전으로 갱신함 (Workspace 파일의 버전이 체크 아웃된 이후 변경되지 .. 더보기
시나리오 별 SVN 사용법 원본 : http://imcdream.net/221 [SVN 사용 준비] svn import : Repository에 version이 붙이 않은 사본을 올리는 것. 필요하다면 intermeidate directory를 만든다. Working Copy가 없어도 바로 commit 된다. 이미 존재하는 file/tree를 subversion repository에 tracking을 시작할 때 사용한다. 1 2 3 4 5 6 7 8 9 10 11 12 $ svnadmin create /var/svn/newrepos $ svn import mytree file:///var/svn/newrepos/some/project \ -m "Initial import" Adding mytree/foo.c Adding mytre.. 더보기
내가 만들었던 휴대폰들.. 삼성전자 무선사업부라는 회사에서 일하면서 좋은점이 있다면, 내가 만든 휴대폰을 사용하는 고객들의 모습을 볼 수 있다는 것이다. 칭찬을 받으면 많은 보람이 느껴지기도 하고, 열심히 만들었는데 이름도 모르게 사라지는 폰들도 많이 있다. 지금까지 내가 제작에 참여했던 휴대폰들을 정리해 보았다. 내가 많은 부분을 작업했던 모델이다. 주력이었던 705SC보다 오히려 706SC가 더 호응이 좋아서, 개발자들을 의아하게 만들었던 상품이다. 국내에는 일명 '고아라 폰'으로 소개된 핸드폰이다. 내가 아는 형이 외관 디자인을 하고, 아시는 디자이너 분이 UI 디자인을 했다. 지금까지 일본에서 가장 많은 판매대수를 올린 제품이다. 하지만 사용상 불편함이 많은 제품이기도 하다.;; 위의 707SC에서 통신기능을 업그레이드 해.. 더보기
ARM ASM commond 해석 (LDMDB, LDMEA, STMDB, STMFD) 원문 : http://blog.naver.com/realdani?Redirect=Log&logNo=100007759984 asm 해석에 대한 내용은 볼때마다 까먹는다 ;;; 그나마 arm asm 은 간단해서 다행~ *********************************************************************** Decrement Before : 현제 가리키로 있는 곳에서 상위주소(0번지쪽으로) 가리킨후 실행(STMFD) LDMDB, LDMEA, STMDB, STMFD 는 모두 r13!,{r2-r3}였을 때 만약 r13에 !가 안붙으면 r13의 값은 변하지 않음 LD일 경우, 처음 r13이 #&14일때 마지막은 #&0C를 가리키고, r2에 Ox000000C번지의 word, r.. 더보기
fallocate system call 원문 : http://lwn.net/Articles/239738/ fallocate 는 일련된 메모리 블럭을 예약할 수 있는 시스템 콜이다. 이 system call 은 파일시스템 단위에서 지원되어야 사용할 수 있으며 현재 Ext4와 XFS에서 지원하고 있다고 한다. 향후 다양한 플렛폼 및 파일시스템에 이식 되어 널리 사용될 것이라고 한다. 현재는 이러한 기능을 사용하기 위해서는 posix_fallocate 를 사용해야 하는데 이 syscall은 메모리 블럭을 잡은후 fregmantaion 을 막기위해 0으로 체워둔다고 한다. 이러한 낭비를 막기 위해서 fallocate syscall 에 대한 필요성이 대두되고 있다. root@onegun-ubuntu:~/2_hdisk/Project/Mobibench/s.. 더보기