FW 심화 과정/[2] STM32심화실습 35

0722 브레드 보드의 스위치, LED를 GPIO로 제어하기

Register 역할 RCC_AHB1ENR GPIO 사용을 위한 클록 설정 사용 원하는 핀 번호 1로 설정 GPIOx_MODER 입출력을 설정해주는 레지스터 00 : INPUT 01 : GPO MODE 정해진 MODE를 토대로 핀 번호당 2비트씩 설정해준다 GPIOx_IDR 전기적 상태 확인이 가능 GPIOx_ODR 핀번호마다 전기적 신호 변경이 가능 #include //#include "stm32f4xx.h" #define rRCC_AHB1ENR (*(int *)0x40023830) // -> GPIO CLK ON #define rGPIOE_MODER (*(int *)0x40021000) // -> LED와 연결된 핀 #define rGPIOE_ODR (*(int *)0x40021014) #define..

0721 외부변수참조 / .h / CPU구조 / reg와argument / 슈도명령어 ~234

extern int DoAdd(int, int); // -> 생략가능 extern float DoAddFloat(float, float); int main() { printf("%d \r\n", DoAdd(3,4)); printf("%f \r\n", DoAddFloat(0.5, 1.5)); } int DoAdd (int a, int b) { return (a+b); } float DoAddFloat(float a, float b) { return(a+b); } - main문에서, int형 함수인 extern DoAdd 선언 구문은 생략이 가능하나, float DoAddFloat 실수형 함수 선언 구문은 생략 불가 - 그 이유는, 메모리상 정수형 저장과 실수형 저..

0720 포인터,배열의 동작구조 / 함수포인터 / 구조체 / union ~176

* 심볼 = 전역변수, 함수 * 포인터는 주소값을 가지므로 자료형에 상관없이 항상 4B크기로 고정 p.108, 110 실습 #include #include "ARMCM3.h" #include "core_cm3.h" // #define SQUARE(x)((x)*(x)) int fputc(int c, FILE *f) { return ITM_SendChar(c); } int array[8]; char buf[10] = {0,1,2,3,4,5,6,7,8,9}; unsigned int * paddr; int main(void) { //1. int *p = (int *) array; *p = -1; *(p+1) = 0x11111111; // p+1 주소내의 값 변경 *p++ = 0x22222222; // p주소 내..

0720 형식지정자(typedef) / 매크로 ~84

선언 typedef struct student { char name[16]; int age; }student_t; 정의 -> 메모리 할당 student_t st0; # 전처리기 - 컴파일러 시작 전 처리되는 작업 - '#' 지시어로 시작 - #define, #if, #ifdef, #undef, #pragma, #include - 매크로전처리기 유의 #define SQUARE(x*x) 라고 정의했을때, SQUARE(2+3)은 25가 아닌 11로 출력. 그 이유는 2+2*3+3 으로 처리되기 때문. 정상적인 작동을 위해서는 #define SQUARE((x)*(x)) 라고 정의해야 함. # 조건 컴파일 #if(1) ... # else ... #endif - 조건 컴파일 예시 #define DEBUG_1 #if..

0719 스택 / keil메모리값변화 / 포인터 ~64

# 정수형 표현 방법 unsigned char a; -> [0, 255] char a; -> [-128, 127] 카운트 업하면서 값 살펴보면 signed 는 128이 -1이 됨. 근데 메모리에서 살펴보면 둘 값은 똑같이 찍힘 ∴ 메모리까지는 signed도 unsigned처럼 쭉 증가하지만, 값이 출력되는 과정에서 부호 판단하고 출력 # 변수 영역 (변수 표현을 위해 사용되는 메모리 영역) 함수, 전역변수 -> symbol -> mapfile 확인 지역변수 -> symol아니므로 mapfile에 기록 x const 자료형으로 선언된 변수들은 나중에 값 수정이 안된다. 따라서 ROM영역에 할당됨 지역변수, 전역변수는 RAM, register에 할당됨 지역변수는 보통 레지스터에 할당되는데, 레지스터를 모두 ..

0718 16진수용량계산 / ROM,RAM / Keil

4번째 발표를 오전에 마무리하고 오후에는 cortex 를 다루기 위한 이론강의를 진행. # 선언 컴파일러에게 해당 실체의 타입과 이름을 (단순히) 알려주는 동작 # 정의 실체를 위한 메모리 영역이 확보딤 1KB = 2^10 1MB = 2^20 = 0x100000 1GB = 2^30 1TB = 2^40 = 0x10000000000 (10개) # 16진수 용량 계산 0쓸때마다 4씩 소거, 4로 소거가 안되면 2^n해서 msb에 붙이기 2K = 2^11K = 0x800 8K = 2^13K = 0x2000 16K = 2^14K = 0x4000 32K = 2^15K = 0x8000 64K = 2^16K = 0x10000 50k = 32k + 16k + 2k = 0x8000 + 0x4000 + 0x800 = 0xC..

0715 웹 서버 기반 하드웨어 제어

- 라즈베리파이 보드 빵판 21번 핀에 led를 연결해놓고, 웹서버에서 ON/OFF 버튼으로 LED를 껐다 켰다 하는 프로그램 import RPi.GPIO as GPIO from flask import Flask, render_template app=Flask(__name__) GPIO.setmode(GPIO.BCM) GPIO.setup(21,GPIO.OUT) def led_on(): GPIO.output(21,0) return def led_off(): GPIO.output(21,1) return @app.route('/') def index(): led_off() return render_template('index.html',state='OFF') @app.route('/on/') def on():..

0715 인터럽트 / I2C를 이용한 가속도센서

# PIC : Programmable Interrupt Controller 다양한 장치에서 인터럽트를 요청하면 PIC는 이런 요청들에 대해 우선순위를 매기며 현재 인터럽트 처리중인 장치와 인터럽트 요청한 장치들을 관리 # IRQ line 하드웨어에서 인터럽트 신호를 위한 메커니즘. CPU로부터 서비스를 원할 때 장치는 IRQ라인에 신호를 보내고 기다린다. # 인터럽트 처리 과정 IRQ(인터럽트) -> 문맥 백업 -> ISR 인터럽트 처리 -> 문맥 복구 # I2C SPI처럼 하나의 Master와 다수의 Slave 장치들로 구성되어 있음. (Master는 클록 생성 장치) SPI와 달리 2개의 신호선으로 구성되어 있음 1. SCL (Clock) 2. SDA (Data/Address) (i2c는 무전기같은 ..

[4주차 세미나] 포트포워딩 분석

들어오고 나가는 inout 코드를 보고 포트번호는 사용자가 설정할 수 있다. ip는 하나고 포트는 여러개가 될 수 있다. - 흔히 쓰이는 port번호 HTTP : 80 HTTOS : 443 SSH : 22 FTP server : 21 # 많은 쓰이는 port들은 전세계적으로 정해진 형식이 있다 Well-known ports # 열어놓는 포트 많이 쓰이는 포트들은 열어놓는다. 따라서 많이 쓰이는 포트로 위장해서 접근 가능한 경우가 있음. ** 같은 사설망에 있으면 포트포워딩 필요없음 **점선 : 포트포워딩 설정할 쪽 LGAMD 노트북에서 3000번 포트를 쓰는 소켓프로그램을 실행하면 해당 포트가 열린다. 같은 네트워크의 ASUS노트북에서 3000번 포트로 접속할때 내부망이므로 포트포워딩이 필요하지 않고 바..