본문 바로가기
반응형

분류 전체보기176

[C] 중위연산식 후위연산식으로 바꾸기 1 오랜만에 C 연습 좀 해봅싀당 중위 표기법과 후위 표기법 1. 개념 1-1. 중위 표기법이란? 1-2. 후위 표기법이란? 2. 중위 표기식을 후위 표기식으로 바꾸는 법 2-1. 괄호가 없는 경우 2-2. 괄호가 있는 경우 3. 계산 3-1. 후위 표기식을 사칙연산하는 법 1. 개념 1- todaycode.tistory.com 후위 표기법 규칙에 대한 건 윗 블로그를 보며 복습했슴다! 일단 괄호 없이 동작하는 후위 연산자 변환 프로그램 만들어봅니다 /* 괄호 없을 때 중위 연산자 입력받아서 후위 연산자로 출력해주는 프로그램 */ #include #include #define STACKSIZE 10 int top = -1; bool isEmpty(void) { return top == -1; } bool i.. 2024. 3. 3.
[Device Driver] proc 파일시스템 사용해서 gpio 제어하기 ubuntu@ubuntu8:~/pi_bsp/drivers/p527_ledkey_proc$ cat Makefile APP := p527_ledkey_app MOD := p527_ledkey_dev SRC := $(APP).o obj-m := $(MOD).o CROSS = ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- CC := arm-linux-gnueabihf-gcc KDIR := /home/ubuntu/pi_bsp/kernel/linux PWD := $(shell pwd) default:$(APP) $(MAKE) -C $(KDIR) M=$(PWD) modules $(CROSS) cp $(MOD).ko /srv/nfs $(APP):$(SRC) $(CC) $(APP).c -.. 2024. 2. 29.
[Linux Kernel] 디바이스 드라이버 커널에 모듈로 포함하기 [Linux Kernel] 디바이스 드라이버 커널에 빌트인으로 포함하기 3가지가 있어야 커널의 빌트인 시스템을 이용해서 컴파일 할 수 있음. 1source 2kconfig 3makefile ubuntu@ubuntu8:~/pi_bsp/kernel/linux/drivers/char$ ls Kconfig mem.c random.o Makefile mem.o raspberrypi-gpiomem.c adi.c misc.c raspberry program-developers-story.tistory.com 이전 글에서 한 거는 디바이스 드라이버를 커널에 빌트인 해서 application을 작동시키는 거였고 make menuconfig로 driver -> char devices로 가서 스페이스바를 눌러 module형.. 2024. 2. 29.
[Linux Kernel] 디바이스 드라이버 커널에 빌트인으로 포함하기 3가지가 있어야 커널의 빌트인 시스템을 이용해서 컴파일 할 수 있음. 1source 2kconfig 3makefile ubuntu@ubuntu8:~/pi_bsp/kernel/linux/drivers/char$ ls Kconfig mem.c random.o Makefile mem.o raspberrypi-gpiomem.c adi.c misc.c raspberrypi-gpiomem.ko agp misc.o raspberrypi-gpiomem.mod apm-emulation.c modules.order raspberrypi-gpiomem.mod.c applicom.c mspec.c raspberrypi-gpiomem.mod.o applicom.h mwave raspberrypi-gpiomem.o broadco.. 2024. 2. 29.
[Linux Device Driver] 입출력 다중화(Poll)과 Blocking I/O를 구현한 디바이스 드라이버 지금까지 디바이스 드라이버에서 했던 모든 걸 종합해서 한번 만들어볼게유 사용한 기술: 입출력 다중화 Poll Blocking I/O ioctl 함수 커널 타이머 코드임다. ubuntu@ubuntu8:~/pi_bsp/drivers/keyled_wcm$ cat Makefile APP := keyled_app MOD := keyled_dev OBJ := $(APP).o obj-m := $(MOD).o CROSS = ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- CC := arm-linux-gnueabihf-gcc KDIR := /home/ubuntu/pi_bsp/kernel/linux PWD := $(shell pwd) default:$(OBJ) $(MAKE) -C $(KDIR.. 2024. 2. 28.
[Device Driver] 커널 타이머 GPIO제어하는 모듈 프로그램 디바이스 드라이버 프로그램으로 바꾸기 [Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 GPIO제어 이전 글에서 코드를 향상시켜봅니다. [Device Driver] 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으로 커널 타이머 인터럽트 어플리케이션 없이 insmod만으로 동작하는 모듈 프로그램으 program-developers-story.tistory.com 이전 두 글에서 진행한 kernel timer와 모듈 프로그램을 합쳐서 device file 위에 kernel timer로 진행한 모듈프로그램을 device file로 바꿔보자구~ Makefile APP := kerneltimer_app MOD := kerneltimer_dev SRC := $(APP).c obj-m :.. 2024. 2. 28.
[Linux Device Driver] 입출력 다중화 [Linux Device Driver] 블록 IO ㅇ program-developers-story.tistory.com 이전 코드의 문제점은 led를 켜고 싶으나, 잠들어 있어서 값을 읽어오지 못하는 상황이 발생하는거임. 즉, led를 켜고 싶어도 키가 안눌리면 led를 못키는 상황임. 리눅스에서 여러 장치를 open해서 어떤 data가 먼저 들어올 지 아무도 모름. 그래서 입출력 다중화를 해주는 거임. 어떨때는 키보드 값, 어떨 때는 키 값이 들어올 수 있기 때문에, 첫번째 프로세스에서 영원히 잠들지 않도록 다중 입출력을 구현해주는거임. app.c부터 살펴보자. polling에 사용되는 구조체의 생김새는 저렇고 44번 라인 - 폴링 구조체 Events의 사이즈만큼 메모리를 할당하면서 0으로 초기화 45.. 2024. 2. 28.
[Linux Device Driver] Blocking I/O [Linux Device Driver] 커널 메모리 동적 할당 및 irq매개변수를 통한 인터럽트 데이터 전달 [Linux Device Driver] Interrupt 처리 실습 [Linux Device Driver] Device Driver와 application으로 led, 버튼 제어 폴더 새로 만들고 그 안에 c코드 추가 ubuntu@ubuntu8:~/pi_bsp/drivers/p238_ledkey$ vi ledkey_app.c 일단 application부 program-developers-story.tistory.com 이전 글에서의 문제점은 잠들지 않고 지속적으로 폴링을 하고 있는 프로세스 때문에 top을 쳤을 때 cpu 점유율이 100%라는 점인데, 프로세스를 sleep 상태로 만들어서 cpu .. 2024. 2. 28.
반응형