728x90
반응형
<시스템제어::로봇제어>✔
----------------------------------------------------------------<Linux>✔
================================================================
플라스크 기반의 GPIO 포트 제어 <211p : 우리가 할수있다.>
디바이스 드라이버 : 리눅스지 라즈베리 파이가 아니다.
기본 내용을 다룬이유가 뒤의 스마트홈 때문이다.
<웹페이지를 통해 LED제어>
<서버 프로그램 leds.py>
----------------------------------------------------------------
from flask import Flask, render_template, request |
<main.html>
----------------------------------------------------------------
<html> |
----------------------------------------------------------------
✔ 스마트홈
- 홈네트워크 규격이다.
✔ 론워크
- 아주 독특하다
- 론회사가 만든것은 옛날같은경우 와이파이는 상상하기 힘들었다. 라스베가스에선 상상도 못해..
예를 들면 1) 그당시 개념으로 선풍기 : 선을 추가하지 않고 무선도 쓰면서 선풍기 제어할것을 고안.
- 220v 60Hz
- 교류주파수로 전기가 공급
- 폰도 같은데..
* 케리어 (운반하다)
- 핸드폰주파수 : 800~900MHz 케리어 주파수 (통신의 내용을 들고 다니는 주파수)
* 자체가 신호가 아니고 신호를 운반하는 주파수.
예를 들면 2)
- 파도 : 케리어
- 보드 : 목소리(데이터)
* 목소리와 파도는 같지 않다.
- 보드를 운반하는 파도
✔ 주파수를 변형시킨다 : 변조
- 주파수를 변조해서 보내면 받는쪽에서 파도를 빼버리면 보드만 남는다 복조라한다.
변조 : modulation
복조 : demodulation
모뎀 : 변조와 복조를 합한 단어
예를 들면 3) '---' *
- 무전기 케리어에 우리목소리가 변조되어 실리고 상대방 케리어만 뜯어내고 목소리를 듣는다.
✔ 기존의 선을 가설할 필요없이 전기만 있으면 모든 장치를 제어한다 = 론칩.
- 론해서 론칩만 구성하면 다할수있다.
- 론용 소켓만 사서 (멀티텝) 앱이나 컴터를 터치하면 형광등에 장치 만 꽂으면 됨.
- 론도 와이파이를 지원한다.
예를 들면 4 두꺼비집)
- 이집 옆집 신호가 섞이므로 두꺼비집 에서밖으로 나가는 신호를 다먹어버리고, 박에서 들어오는 신호도 다먹어버린다.
- 외부에 인터넷망하고 론을 두개꽂고 그론이 방의 전기를 다제어하면 외부에서 다 제어한다.
... 다만 60헤르츠라
- 케리어는 주파수가 높아지는 이유가 많이 싣기위해사용한다.
- 통신주파수는 높아져 간다
* 단점: 전파가 빛의 성질을 가지고있는데 LED를 종이로 가리면 센다. 마분지로 가리면 안센다. 이러한 빛의성질을 그대로가져간다.
- 주파수는 지하에서도 잘통한다.
- PCS는 탁트인데는 괜찬은데 구불구불하거나 지하로 들어가면 잘안통한다.
- 기지국을 많이 세워야한다.. 이런개념으로 보면 결국 유선이다. (기지국 - 다른기지국 연결은 결국 유선이다. )
* 전화기 : 모듈레이션 - 디모듈레이션
(전쟁기술은 창과 방패 모순에서 생겨난다. 하나가 발전하면 안티가 발전한다. 워가 발전하면 안티워가 뱔전)
- 이런식으로 홈네트워크가 활용되어있고, 활용되어간다.
* 목소리 요금제 -> 데이터 요금제로 넘어가야하는데. 차단된 상태,,,그래서 가격을 올림. 융..
<221>요장치들을 그룹.. 알고만 있자 그림.
✔ 집에 사람이 있다는 감지. 센서를 이용
* 감지센서: 레이저식
- SPI
- 현관용 센서 : 빨간불깜빡이는것은 뭔가가있다. 사람이있다. 내가 사람인지 확인할수 있다.
- 전원만인가하면 빨간불 이 켜진다. LED 인터럽트다 10초안에 누가있는지 없는지 확인이 된다.
- 센서모듈이 많다. 그럴싸하게만 보이면 된다.
내일은 오른쪽
<223>
까만것 : 릴레이 이다.
트랜지스터 사용해서 223해본다.
- 티비 (적외선 센서) : 적외선을 맞추어야 동작한다.
- 지그비(방향성이 없는것은) 그냥 되고.,
<ASM>✔
================================================================
- 제일 처음이 Code영역.
- Code 영역에서 2000byte 떨어진곳이 data영역.
- 제일 끝 : stack영역
✔ TempState의 멤버변수들
esp = vpStack // .exe 실행하기 위함.
eip = vpCode // heap영역을 stack영역처럼 활용하기 위함.
eax = &stOldState 를 대입. // 돌아가기 위함.
----------------------------------------------------------------
<실행함수 go>
void go(void) ---------------------------------------------------------------- |
✔ ldst(&stTempState)를 호출 시 어샘블리 코드로 번역되었을때
스택은 함수인자로 &stTempState가 호출 되어 push &stTempState가 되어서 스택에 들어간다.
return Address가 스택에 push되고 esp는 return address를 가리킨다.
✔ ldst의 기능에 의해 실제 CPU의 레지스터들은 TempState가 가지고 있는 값들을 받게 된다.
CPU의
esp는 vpStack
eip 는 vpCode
eax는 &stOldState 를 가리킨다.
* CPU의 eip가 vpCode를 가리키는 것.
- 코드영역을 가리키는 eip가 Heap영역의 Code영역에 적재 시켜둔 t1.exe의 Code영역을 가리킨다. 즉, t1.exe 가 실행된다.
void smart()
{
int iNum = 100;
return;
}
ldst(&stTempState);를 호출하고 Init함수를 호출하면
* push eax 로 eax가 가지고 있던 &oldState가 스택에 들어간다.
----------------------------------------------------------------
<call _smart>
* 다음 call _smart하면 _smart의 return address가 들어간다.
- smart함수는 C언어 함수로 엔트리 코드가 먼저 동작한다.
- ebp가 푸쉬되는데 현재 CPU의 ebp값은 0이라서 0이 들어간다.
- 함수내 사용되는 변수가 스택에 들어간다.* esp는 100을 가리킴.
- 그리고 exit코드가 동작.
- mov esp ebp로 둘다 같은위치를 가리키게 되고 pop ebp가 된다.
- eip값 복구 : esp는 eax를 가리킴.
<call _ldst>
* ldst는 인자있는 함수로 인자가 미리 스택에 들어가 있어야 한다.
- 이 시점에 esp가 가리키는 위치인 eax(&oldState)는 그 값자체가 _ldst의 함수인자가 된다.
- ldst(&oldState)가 수행된다. stst함수 바로 다음위치로 프로그램이 실행된다는 뜻이다.
----------------------------------------------------------------
✔ 힙영역을 돌면서 낙서(우리가 수행한 흔적)를 해놨다.
-> 스택숫자에 변화가 생긴다. 즉, 우리가 다른 프로그램을 수행시킬수 있다는 의미가 된다.
stst : 호출 시점
ldst : Go를 치면 ldst가 호출된다.
돌아가는 방향 (빨간 화살표)에 흐름을 끊고 프로그램을 넣으면 새로운 스택을 구축하고 새로운스택을 사용토록 유도하면
우리가 제어 할수 있는 범위내 프로그램 안에서 동작한다.
✔ 보인기능 끄는 옵션
* GS : 보안 옵션
* - (마이너스) : 끄라는 의미
----------------------------------------------------------------
<원본>
cl /c /GS- smart1.c
link /subsystem:console /entry:init /nodefaultlib /out:smart1.exe /base:0x520000 init.obj monitor.obj smart1.obj
link /subsystem:console /entry:init /nodefaultlib /out:smart1.exe /base:0x520000 init.obj monitor.obj smart1.obj
----------------------------------------------------------------
link
/subsystem:console
/entry:init // 실행파일 = init+smart
/nodefaultlib // 라이브러리 없이 사용
/out:smart1.exe // 최종 파일 명
/base:0x520000 init.obj monitor.obj smart1.obj // 코드영역의 주소가 되어야 한다. 동적할당때문에 바뀌므로 실핼시마다 바꿔줘야한다.
----------------------------------------------------------------
✔ 위 명령자체가 메인 프로그램에 load 할 smart1.exe를 만드는 것이다.
- 실행파일은 init+smart 가 링크되어 만들어지므로 엔트리 포인트가 init이 된다.
- main 엔트리 포인트 아니다.
- init함수에서 메인을 호출한다. main.c는 운영체제다.
- 운영체제가 ldst를 써서 init함수를 호출한다.
* init함수 : 내부적으로 스마트를 호출하고 원래대로 되돌리는 ldst를 호출한다.
✔ 태스크스위칭
- 실행중간중간 stop시키게 작업하는...
예를 들면) T1, T2, T3을 만들어 T1을 실행시키고 stop , 실행정보를 남기고 다시 T2를 실행..T3..T1..T2.. main이 운영체제기법
* 잘못된 부분이 있으면 말씀좀..
<회로>✔
----------------------------------------------------------------
취업상담.
728x90
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151027_context switching소스파일[안향진] (0) | 2015.10.27 |
---|---|
20151027 - 5번 - 김성주 - 어셈블리 소스 파일 (0) | 2015.10.27 |
20151027_ContextSwitchig_소스&결과 (0) | 2015.10.27 |
20151027 -여지윤- 소스파일 (0) | 2015.10.27 |
20151023(금) 윤재희 - GPIO를 통한 웹서비스 메시지 제어, 메모리 출력 함수, 프로그램 실행 함수 (9) | 2015.10.23 |
20151022-22번-우대희 LOAD함수 구현 (5) | 2015.10.23 |
load함수(우대희군이 알려준 방법으로 구현) (2) | 2015.10.23 |
load함수 참고하세요.. (6) | 2015.10.23 |