LED DEVICE DRIVER 2

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "LED DEVICE DRIVER 2"

Transcription

1 한백전자교육사업부 안드로이드기반리눅스디바이스드라이버제작 - 한백전자 -

2 LED DEVICE DRIVER 2

3 LED 디바이스드라이버핀할당 3

4 LED 디바이스드라이버 LED 드라이버를작성하기위해다음과같이프로젝트를생성 구분 Project name Toolchains Driver File Name 내용 m2_led Other tool chain m2_led 4

5 LED 디바이스드라이버소스코드 : m2_led.c 001: #include <linux/miscdevice.h> 002: #include <asm/uaccess.h> 003: #include <linux/init.h> 004: #include <linux/module.h> 005: #include <linux/kernel.h> 006: #include <linux/fs.h> 007: #include <linux/types.h> 008: #include <linux/ioport.h> 009: #include <mach/gpio.h> 010: #include <plat/gpio-cfg.h> 011: 012: #define DRIVER_AUTHOR "hanback" 013: #define DRIVER_DESC "Led program" 014: 015: #define LED_NAME "m2_led" 016: #define LED_MODULE_VERSION "LED V1.0" 017: 018: static int m2_led_open(struct inode * inode, struct file * file){ 019: int err,i; 020: 5

6 LED 디바이스드라이버소스코드 : m2_led.c 021: for (i=0; i<7; i++) 022: { 023: err = gpio_request(exynos4_gpk3(i), "Led"); 024: 025: if (err) 026: printk("led.c failed to request GPK3(%d) \n",i); 027: 028: s3c_gpio_setpull(exynos4_gpk3(i), S3C_GPIO_PULL_NONE); 029: gpio_direction_output(exynos4_gpk3(i), 0); 030: } 032: return 0; 033: } 034: 035: static int m2_led_release(struct inode * inode, struct file * file){ 036: int i; 037: for (i=0; i<7; i++) 038: gpio_free(exynos4_gpk3(i)); 039: 040: return 0; 6

7 LED 디바이스드라이버소스코드 : m2_led.c 041: } 042: 043: static ssize_t m2_led_read(struct file * file, char * buf, size_t length, loff_t * ofs){ 044: printk("m2_led_read, \n"); 045: 046: return 0; 047: } 048: 049: static ssize_t m2_led_write(struct file * file, const char * buf, size_t length, loff_t * ofs){ 050: int ret; 051: unsigned char cbuf[8]; 052: ret = copy_from_user(cbuf,buf,length); 053: 054: gpio_direction_output(exynos4_gpk3(0), (unsigned int) cbuf[0]); 055: gpio_direction_output(exynos4_gpk3(1), (unsigned int) cbuf[1]); 056: gpio_direction_output(exynos4_gpk3(2), (unsigned int) cbuf[2]); 057: gpio_direction_output(exynos4_gpk3(3), (unsigned int) cbuf[3]); 058: gpio_direction_output(exynos4_gpk3(4), (unsigned int) cbuf[4]); 059: gpio_direction_output(exynos4_gpk3(5), (unsigned int) cbuf[5]); 060: gpio_direction_output(exynos4_gpk3(6), (unsigned int) cbuf[6]); 7

8 LED 디바이스드라이버소스코드 : m2_led.c 062: return length; 063: } 064: 065: static DEFINE_MUTEX(m2_led_mutex); 066: static long m2_led_ioctl(struct inode *inode, unsigned char cmd[], size_t length, loff_t *off_what){ 067: gpio_direction_output(exynos4_gpk3(0), (unsigned int) cmd[0]); 068: gpio_direction_output(exynos4_gpk3(1), (unsigned int) cmd[1]); 069: gpio_direction_output(exynos4_gpk3(2), (unsigned int) cmd[2]); 070: gpio_direction_output(exynos4_gpk3(3), (unsigned int) cmd[3]); 071: gpio_direction_output(exynos4_gpk3(4), (unsigned int) cmd[4]); 072: gpio_direction_output(exynos4_gpk3(5), (unsigned int) cmd[5]); 073: gpio_direction_output(exynos4_gpk3(6), (unsigned int) cmd[6]); 074: 075: return 0; 076: } 077: 078: static struct file_operations m2_led_fops = { 079:.owner = THIS_MODULE, 080:.open = m2_led_open, 8

9 LED 디바이스드라이버소스코드 : m2_led.c 081:.unlocked_ioctl = m2_led_ioctl, 082:.write = m2_led_write, 083:.release = m2_led_release, 084: }; 085: 086: static struct miscdevice m2_led_driver = { 087:.fops = &m2_led_fops, 088:.name = LED_NAME, 089:.minor = MISC_DYNAMIC_MINOR, 090: }; 092: static int m2_led_init(void){ 093: printk("driver: %s DRIVER INIT\n",LED_NAME); 094: return misc_register(&m2_led_driver); 095: } 096: 097: static void m2_led_exit(void){ 098: misc_deregister(&m2_led_driver); 099: printk("driver: %s DRIVER EXIT\n",LED_NAME); 100: } 9

10 LED 디바이스드라이버소스코드 : m2_led.c 101: 102: module_init(m2_led_init); 103: module_exit(m2_led_exit); 104: 105: MODULE_AUTHOR(DRIVER_AUTHOR); 106: MODULE_DESCRIPTION(DRIVER_DESC); 107: MODULE_LICENSE("Dual BSD/GPL"); 10

11 LED 테스트코드구성 LED 테스트코드를작성하기위하여다음과같이프로젝트를생성 구분 Project name Toolchains C File Name 내용 m2_led_test Android GCC m2_led_test 11

12 LED 테스트코드소스코드 : m2_led_test.c 001: #include <stdio.h> 002: #include <stdlib.h> 003: #include <unistd.h> 004: #include <sys/types.h> 005: #include <sys/stat.h> 006: #include <fcntl.h> 007: 008: int main(int argc, char * argv[]) { 009: int dev,i; 010: char temp,buf[8]={0}; 011: unsigned char t = 0; 012: 013: if(argc <= 1) { 014: printf("please input the parameter! ex)./test 0xff\n"); 015: return -1; 016: } 017: 018: dev = open("/dev/m2_led", O_WRONLY); 019: 020: if (dev!= -1) { 12

13 LED 테스트코드소스코드 : m2_led_test.c 021: if(argv[1][0] == 0 && (argv[1][1] == x argv[1][1] == X )) 022: { 023: temp = (unsigned short)strtol(&argv[1][2],null,16); 024: } 025: else 026: { 027: temp = atoi(argv[1]); 028: } 030: for(i=0;i<7;i++) 031: { 032: t<<=1; 033: if((temp>>i) & 1) 034: buf[i] = 1; 035: } 036: } 037: else { 038: printf( "Device Open ERROR!\n"); 039: return -1; 040: } 041: 042: write(dev,buf,7); 043: close(dev); 044: 045: return 0; 046: } 13

14 LED 테스트코드실행 프로젝트를빌드하면, 실행파일은 /data/local/tmp 폴더내에복사가완료 AndroX Studio 의 Remote Shell 을실행하여 HBE-SM7-S4412 에접속하고, 아래의명령어를입력하여실행파일을실행 > cd /data/local/tmp >./m2_led_test 14

15 LED 테스트코드실행결과 다음과같이프로그램을실행하면서인자에값을입력하면 HBE- SM7-S4412 M2 모듈의 LED 가점등되는것이확인가능 0x00~0x7F 까지입력가능 0x2F 를입력하면아래와같이 LED 가점등됨 15

16 JNI 프로그래밍실습 16

17 JNI 란? Java Native Interface 다른언어로작성된프로그램을자바에서실행할수있게연결해주는인터페이스 JNI 용도 Code Reusability Performance(speed) H/W dependent Code 17

18 JNI 란? Java 환경에서의 C 사용절차 1 단계 : Native Method 를선언하는자바클래스작성 (Wrapper) 2 단계 : 자바 Main 코드작성 3 단계 : 작성한클래스컴파일 4 단계 : javah 를사용해서 Native Method 가사용할헤더파일생성 5 단계 : C 언어로 Native Method 실제구현 6 단계 : C 로구현된 Native Method 컴파일 à 공유라이브러리만들기 7 단계 : 자바프로그램실행 18

19 Greeting 예제 [ 목표 ] 리눅스환경에서 JNI 를사용하는방법및절차를이해한다. JNI C 함수이름이어떻게만들어지는지이해한다. JNI C 함수에서자동으로생성되는인자 2 개의의미를이해한다. C 공유라이브러리만드는명령어를이해한다. JNI 실습은 PC 리눅스에서진행 VMWare 설치 Ubuntu 리눅스이미지 (VMWare 용 ) 리눅스용 gcc tool-chain 리눅스용 JDK 19

20 Greeting 예제 ; 리눅스명령어모음 # cd / # mkdir working # cd working # mkdir jni # cd jni # mkdir Greeting # cd Greeting # gedit Wrapper.java # gedit Main.java # javac Wrapper.java # javac Main.java # javah Wrapper # ls // Wrapper.h 생성 # gedit greeting.c # gcc o libgreeting.so greeting.o shared I [jni.h 위치 ] I [jni_md.h] # ls // libgreeting.so 확인 # export LD_LIBRARY_PATH=. # java Main 20

21 Greeting 예제 ; Wrapper.java 001: class Wrapper { 002: // static part. 003: static { 004: System.loadLibrary("greeting"); // libgreeting.so 005: } 006: 007: // native func. declaration 008: public native void print(); 009: } 21

22 Greeting 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: Wrapper wrapper = new Wrapper(); 004: wrapper.print(); 005: } 006: } 007: 22

23 Greeting 예제 ; greeting.c 001: #include <stdio.h> 002: #include "Wrapper.h" 003: 004: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj) 005: { 006: printf("hello, JNI!!!\n"); 007: } 008: 23

24 Greeting 예제 ; 코드설명 Wrapper.java static 블록 + native 메소드선언 System.loadLibrary() 메소드를사용하여라이브러리를로드함 라이브러리이름 greeting ß libgreeting.so ; 앞의 lib 와마지막.so 를뺀가운데이름! native 메소드 [ 접근지정자 ] native [ 반환형 ] [ 메소드이름 ]([ 인자 ]); ex) public native void print(); Main.java native 메소드호출 Java 에서는객체를통해서메소드호출가능! Wrapper 클래스타입입의객체를만들고 wrapper 객체를통해서 print() 메소드호출 24

25 Greeting 예제 ; 코드설명 greeting.c javah 를통해서생성된함수이름 check! Java 키워드 + 패키지 + Wrapper 클래스 + native 함수 Java_[ 패키지 ]_[Wrapper 클래스 ]_[native 함수이름 ](JNIEnv *, jobject, ); ex) Java_Wrapper_print(); // 패키지사용 X JNI 함수는인자가무조건두개추가! JNIEnv * ; JNI 에서사용되는함수 table 을가리키는함수 (*env)->xxx_function(env, ) 형식으로함수호출해서사용함 jobject ; native 함수를호출한객체 (java 언어의 this 와같음 ) 25

26 JniType 예제 [ 목표 ] Java 의함수인자전달방식과 C 언어의인자전달방식을이해한다. Java 기본타입 8 가지가 C 언어에서어떤타입으로바뀌는지이해한다. 객체지향언어의함수중복 (function-overloading) 을 C 언어에서는어떻게처리하는지이해한다. 인자전달방식 Java ; pass-by-value C ; call-by-value (; 자바와개념적으로똑같다!) cf) call-by-reference? 26

27 JniType 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_type"); //libjni_type.so 004: } 005: 006: public native void print(boolean b); 007: public native void print(char c); 008: public native void print(byte b, short s, int i, long l); 009: public native void print(float f, double d); 010: } 011: 27

28 JniType 예제 ; Main.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_type"); //libjni_type.so 004: } 005: 006: public native void print(boolean b); 007: public native void print(char c); 008: public native void print(byte b, short s, int i, long l); 009: public native void print(float f, double d); 010: } 011: 28

29 JniType 예제 ; jni_type.c 001: #include <stdio.h> 002: #include "Wrapper.h" 003: 004: JNIEXPORT void JNICALL Java_Wrapper_print Z(JNIEnv *env, jobject obj, jboolean b) 005: { 006: printf("boolean --> unsigned char : %s\n", (b)? "true" : "false"); 007: } 008: 009: JNIEXPORT void JNICALL Java_Wrapper_print C(JNIEnv *env, jobject obj, jchar c) 010: { 011: printf("char --> unsigned short int : %c\n", (unsigned char)c); 012: } 013: 014: JNIEXPORT void JNICALL Java_Wrapper_print BSIJ(JNIEnv *env, jobject obj, 015: jbyte b, jshort s, jint i, jlong l) 016: { 017: printf("byte --> signed char : %d\n", b); 018: printf("short --> short int : %d\n", s); 019: printf("int --> int : %d\n", i); 020: printf("long --> long long int : %lld\n", l); 29

30 JniType 예제 ; jni_type.c 021: } 022: 023: JNIEXPORT void JNICALL Java_Wrapper_print FD(JNIEnv *env, jobject obj, 024: jfloat f, jdouble d) 025: { 026: printf("float --> float : %f\n", f); 027: printf("double --> double : %f\n", d); 028: } 029: 030: 031: 30

31 JniType 예제 Java Primitive Type 논리형 boolean ; true/false 상수값을가짐. 문자형 char ; java 에서는 2byte 유니코드를사용함 정수형 byte(8bit), short(16bit), int(32bit), long(64bit) 부동소수점형 float, double ; IEEE754 <jni.h>, <jni_md.h> 내용분석 Java 기본형 JNI type 실제타입 boolean jboolean unsigned char char jchar unsigned short int byte jbyte signed char short jshort short int int jint int long jlong long long int float jfloat float double jdouble double 31

32 JniType 예제 오버로딩된메소드의구별 타입시그니처 Z B C S I J F D Lfully-qualified-class; [type (arg-types) ret-type 자바타입 boolean byte char short int long float double Fully-qualified-class Type[] Method type 32

33 JniStr 예제 [ 목표 ] Java 문자열과 C 문자열의차이점을이해한다. Java 문자열과 C 문자열을변환하는함수를사용할수있다. 33

34 JniStr 예제 자바유니코드문자열 à C 언어문자열 const char *c_str = (*env)->getstringutfchars(env, j_str, 0); 가상머신에게 C 언어문자열의사용이끝남을알리고메모리에서자원을해지 (*env)->releasestringutfchars(env, j_str, c_str); C 언어문자열 à 자바유니코드문자열 jstring java_str = (*env)->newstringutf(env, c_str); 34

35 JniStr 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_str"); // libjni_str.so 004: } 005: 006: public native void print(string str); 007: public native String getstring(); 008: public native String addstring(string s1, String s2); 009: } 010: 35

36 JniStr 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: Wrapper wrapper = new Wrapper(); 004: 005: wrapper.print("hello, world"); 006: String str = wrapper.getstring(); 007: System.out.println(str); 008: 009: System.out.println(wrapper.addString("Hello, ", "world")); 010: } 011: } 012: 36

37 JniStr 예제 ; jni_str.c 001: #include <stdio.h> 002: #include <stdlib.h> 003: #include <string.h> 004: #include "Wrapper.h" 005: 006: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jstring str) 007: { 008: const char *pstr = (*env)->getstringutfchars(env, str, 0); 009: printf("%s\n", pstr); 010: (*env)->releasestringutfchars(env, str, pstr); 011: } 012: 013: JNIEXPORT jstring JNICALL Java_Wrapper_getString(JNIEnv *env, jobject obj) 014: { 015: return (*env)->newstringutf(env, "Wonderful world"); 016: } 017: 37

38 JniStr 예제 ; jni_str.c 018: JNIEXPORT jstring JNICALL Java_Wrapper_addString(JNIEnv *env, jobject obj, 019: jstring s1, jstring s2) 020: { 021: jstring str; 022: const char *pstr1 = (*env)->getstringutfchars(env, s1, 0); 023: const char *pstr2 = (*env)->getstringutfchars(env, s2, 0); 024: 025: char *pstr = (char *)malloc(strlen(pstr1) + strlen(pstr2) + 1); 026: strcpy(pstr, pstr1); 027: strcat(pstr, pstr2); 028: str = (*env)->newstringutf(env, pstr); 029: free(pstr); 030: (*env)->releasestringutfchars(env, s1, pstr1); 031: (*env)->releasestringutfchars(env, s2, pstr2); 032: 033: return str; 034: } 035: 38

39 JniArr 예제 [ 목표 ] Java 기본형타입의배열을 C 언어에서접근해서사용할수있다. 배열을인자로받는메소드가함수중복을사용하는경우를처리할수있다. 39

40 JniArr 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_arr"); // libjni_arr.so 004: } 005: 006: public native int sum(int [] nums); 007: public native double sum(double [] nums); 008: } 009: 40

41 JniArr 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: int [] nums1 = {10, 20, 30, 40, 50}; 004: double [] nums2 = {1.0, 2.0, 3.0, 4.0, 5.0}; 005: 006: Wrapper wrapper = new Wrapper(); 007: System.out.println("int array sum : " + wrapper.sum(nums1)); 008: System.out.println("double array sum : " + wrapper.sum(nums2)); 009: } 010: } 011: 41

42 JniArr 예제 ; jni_arr.c 001: #include "Wrapper.h" 002: 003: JNIEXPORT jint JNICALL Java_Wrapper_sum 3I(JNIEnv *env, jobject obj, jintarray arr) 004: { 005: int i; 006: int sum = 0; 007: 008: int size = (*env)->getarraylength(env, arr); 009: int *parr = (*env)->getintarrayelements(env, arr, 0); 010: for (i = 0; i < size; ++i) 011: sum += parr[i]; 012: (*env)->releaseintarrayelements(env, arr, parr, 0); 013: 014: return sum; 015: } 016: 42

43 JniArr 예제 ; jni_arr.c 017: JNIEXPORT jdouble JNICALL Java_Wrapper_sum 3D(JNIEnv *env, jobject obj, jdoublearray arr) 018: { 019: int i; 020: double sum = 0.0; 021: 022: int size = (*env)->getarraylength(env, arr); 023: double *parr = (*env)->getdoublearrayelements(env, arr, 0); 024: for (i = 0; i < size; ++i) 025: sum += parr[i]; 026: (*env)->releasedoublearrayelements(env, arr, parr, 0); 027: 028: return sum; 029: } 030: 43

44 JniArr 예제 ; 코드설명 배열을인자로전달 int[] à jintarray double[] à jdoublearray 배열의크기알아내기 jint arrsize = (*env)->getarraylength(env, arr); 배열로변환하기 jint *parr = (*env)->getintarrayelements(env, arr, 0); // C 언어의배열과같이 for 문으로순차접근가능 배열변환에사용된임시메모리영역해제 (*env)->releaseintarrayelements(env, arr, parr, 0); 44

45 JniArr 예제 ; 코드설명 자바타입과 JNI 타입매칭표 자바타입 Java.lang.Object Java.lang.Class Java.lang.String Java array Object [] boolean[] byte [] char [] short [] int [] long [] float [] double Java.lang.Throwable JNI 타입 jobject Jclass Jstring jarray jobjectarray jbooleanarray jbytearray jchararray JshortArray jintarray jlongarray jflortarray jdoublearray jthrowable 45

46 JniArr2 예제 [ 목표 ] 클래스타입의배열을 C 언어에서다루는방법을이해한다. 46

47 JniArr2 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_arr2"); // libjni_arr2.so 004: } 005: 006: public native void print(string [] strs); 007: } 008: 47

48 JniArr2 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: String [] strs = { 004: "Just the way you are", 005: "Wonderful tonight", 006: "Uptown girl", 007: "knocking on the heaven's door" 008: }; 009: 010: Wrapper wrapper = new Wrapper(); 011: wrapper.print(strs); 012: } 013: } 014: 48

49 JniArr2 예제 ; jni_arr2.c 001: #include <stdio.h> 002: #include "Wrapper.h" 003: 004: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jobjectarray arr) 005: { 006: int i; 007: int size = (*env)->getarraylength(env, arr); 008: 009: for (i = 0; i < size; ++i) 010: { 011: jstring str = (*env)->getobjectarrayelement(env, arr, i); 012: const char *pstr = (*env)->getstringutfchars(env, str, 0); 013: 014: printf("%s\n", pstr); 015: (*env)->releasestringutfchars(env, str, pstr); 016: } 017: } 018: 49

50 JniArr2 예제 ; 코드설명 String [] ; jobjectarray jobjectarray 의원소 String 값을 C 언어형식으로변환 jstring str = (jstring)(*env)->getobjectarrayelement(env, objarr, i); 50

51 JniMem 예제 [ 목표 ] 클래스멤버변수 / 멤버함수접근방법을이해한다. 51

52 JniMem 예제 ; Date.java 001: class Date { 002: private int year; 003: private int month; 004: private int day; 005: 006: public Date() { 007: // this.set(0, 0, 0); 008: this.year = this.month = this.day = 0; 009: } 010: 011: public Date(int year, int month, int day) { 012: this.set(year, month, day); 013: } 014: 015: public void set(int year, int month, int day) { 016: this.year = year; 017: this.month = month; 018: this.day = day; 019: } 020: 021: public String tostring() { 022: // (yyyy/mm/dd) 023: String str = "(" + year + "/" + month + "/" + day + ")"; 024: 025: return str; 026: } 027: } 028: 52

53 JniMem 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_mem"); // libjni_mem.so 004: } 005: 006: public native void print(date d); 007: } 008: 53

54 JniMem 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: Date birthday = new Date(); 004: Date today = new Date(2013, 11, 8); 005: 006: birthday.set(2005, 8, 2); 007: 008: System.out.println("today : " + today.tostring()); 009: System.out.println("birthday : " + birthday.tostring()); 010: 011: Wrapper wrapper = new Wrapper(); 012: wrapper.print(today); 013: wrapper.print(birthday); 014: } 015: } 016: 54

55 JniMem 예제 ; jni_mem.c 001: #include <stdio.h> 002: #include "Wrapper.h" 003: 004: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jobject d) 005: { 006: jclass classtype = (*env)->getobjectclass(env, d); 007: 008: jmethodid tostringid = (*env)->getmethodid(env, classtype, 009: "tostring", "()Ljava/lang/String;"); 010: 011: jstring str = (*env)->callobjectmethod(env, d, tostringid); 012: 013: const char *pstr = (*env)->getstringutfchars(env, str, 0); 014: printf("%s\n", pstr); 015: (*env)->releasestringutfchars(env, str, pstr); 016: } 017: 018: 55

56 JniMem 예제 ; jni_mem.c 019: /* 020: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jobject d) 021: { 022: jclass classtype = (*env)->getobjectclass(env, d); 023: 024: jfieldid yearid = (*env)->getfieldid(env, classtype, "year", "I"); 025: jfieldid monthid = (*env)->getfieldid(env, classtype, "month", "I"); 026: jfieldid dayid = (*env)->getfieldid(env, classtype, "day", "I"); 027: 028: int year = (*env)->getintfield(env, d, yearid); 029: int month = (*env)->getintfield(env, d, monthid); 030: int day = (*env)->getintfield(env, d, dayid); 031: 032: printf("(%d/%d/%d)\n", year, month, day); 033: } 034: */ 035: 56

57 JniMem 예제 ; 코드설명 멤버접근하기 접근지정자무시! Private 멤버도접근가능! GetObjectClass() Jobject 타입의인자를받아, jclass 타입의값을반환 GetFieldID() jclass 타입의인자와, 변수명, 인자구성을인자로받아 jfieldid 값을반환 ex) jfieldid yearid = (*env)->getfieldid(env, classtype, "year", "I"); GetXXXField() XXX 위치에는멤버변수의타입을적는다. ex) int year = (*env)->getintfield(env, d, yearid); 57

58 JniMem 예제 ; 코드설명 GetObjectClass() Jobject 타입의인자를받아, jclass 타입의값을반환 GetMethodID() jclass 타입의인자와, 변수명, 시그너쳐를인자로받아 jmethodid 값을반환 시그너쳐 ; javap tool 을사용하면편리하게알수있음 ex) jmethodid tostringid = (*env)->getmethodid(env, classtype, "tostring", "()Ljava/lang/String;"); CallXXXField() XXX 위치에는메소드의반환타입을적는다. ex) jstring str = (*env)->callobjectmethod(env, d, tostringid); 58

59 JniMem2 예제 [ 목표 ] Has-a 관계의클래스멤버변수 / 멤버함수접근방법을이해한다. 59

60 JniMem2 예제 ; Member.java 001: class Date { 002: private int year; 003: private int month; 004: private int day; 005: 006: public Date() { 007: // this.set(0, 0, 0); 008: this.year = this.month = this.day = 0; 009: } 010: 011: public Date(int year, int month, int day) { 012: this.set(year, month, day); 013: } 014: 015: public void set(int year, int month, int day) { 016: this.year = year; 017: this.month = month; 018: this.day = day; 019: } 020: 021: public String tostring() { 022: // (yyyy/mm/dd) 023: String str = "(" + year + "/" + month + "/" + day + ")"; 024: 025: return str; 026: } 027: } 028: 60

61 JniMem2 예제 ; Wrapper.java 001: class Wrapper { 002: static { 003: System.loadLibrary("jni_mem"); // libjni_mem.so 004: } 005: 006: public native void print(member member); 007: } 008: 61

62 JniMem2 예제 ; Main.java 001: class Main { 002: public static void main(string [] args) { 003: Member member1 = new Member(); 004: Member member2 = new Member("john", 20, new Date(2013, 11, 8)); 005: member1.setname("jane"); 006: member1.setage(30); 007: member1.setregisterdate(new Date(2000, 1, 1)); 008: 009: System.out.println("member1 : " + member1.tostring()); 010: System.out.println("member2 : " + member2.tostring()); 011: 012: Wrapper wrapper = new Wrapper(); 013: wrapper.print(member1); 014: wrapper.print(member2); 015: } 016: } 017: 62

63 JniMem2 예제 ; jni_mem.c 001: #include "Wrapper.h" 002: 003: JNIEXPORT void JNICALL Java_Wrapper_print(JNIEnv *env, jobject obj, jobject member) 004: { 005: jclass memberclass = (*env)->getobjectclass(env, member); 006: 007: jfieldid nameid = (*env)->getfieldid(env, memberclass, "name", "Ljava/lang/String;"); 008: jfieldid ageid = (*env)->getfieldid(env, memberclass, "age", "I"); 009: jfieldid registerdateid = 010: (*env)->getfieldid(env, memberclass, "registerdate", "LDate;"); 011: 012: jstring name = (*env)->getobjectfield(env, member, nameid); 013: jint age = (*env)->getintfield(env, member, ageid); 014: jobject registerdate = (*env)->getobjectfield(env, member, registerdateid); 015: 016: jclass dateclass = (*env)->getobjectclass(env, registerdate); 017: jmethodid tostringid = 018: (*env)->getmethodid(env, dateclass, "tostring", "()Ljava/lang/String;"); 019: jstring date = (*env)->callobjectmethod(env, registerdate, tostringid); 020: 021: const char *pname = (*env)->getstringutfchars(env, name, 0); 022: const char *pdate = (*env)->getstringutfchars(env, date, 0); 023: 024: printf("(%s, %d, %s)\n", pname, age, pdate); 025: 026: (*env)->releasestringutfchars(env, name, pname); 027: (*env)->releasestringutfchars(env, date, pdate); 028: } 029: 63

64 디바이스제어안드로이드앱제작 64

65 LED 예제 LED 프로그램을작성하기위해다음과같이프로젝트를생성 65

66 LED 예제 추가적으로패키지와클래스, 폴더, 파일을생성 66

67 LED 예제 : uartjni 패키지 모든프로젝트들은동일하게추가적으로타깃과디바이스사이의데이터를주고받을수있는 Uart 통신을위한패키지와클래스, 파일을생성하야함 추가파일을생성하는방법은우선 com.hbe.uartjni 패키지의 UartJNI 클래스를등록하기위해 Package Explorer 에서오른쪽버튼을클릭한후, New > Class 를선택 67

68 LED 예제 : uartjni 패키지 + UartJNI.java 그림과같은창이생성되면, Package 에 com.hbe.uartjni 를입력하고, Name 에 UartJNI 를입력 패키지이름은반드시 com.hbe.uartjni 와동일하게입력 소스코드를참고하여 UartJNI.java 작성 68

69 LED : UartJNI.java 001: package com.hbe.uartjni; 002: 003: import android.util.log; 004: 005: public class UartJNI implements UartJNIListener { 006: 007: private boolean mconnectflag; 008: private UartJNIListener mmainactivity; 009: 010: static { 011: System.loadLibrary("UartJNI"); 012: } 013: 014: private native static int open(string path); 015: private native void close(); 016: private native void setled(char led); 017: 018: public UartJNI(){ 019: mconnectflag = false; 020: portopen(); 69

70 LED : UartJNI.java 021: } 022: 023: public void portopen(){ 024: if(mconnectflag) return; 025: 026: int ret = open("/dev/m2_led"); 027: if(ret==1){ 028: mconnectflag = true; 029: } else { 030: Log.d("sm7m2", "device connect failed"); 031: } 032: } 033: 034: public void portclose(){ 035: if(mconnectflag==false) return; 036: mconnectflag = false; 037: close(); 038: } 039: 040: protected void finalize() throws Throwable{ 70

71 LED : UartJNI.java 041: portclose(); 042: super.finalize(); 043: } 044: 046: public void onreceive(int val) { 047: if(mmainactivity!=null){ 048: mmainactivity.onreceive(val); 049: } 050: } 051: 052: public void setlistener(uartjnilistener a){ 053: mmainactivity = a; 054: } 055: 056: public void setled(int c1, int c2, int c3, int c4, int c5, int c6, int c7){ 057: char ch = (char)((c1&1)<<6 (c2&1)<<5 (c3&1)<<4 (c4&1)<<3 (c5&1)<<2 (c6&1)<<1 c7&1); 058: setled(ch); 059: } 71

72 LED : UartJNI.java 061: public void setled(int led){ 062: if(led>=7) setled(1,1,1,1,1,1,1); 063: else if(led>=6) setled(1,1,1,1,1,1,0); 064: else if(led>=5) setled(1,1,1,1,1,0,0); 065: else if(led>=4) setled(1,1,1,1,0,0,0); 066: else if(led>=3) setled(1,1,1,0,0,0,0); 067: else if(led>=2) setled(1,1,0,0,0,0,0); 068: else if(led>=1) setled(1,0,0,0,0,0,0); 069: else setled(0,0,0,0,0,0,0); 070: } 071: } 72

73 소스코드 UartJNIListener.java 001: package com.hbe.uartjni; 002: 003: public interface UartJNIListener { 004: public void onreceive(int val); 005: } 73

74 LED 예제 : Uart 통신 External Tools > JNI Interface 를선택후 Library name 은 UartJNI 를입력 74

75 LED 예제 : Uart 통신 Class path 는 com.hbe.uartjni.uartjni 를입력 Package Explorer 에다음과같이 jni 폴더와 UartJNI.c 파일이생성된것을확인. 소스코드를참고하여 Android.mk 와 UartJNI.c 파일작성 75

76 소스코드 UartJNI.c 001: #include <string.h> 002: #include <jni.h> 003: #include <stdio.h> 004: #include <stdlib.h> 005: #include <fcntl.h> 006: #include <unistd.h> 007: #include <termios.h> 008: #include <sys/mman.h> 009: #include <errno.h> 010: 011: int fd=0; 012: 013: JNIEXPORT jint JNICALL Java_com_hbe_uartjni_UartJNI_open(JNIEnv *env, jclass c, jstring path){ 014: jboolean iscopy; 015: const char *path_utf = (*env)->getstringutfchars(env, path, &iscopy); 016: fd = open(path_utf,o_wronly); 017: (*env)->releasestringutfchars(env, path, path_utf); 018: 019: if(fd<0) return 0; 020: else return 1; 76

77 소스코드 UartJNI.c 021: } 022: 023: JNIEXPORT void JNICALL Java_com_hbe_uartjni_UartJNI_close(JNIEnv *env, jobject o){ 024: close(fd); 025: } 026: 027: JNIEXPORT void JNICALL Java_com_hbe_uartjni_UartJNI_setBuzzer(JNIEnv *env, jobject o, jchar c){ 028: int i=(int)c; 029: write(fd, &i, sizeof(i)); 030: } 77

78 소스코드 Android.mk 001: # Copyright (C) 2009 The Android Open Source Project 002: # 003: # Licensed under the Apache License, Version 2.0 (the "License"); 004: # you may not use this file except in compliance with the License. 005: # You may obtain a copy of the License at 006: # 007: # 008: # 009: # Unless required by applicable law or agreed to in writing, software 010: # distributed under the License is distributed on an "AS IS" BASIS, 011: # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 012: # See the License for the specific language governing permissions and 013: # limitations under the License. 014: # 015: LOCAL_PATH:= $(call my-dir) 016: 017: include $(CLEAR_VARS) 018: 019: LOCAL_MODULE := UartJNI 020: LOCAL_CFLAGS := -Werror 021: LOCAL_SRC_FILES := UartJNI.c 022: 023: include $(BUILD_SHARED_LIBRARY) 78

79 LED 예제 : Uart 공유라이브러리생성 JNI 라이브러리컴파일 우측상단의 C/C++ Perspective 를선택 Project Explorer 에서변환하고자하는프로젝트를선택하고, File > New > Convert to a C/C++ Project (Adds C/C++ Nature) 를선택 79

80 LED 예제 Uart 통신및 LED 예제클래스완성 80

81 LED 예제 : 이미지추가 이미지파일복사 앱을구성하는파일을생성했다면, 앱에포함되는이미지를복사 프로젝트에서쓰이는이미지폴더는 /res/drawable-xhdpi 폴더외의이미지폴더는모두삭제 삭제해야할폴더는다음과같음 ( 삭제하지않아도무관 ) /res/drawable-hdpi /res/drawable-ldpi /res/drawable-mdpi 폴더삭제를완료하였다면, 준비한이미지파일을프로젝트의 /res/drawable-xhdpi 폴더에복사 81

82 LED 예제 Setting Password 에불이들어왔다면, 숫자일곱자리를입력하여암호를설정 숫자하나를입력할때마다 M2 모듈의 LED 가하나씩점등 모두입력하면 Input Password 에불이들어온다. Input Password 에불이들어왔을때또다시일곱자리암호를입력 숫자하나를입력할때마다 M2 모듈의 LED 가하나씩점등 입력된일곱자리암호가 Setting Password 모드에서입력된암호와동일하다면 M2 모듈의 LED 가오른쪽부터차례대로소등 암호가틀렸다면 7 개의 LED 전체가깜빡임 암호를다시설정하고싶다면하단의 Initialize Password 를터치 82

83 소스코드 M2LEDActivity.java 001: package com.hbe.m2led; 002: 003: import com.hbe.uartjni.uartjni; 004: import android.os.bundle; 005: import android.os.handler; 006: import android.os.message; 007: import android.app.activity; 008: import android.view.menu; 009: 010: public class M2LEDActivity extends Activity { 011: 012: M2LEDView mcustomview; 013: 014: UartJNI mjnidriver; 015: int[] marrsetpw = new int[7]; 016: int[] marrinputpw = new int[7]; 017: int mpwpt = 0; 018: boolean mpwok = false; 019: boolean minputlock = false; 020: 83

84 소스코드 M2LEDActivity.java 021: private Handler mhandler = new Handler(){ 023: public void handlemessage(message msg){ 024: super.handlemessage(msg); 025: if(minputlock) return; 026: if(msg.what==' '){ 027: initpw(); 028: } else { 029: if(mpwok) inputpw(msg.what); 030: else setpw(msg.what); 031: } 032: } 033: }; 034: 036: protected void oncreate(bundle savedinstancestate) { 037: super.oncreate(savedinstancestate); 038: setcontentview(r.layout.main); 039: 040: mcustomview = (M2LEDView)findViewById(R.id.custom_view); 84

85 소스코드 M2LEDActivity.java 041: mjnidriver = new UartJNI(); 042: } 043: 045: public boolean oncreateoptionsmenu(menu menu) { 046: // Inflate the menu; this adds items to the action bar if it is present. 047: getmenuinflater().inflate(r.menu.main, menu); 048: return true; 049: } 050: 051: public void setmessage(message msg){ 052: mhandler.sendmessage(msg); 053: } 054: 056: protected void onpause() { 057: mjnidriver.portclose(); 058: super.onpause(); 059: } 85

86 소스코드 M2LEDActivity.java 062: protected void onresume() { 063: mjnidriver.portopen(); 064: super.onresume(); 065: } 066: 067: private void inputpw(int p){ 068: marrinputpw[mpwpt++]=p; 069: mjnidriver.setled(mpwpt); 070: if(mpwpt>=7){ 071: for(int i=0;i<7;i++){ 072: if(marrinputpw[i]!=marrsetpw[i]){ 073: setfailurethread(); 074: mpwpt = 0; 075: return; 076: } 077: } 078: setpassthread(); 079: mpwpt = 0; 080: } 86

87 소스코드 M2LEDActivity.java 081: } 082: 083: private void setpw(int p){ 084: marrsetpw[mpwpt++] = p; 085: mjnidriver.setled(mpwpt); 086: if(mpwpt>=7){ 087: mpwok = true; 088: mpwpt = 0; 089: mcustomview.setinputmode(); 090: } 091: } 093: private void initpw(){ 094: mpwok = false; 095: mpwpt = 0; 096: mjnidriver.setled(0); 097: mcustomview.setsettingmode(); 098: } 099: 100: private void setpassthread(){ 87

88 소스코드 M2LEDActivity.java 101: PassLED thread = new PassLED(); 102: thread.start(); 103: } 104: 105: private void setfailurethread(){ 106: FailureLED thread = new FailureLED(); 107: thread.start(); 108: } 109: 110: private class PassLED extends Thread{ 112: public void run() { 113: super.run(); 114: minputlock = true; 115: try { 116: for(int i=6;i>=0;i--){ 117: Thread.sleep(100); 118: mjnidriver.setled(i); 119: } 120: } catch (InterruptedException e) { 88

89 소스코드 M2LEDActivity.java 121: e.printstacktrace(); 122: } 123: minputlock = false; 124: } 125: } 126: 127: private class FailureLED extends Thread{ 129: public void run() { 130: super.run(); 131: minputlock = true; 132: try { 133: for(int i=0;i<=3;i++){ 134: Thread.sleep(200); 135: mjnidriver.setled(7); 136: Thread.sleep(200); 137: mjnidriver.setled(0); 138: } 139: } catch (InterruptedException e) { 140: e.printstacktrace(); 89

90 소스코드 M2LEDActivity.java 141: } 142: minputlock = false; 143: } 144: } 145: 146: 147: 148: 149: } 90

91 소스코드 M2LEDView.java 001: package com.hbe.m2led; 002: 003: import android.content.context; 004: import android.content.res.resources; 005: import android.graphics.bitmap; 006: import android.graphics.bitmapfactory; 007: import android.graphics.canvas; 008: import android.graphics.paint; 009: import android.graphics.point; 010: import android.os.message; 011: import android.util.attributeset; 012: import android.view.display; 013: import android.view.motionevent; 014: import android.view.view; 015: import android.view.windowmanager; 016: 017: public class M2LEDView extends View { 018: private M2LEDActivity mcon; 019: 020: private Bitmap mimgbg, mimgledon, mimgledoff, mimgpwinit; 91

92 소스코드 M2LEDView.java 021: private Bitmap mimgtxtset, mimgtxtinput; 022: 023: private int[] mled_x, mled_y; 024: private int mpwtext_x, mpwtext_y; 025: private int mtxtset_x, mtxtset_y; 026: private int mtxtinput_x, mtxtinput_y; 027: private boolean[] mchkled; 029: Paint mpaint = new Paint(); 030: 031: // screen size 032: private int mscreenwidth, mscreenheight; 033: private double mzoomwidth, mzoomheight; 034: 035: public M2LEDView(Context context, AttributeSet attrs) { 036: super(context, attrs); 037: 038: mcon = (M2LEDActivity)context; 039: mled_x = new int[2]; 040: mled_y = new int[2]; 92

93 소스코드 M2LEDView.java 041: mchkled = new boolean[2]; 042: mchkled[0] = true; 043: mchkled[1] = false; 044: 045: initscreensize(); 046: initimagedata(); 047: initimageposition(); 048: } 049: 051: public void ondraw(canvas canvas){ 052: 053: canvas.drawbitmap(mimgbg, 0, 0, null); 054: 055: for(int i=0;i<2;i++){ 056: if(mchkled[i]) canvas.drawbitmap(mimgledon, mled_x[i], mled_y[i], null); 057: else canvas.drawbitmap(mimgledoff, mled_x[i], mled_y[i], null); 058: } 060: canvas.drawbitmap(mimgtxtset, mtxtset_x, mtxtset_y, null); 93

94 소스코드 M2LEDView.java 061: canvas.drawbitmap(mimgtxtinput, mtxtinput_x, mtxtinput_y, null); 062: canvas.drawbitmap(mimgpwinit, mpwtext_x, mpwtext_y, null); 063: } 064: 065: private void sendmessage(int what){ 066: Message msg = new Message(); 067: msg.what = what; 068: mcon.setmessage(msg); 069: } 070: 071: private boolean istouch(int touchx, int touchy, int x1, int y1, int x2, int y2){ 072: if( touchx>=x1 && touchx<=x2 && touchy>=y1 && touchy<=y2) return true; 073: else return false; 074: } 075: 077: public boolean ontouchevent(motionevent event){ 078: int x = (int)event.getx(); 079: int y = (int)event.gety(); 080: 94

95 소스코드 M2LEDView.java 081: if(event.getaction()==motionevent.action_down){ 082: int btnwidth = 150; 083: int btnheight = 145; 084: if(istouch(x, y, 120, 330, 120+btnWidth, 330+btnHeight)){ 085: sendmessage('1'); 086: } else if(istouch(x, y, 325, 330, 325+btnWidth, 330+btnHeight)){ 087: sendmessage('2'); 088: } else if(istouch(x, y, 525, 330, 525+btnWidth, 330+btnHeight)){ 089: sendmessage('3'); 090: } else if(istouch(x, y, 120, 535, 120+btnWidth, 535+btnHeight)){ 091: sendmessage('4'); 092: } else if(istouch(x, y, 325, 535, 325+btnWidth, 535+btnHeight)){ 093: sendmessage('5'); 094: } else if(istouch(x, y, 525, 535, 525+btnWidth, 535+btnHeight)){ 095: sendmessage('6'); 096: } else if(istouch(x, y, 120, 730, 120+btnWidth, 730+btnHeight)){ 097: sendmessage('7'); 098: } else if(istouch(x, y, 325, 730, 325+btnWidth, 730+btnHeight)){ 099: sendmessage('8'); 100: } else if(istouch(x, y, 525, 730, 525+btnWidth, 730+btnHeight)){ 95

96 소스코드 M2LEDView.java 101: sendmessage('9'); 102: } else if(istouch(x, y, 120, 925, 120+btnWidth, 925+btnHeight)){ 103: sendmessage('*'); 104: } else if(istouch(x, y, 325, 925, 325+btnWidth, 925+btnHeight)){ 105: sendmessage('0'); 106: } else if(istouch(x, y, 525, 925, 525+btnWidth, 925+btnHeight)){ 107: sendmessage('#'); 108: } else if(istouch(x, y, 85, 1095, 700, 1200)){ 109: sendmessage(' '); 110: } 112: invalidate(); 113: return true; 114: } 115: return super.ontouchevent(event); 116: } 117: 118: private void initscreensize(){ 119: Display display = ((WindowManager)mCon.getSystemService (Context.WINDOW_SERVICE)).getDefaultDisplay(); 120: 96

97 소스코드 M2LEDView.java 121: /* before HoneyComb 122: mscreenwidth = display.getwidth(); 123: mscreenheight = display.getheight(); 124: */ 125: 126: // after HoneyComb 127: Point point = new Point(); 128: display.getsize(point); 129: 130: mscreenwidth = point.x; 131: mscreenheight = point.y; 132: mzoomwidth = (double)mscreenwidth/(double)800; 133: mzoomheight = (double)mscreenheight/(double)1280; 134: } 135: 136: private Bitmap createimage(int r){ 137: Resources res = getresources(); 138: Bitmap imgprevconv = BitmapFactory.decodeResource(res, r); 139: int w = (int)(imgprevconv.getwidth()*mzoomwidth); 140: int h = (int)(imgprevconv.getheight()*mzoomheight); 141: return Bitmap.createScaledBitmap(imgPrevConv, w, h, true); 142: } 97

98 소스코드 M2LEDView.java 144: private Bitmap createimageallscreen(int r){ 145: Resources res = getresources(); 146: Bitmap imgprevconv = BitmapFactory.decodeResource(res, r); 147: int w = mscreenwidth; 148: int h = mscreenheight; 149: return Bitmap.createScaledBitmap(imgPrevConv, w, h, true); 150: } 151: 152: private void initimagedata(){ 153: mimgbg = createimageallscreen(r.drawable.led_bg); 154: mimgledon = createimage(r.drawable.led_on); 155: mimgledoff = createimage(r.drawable.led_off); 156: mimgpwinit = createimage(r.drawable.led_pwinit); 157: mimgtxtset = createimage(r.drawable.led_txtset); 158: mimgtxtinput = createimage(r.drawable.led_txtinput); 159: } 160: 98

99 소스코드 M2LEDView.java 161: private void initimageposition(){ 162: int halfscreen = mscreenwidth/2; 163: 164: mtxtset_x = halfscreen - mimgtxtset.getwidth() - (int)(20*mzoomwidth); 165: mtxtset_y = (int)(200*mzoomheight); 166: 167: mled_x[0] = mtxtset_x - mimgledon.getwidth() - (int)(5*mzoomwidth); 168: mled_y[0] = (int)(208*mzoomheight); 169: 170: mled_x[1] = halfscreen + (int)(20*mzoomwidth); 171: mled_y[1] = mled_y[0]; 173: mtxtinput_x = mled_x[1] + mimgledon.getwidth() + (int)(5*mzoomwidth); 174: mtxtinput_y = mtxtset_y; 175: 176: mpwtext_x = halfscreen - (mimgpwinit.getwidth()/2); 177: mpwtext_y = (int)(1120*mzoomheight); 178: } 179: 180: public void setsettingmode(){ 99

100 소스코드 M2LEDView.java 181: mchkled[0]=true; 182: mchkled[1]=false; 183: } 184: public void setinputmode(){ 185: mchkled[1]=true; 186: mchkled[0]=false; 187: } 188: } 100

101 LED 예제 : 실행화면 101

untitled

untitled Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II

More information

Microsoft PowerPoint - lab14.pptx

Microsoft PowerPoint - lab14.pptx Mobile & Embedded System Lab. Dept. of Computer Engineering Kyung Hee Univ. Keypad Device Control in Embedded Linux HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착되어있다. 2 Keypad Device Driver

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

More information

Microsoft PowerPoint - lab15.pptx

Microsoft PowerPoint - lab15.pptx Mobile & Embedded System Lab. Dept. of Computer Engineering Kyung Hee Univ. TextLCD Device Control in Embedded Linux M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App을개발 TextLCD는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210의

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

Microsoft Word - JNI.doc

Microsoft Word - JNI.doc JNI: JAVA 와 C++ 의연동 출처 : C++ for Java Programmers 저자 : Mark Allen Weiss 번역및추가 : Frank Yoon (moses@maru.net) 테스트환경 : Windows XP, Java 1.5, Visual Studio 6.0, Vim 7.x JVM 에서네이티브함수는 C 나 C++ 과같은언어로구현됩니다. JDK

More information

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID android:title= 항목제목 /> </menu> public boolean oncreateoptionsmenu(menu menu) { getme 8 차시메뉴와대화상자 1 학습목표 안드로이드에서메뉴를작성하고사용하는방법을배운다. 안드로이드에서대화상자를만들고사용하는방법을배운다. 2 확인해볼까? 3 메뉴 1) 학습하기 [ 그림 8-1] XML 을이용한옵션메뉴설정방법 public boolean

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

슬라이드 1

슬라이드 1 UNIT 7 배열 학습목표 2 배열을사용할수있다. 배열 3 배열이란? 같은타입의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;... int student_score28; int student_score29;

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 WEB SERVER PORTING 2 Jo, Heeseung WEB 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 WEB 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

PowerPoint Presentation

PowerPoint Presentation 패키지와주요클래스 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section 8 유틸리티패키지개요

More information

03장

03장 CHAPTER3 ( ) Gallery 67 68 CHAPTER 3 Intent ACTION_PICK URI android provier MediaStore Images Media EXTERNAL_CONTENT_URI URI SD MediaStore Intent choosepictureintent = new Intent(Intent.ACTION_PICK, ë

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

교육지원 IT시스템 선진화

교육지원 IT시스템 선진화 Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information

제1장 Unix란 무엇인가?

제1장  Unix란 무엇인가? 1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.

More information

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android 2 xmlns:tools=http://schemas.android. 10 차시파일처리 1 학습목표 내장메모리의파일을처리하는방법을배운다. SD 카드의파일을처리하는방법을배운다. 2 확인해볼까? 3 내장메모리파일처리 1) 학습하기 [ 그림 10-1] 내장메모리를사용한파일처리 2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Sensor Device Jo, Heeseung Sensor 실습 HBE-SM5-S4210 에는근접 / 가속도 / 컴파스센서가장착 각센서들을사용하기위한디바이스드라이버와어플리케이션을작성 2 근접 (Proximity) 센서 HBE-SM5-S4210 Camera Module 근접센서디바이스 근접센서는사물이다른사물에접촉되기이전에가까이접근하였는지를검출할목적으로사용 일반적으로생활에서자동문이나엘리베이터,

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

Microsoft PowerPoint - C++ 5 .pptx

Microsoft PowerPoint - C++ 5 .pptx C++ 언어프로그래밍 한밭대학교전자. 제어공학과이승호교수 연산자중복 (operator overloading) 이란? 2 1. 연산자중복이란? 1) 기존에미리정의되어있는연산자 (+, -, /, * 등 ) 들을프로그래머의의도에맞도록새롭게정의하여사용할수있도록지원하는기능 2) 연산자를특정한기능을수행하도록재정의하여사용하면여러가지이점을가질수있음 3) 하나의기능이프로그래머의의도에따라바뀌어동작하는다형성

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 8 장클래스와객체 I 이번장에서학습할내용 클래스와객체 객체의일생직접 메소드클래스를 필드작성해 UML 봅시다. QUIZ 1. 객체는 속성과 동작을가지고있다. 2. 자동차가객체라면클래스는 설계도이다. 먼저앞장에서학습한클래스와객체의개념을복습해봅시다. 클래스의구성 클래스 (class) 는객체의설계도라할수있다. 클래스는필드와메소드로이루어진다.

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

슬라이드 1

슬라이드 1 / 유닉스시스템개요 / 파일 / 프로세스 01 File Descriptor file file descriptor file type unix 에서의파일은단지바이트들의나열임 operating system 은파일에어떤포맷도부과하지않음 파일의내용은바이트단위로주소를줄수있음 file descriptor 는 0 이나양수임 file 은 open 이나 creat 로 file

More information

자바 프로그래밍

자바 프로그래밍 5 (kkman@mail.sangji.ac.kr) (Class), (template) (Object) public, final, abstract [modifier] class ClassName { // // (, ) Class Circle { int radius, color ; int x, y ; float getarea() { return 3.14159

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 1,..... @ 1 Green Project 1991 Oak Java 1995. 5 December '90 by Patrick Naughton, Mike Sheridan and James Gosling Embedded in various consumer electronic device 1992. 9. 3 Star 7 1993 www portability

More information

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation=vertical > 4 <ImageView 7 차시이미지처리 1 학습목표 이미지뷰를사용하는방법을배운다. 비트맵을사용하는방법을배운다. 2 확인해볼까? 3 이미지뷰와이미지버튼 1) 학습하기 [ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 4

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 인터페이스, 람다식, 패키지 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 홈네트워킹 public interface RemoteControl { public void turnon(); // 가전제품을켠다. public void turnoff(); // 가전제품을끈다. 인터페이스를구현 public class Television

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 11 장상속 이번장에서학습할내용 상속이란? 상속의사용 메소드재정의 접근지정자 상속과생성자 Object 클래스 종단클래스 상속을코드를재사용하기위한중요한기법입니다. 상속이란? 상속의개념은현실세계에도존재한다. 상속의장점 상속의장점 상속을통하여기존클래스의필드와메소드를재사용 기존클래스의일부변경도가능 상속을이용하게되면복잡한 GUI 프로그램을순식간에작성

More information

슬라이드 1

슬라이드 1 UNIT 6 배열 로봇 SW 교육원 3 기 학습목표 2 배열을사용핛수있다. 배열 3 배열 (Array) 이란? 같은타입 ( 자료형 ) 의여러변수를하나의묶음으로다루는것을배열이라고함 같은타입의많은양의데이터를다룰때효과적임 // 학생 30 명의점수를저장하기위해.. int student_score1; int student_score2; int student_score3;...

More information

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

Microsoft PowerPoint - chap13-입출력라이브러리.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

5장.key

5장.key JAVA Programming 1 (inheritance) 2!,!! 4 3 4!!!! 5 public class Person {... public class Student extends Person { // Person Student... public class StudentWorker extends Student { // Student StudentWorker...!

More information

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 이중포인터란무엇인가? 포인터배열 함수포인터 다차원배열과포인터 void 포인터 포인터는다양한용도로유용하게활용될수있습니다. 2 이중포인터

More information

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi

More information

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx 2018 학년도 1 학기 JAVA 프로그래밍 II 514760-1 2018 년봄학기 5/10/2018 박경신 Lab#1 (ImageTest) Lab#1 은영상파일 (Image) 을읽어서정보를출력 Java Tutorials Lesson: Working with Images https://docs.oracle.com/javase/tutorial/2d/images/index.html

More information

( )부록

( )부록 A ppendix 1 2010 5 21 SDK 2.2. 2.1 SDK. DevGuide SDK. 2.2 Frozen Yoghurt Froyo. Donut, Cupcake, Eclair 1. Froyo (Ginger Bread) 2010. Froyo Eclair 0.1.. 2.2. UI,... 2.2. PC 850 CPU Froyo......... 2. 2.1.

More information

61 62 63 64 234 235 p r i n t f ( % 5 d :, i+1); g e t s ( s t u d e n t _ n a m e [ i ] ) ; if (student_name[i][0] == \ 0 ) i = MAX; p r i n t f (\ n :\ n ); 6 1 for (i = 0; student_name[i][0]!= \ 0&&

More information

C++ Programming

C++ Programming C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator

More information

11장 포인터

11장 포인터 Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함

More information

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프

OpenCV와 함께하는 컴퓨터 비전 프로그래밍 캠프 OpenCV 와함께하는컴퓨터비전프로그래밍캠프 Appx. 안드로이드 OpenCV 프로그래밍 Last Update: 2018/06/07 Visual C++ 영상처리프로그래밍 저자 황선규 / 공학박사 sunkyoo.hwang@gmail.com 모바일컴퓨터비전프로그래밍 목차 Android 개요 Android 개발환경구축 Android Studio 설치 OpenCV

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 3 장함수와문자열 1. 함수의기본적인개념을이해한다. 2. 인수와매개변수의개념을이해한다. 3. 함수의인수전달방법 2가지를이해한다 4. 중복함수를이해한다. 5. 디폴트매개변수를이해한다. 6. 문자열의구성을이해한다. 7. string 클래스의사용법을익힌다. 이번장에서만들어볼프로그램 함수란? 함수선언 함수호출 예제 #include using

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 배효철 th1g@nate.com 1 목차 표준입출력 파일입출력 2 표준입출력 표준입력은키보드로입력하는것, 주로 Scanner 클래스를사용. 표준출력은화면에출력하는메소드를사용하는데대표적으로 System.out.printf( ) 를사용 3 표준입출력 표준출력 : System.out.printlf() 4 표준입출력 Example 01 public static void

More information

Microsoft PowerPoint - 2강

Microsoft PowerPoint - 2강 컴퓨터과학과 김희천교수 학습개요 Java 언어문법의기본사항, 자료형, 변수와상수선언및사용법, 각종연산자사용법, if/switch 등과같은제어문사용법등에대해설명한다. 또한 C++ 언어와선언 / 사용방법이다른 Java의배열선언및사용법에대해서설명한다. Java 언어의효과적인활용을위해서는기본문법을이해하는것이중요하다. 객체지향의기본개념에대해알아보고 Java에서어떻게객체지향적요소를적용하고있는지살펴본다.

More information

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770> 연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Linux Kernel and Device Driver Jo, Heeseung 커널과의관계 시스템이지원하는하드웨어를응용프로그램에서사용할수있도록커널에서제공하는라이브러리 응용프로그램이하드웨어를제어하려면커널에자원을요청 - 응용프로그램에서는 C 라이브러리같은함수를호출 - 라이브러리내부에서는커널에게시스템콜을호출 - 커널로제어가넘어가게되면 ( 커널모드 ) 를통해서하드웨어를제어

More information

untitled

untitled - -, (insert) (delete) - - (insert) (delete) (top ) - - (insert) (rear) (delete) (front) A A B top A B C top push(a) push(b) push(c) A B top pop() top A B D push(d) top #define MAX_STACK_SIZE 100 int

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 3 장 : 변수와데이터형 2012 년 이은주 학습목표 변수와상수의개념에대해알아본다. 리터럴상수, 매크로상수, const 변수에대해알아본 다. C 언어의데이터형에대해알아본다. 2 목차 변수와상수 변수 상수 데이터형 문자형 정수형 실수형 sizeof 연산자 3 변수와상수 변수 : 값이변경될수있는데이터 상수 : 값이변경될수없는데이터

More information

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a 6 장복사생성자 객체의생성과대입객체의값에의한전달복사생성자디폴트복사생성자복사생성자의재정의객체의값에의한반환임시객체 C++ 프로그래밍입문 1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y;

More information

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345]) 클래스의응용 클래스를자유자재로사용하자. 이장에서다룰내용 1 객체의치환 2 함수와클래스의상관관계 01_ 객체의치환 객체도변수와마찬가지로치환이가능하다. 기본예제 [7-1] 객체도일반변수와마찬가지로대입이가능하다. 기본예제 [7-2] 객체의치환시에는조심해야할점이있다. 복사생성자의필요성에대하여알아보자. [ 기본예제 7-1] 클래스의치환 01 #include

More information

chap7.key

chap7.key 1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

09-interface.key

09-interface.key 9 Database insert(record r): boolean find(key k): Record 1 Record getkey(): Key * Record Key Database.? Key equals(key y): boolean Database insert(record r): boolean find(key k): Record * Database OK 1

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 손시운 ssw5176@kangwon.ac.kr 실제세계는객체로이루어진다. 2 객체와메시지 3 객체지향이란? 실제세계를모델링하여소프트웨어를개발하는방법 4 객체 5 객체란? 객체 (Object) 는상태와동작을가지고있다. 객체의상태 (state) 는객체의특징값 ( 속성 ) 이다. 객체의동작 (behavior) 또는행동은객체가취할수있는동작

More information

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어 개나리 연구소 C 언어 노트 (tyback.egloos.com) 프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어먹고 하더라구요. 그래서,

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

Microsoft PowerPoint 자바-기본문법(Ch2).pptx 자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 Power Java 제 9 장생성자와접근제어 이번장에서학습할내용 생성자 정적변수 정적메소드 접근제어 this 클래스간의관계 객체가생성될때초기화를담당하는생성자에대하여살펴봅니다. 생성자 생성자 (contructor): 객체가생성될때에필드에게초기값을제공하고필요한초기화절차를실행하는메소드 생성자의예 class Car { private String color; // 색상

More information

17장 클래스와 메소드

17장 클래스와 메소드 17 장클래스와메소드 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 1 / 18 학습내용 객체지향특징들객체출력 init 메소드 str 메소드연산자재정의타입기반의버전다형성 (polymorphism) 박창이 ( 서울시립대학교통계학과 ) 17 장클래스와메소드 2 / 18 객체지향특징들 객체지향프로그래밍의특징 프로그램은객체와함수정의로구성되며대부분의계산은객체에대한연산으로표현됨객체의정의는

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스와메소드심층연구 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 접근제어 class A { private int a; int b; public int c; // 전용 // 디폴트 // 공용 public class Test { public static void main(string args[]) { A obj = new

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Microsoft PowerPoint - Chapter_04.pptx

Microsoft PowerPoint - Chapter_04.pptx 프로그래밍 1 1 Chapter 4. Constant and Basic Data Types April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 기본자료형문자표현방식과문자자료형상수자료형변환 기본자료형 (1/8) 3 변수 (Variables)

More information

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요 9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요 [ 그림 9-1] 시간예약앱 활동과정 - 2 - [ 그림 9-2] 안드로이드 SDK Manager [ 예제 9-1]main.xml 1

More information

/chroot/lib/ /chroot/etc/

/chroot/lib/ /chroot/etc/ 구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어

More information

chap 5: Trees

chap 5: Trees 5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경

More information

untitled

untitled int i = 10; char c = 69; float f = 12.3; int i = 10; char c = 69; float f = 12.3; printf("i : %u\n", &i); // i printf("c : %u\n", &c); // c printf("f : %u\n", &f); // f return 0; i : 1245024 c : 1245015

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

Microsoft PowerPoint - chap11-포인터의활용.pptx

Microsoft PowerPoint - chap11-포인터의활용.pptx #include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에

More information

PowerPoint Presentation

PowerPoint Presentation #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 변수와상수의개념에대해알아본다.

More information

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다. Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:

More information

12-file.key

12-file.key 11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,

More information

02장.배열과 클래스

02장.배열과 클래스 ---------------- DATA STRUCTURES USING C ---------------- CHAPTER 배열과구조체 1/20 많은자료의처리? 배열 (array), 구조체 (struct) 성적처리프로그램에서 45 명의성적을저장하는방법 주소록프로그램에서친구들의다양한정보 ( 이름, 전화번호, 주소, 이메일등 ) 를통합하여저장하는방법 홍길동 이름 :

More information

1

1 1 1....6 1.1...6 2. Java Architecture...7 2.1 2SDK(Software Development Kit)...8 2.2 JRE(Java Runtime Environment)...9 2.3 (Java Virtual Machine, JVM)...10 2.4 JVM...11 2.5 (runtime)jvm...12 2.5.1 2.5.2

More information

JAVA PROGRAMMING 실습 05. 객체의 활용

JAVA PROGRAMMING 실습 05. 객체의 활용 public class Person{ public String name; public int age; } public Person(){ } public Person(String s, int a){ name = s; age = a; } public String getname(){ return name; } @ 객체의선언 public static void main(string

More information

JMF3_심빈구.PDF

JMF3_심빈구.PDF JMF JSTORM http://wwwjstormpekr Issued by: < > Revision: Document Information Document title: Document file name: Revision number: Issued by: JMF3_ doc Issue Date:

More information

컴파일러

컴파일러 YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",

More information

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2 제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.

More information

PowerPoint Presentation

PowerPoint Presentation Class : Method Jo, Heeseung 목차 section 1 생성자 (Constructor) section 2 생성자오버로딩 (Overloading) section 3 예약어 this section 4 메소드 4-1 접근한정자 4-2 클래스메소드 4-3 final, abstract, synchronized 메소드 4-4 메소드반환값 (return

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information