LED DEVICE DRIVER 2

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 LED Device Control - mmap() Jo, Heeseung 디바이스제어 디바이스제어 HBE-SM5-S4210 에장착된 Peripheral 들은다양한인터페이스로연결되어있음 베이스보드에있는 LED 와 7-Segment 는 GPIO 로직접 CPU 에연결 M3 모듈인 FPGA 모듈은 FPGA 에의해서제어되며 CPU 와호스트버스로연결되어있어서프로그램에서는메모리인터페이스로인식

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 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

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

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

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

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D> 리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

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

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

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

< 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

6주차.key

6주차.key 6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running

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

제1장 Unix란 무엇인가?

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

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

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

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

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

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

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

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,

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

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

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

More information

JAVA PROGRAMMING 실습 02. 표준 입출력

JAVA PROGRAMMING 실습 02. 표준 입출력 자바의기본구조? class HelloJava{ public static void main(string argv[]){ system.out.println( hello,java ~ ){ } } # 하나하나뜯어살펴봅시다! public class HelloJava{ 클래스정의 public static void main(string[] args){ System.out.println(

More information

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

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

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

자바 프로그래밍

자바 프로그래밍 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

슬라이드 1

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

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - lec2.ppt

Microsoft PowerPoint - lec2.ppt 2008 학년도 1 학기 상지대학교컴퓨터정보공학부 고광만 강의내용 어휘구조 토큰 주석 자료형기본자료형 참조형배열, 열거형 2 어휘 (lexicon) 어휘구조와자료형 프로그램을구성하는최소기본단위토큰 (token) 이라부름문법적으로의미있는최소의단위컴파일과정의어휘분석단계에서처리 자료형 자료객체가갖는형 구조, 개념, 값, 연산자를정의 3 토큰 (token) 정의문법적으로의미있는최소의단위예,

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 - C++ 5 .pptx

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

More information

쉽게 풀어쓴 C 프로그래밍

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

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

슬라이드 1

슬라이드 1 -Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역

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

슬라이드 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

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

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Chapter 10 포인터 01 포인터의기본 02 인자전달방법 03 포인터와배열 04 포인터와문자열 변수의주소를저장하는포인터에대해알아본다. 함수의인자를값과주소로전달하는방법을알아본다. 포인터와배열의관계를알아본다. 포인터와문자열의관계를알아본다. 1.1 포인터선언 포인터선언방법 자료형 * 변수명 ; int * ptr; * 연산자가하나이면 1 차원포인터 1 차원포인터는일반변수의주소를값으로가짐

More information

제11장 프로세스와 쓰레드

제11장 프로세스와 쓰레드 제9장자바쓰레드 9.1 Thread 기초 (1/5) 프로그램 명령어들의연속 (a sequence of instruction) 프로세스 / Thread 실행중인프로그램 (program in execution) 프로세스생성과실행을위한함수들 자바 Thread 2 9.1 Thread 기초 (2/5) 프로세스단위작업의문제점 프로세스생성시오버헤드 컨텍스트스위치오버헤드

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

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

교육자료

교육자료 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

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

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

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074> 객체지향프로그램밍 (Object-Oriented Programming) 1 C++ popular C 객체지향 (object oriented) C++ C : 상위계층언어특징 + 어셈블리언어특징 C++ : 소프트웨어개발플랫폼에객체지향개념제공 객체지향 : 자료와이들자료를어떻게다룰것인지따로생각하지않고단지하나의사물로생각 형 변수가사용하는메모리크기 변수가가질수있는정보

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

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

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

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

Microsoft PowerPoint - chap10-함수의활용.pptx

Microsoft PowerPoint - chap10-함수의활용.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

슬라이드 1 정적메모리할당 (Static memory allocation) 일반적으로프로그램의실행에필요한메모리 ( 변수, 배열, 객체등 ) 는컴파일과정에서결정되고, 실행파일이메모리에로드될때할당되며, 종료후에반환됨 동적메모리할당 (Dynamic memory allocation) 프로그램의실행중에필요한메모리를할당받아사용하고, 사용이끝나면반환함 - 메모리를프로그램이직접관리해야함

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

Microsoft PowerPoint - 2강

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

More information

슬라이드 1

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

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

쉽게 풀어쓴 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

11장 포인터

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

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

<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

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

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

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

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용

More information

11장 포인터

11장 포인터 누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리

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 자바프로그래밍 1 클래스와메소드심층연구 ( 실습 ) 손시운 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

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

Chapter_02-3_NativeApp

Chapter_02-3_NativeApp 1 TIZEN Native App April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 목차 2 Tizen EFL Tizen EFL 3 Tizen EFL Enlightment Foundation Libraries 타이젠핵심코어툴킷 Tizen EFL 4 Tizen

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

PowerPoint 프레젠테이션

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

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 - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

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

쉽게 풀어쓴 C 프로그래밍

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

More information

JAVA PROGRAMMING 실습 09. 예외처리

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

More information

17장 클래스와 메소드

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

More information