__________RFID & UNIX____________________________________________________________________________
RFID 리더기에 HOST명령 전송 (Protocols for Reader Control) | ||
#include <stdio.h>
unsigned short CRC16(unsigned char *, unsigned int); volatile int iBreak = 0;
int main()
int iCnt; struct termios stOldState; // 기존 Serial Port 상태 정보
unsigned char Buff[255] = {
/*
}; iDev = open(SPORT, O_RDWR | O_NOCTTY | O_NONBLOCK);// Serial Port Open
if( 0 > iDev) //시리얼 포트 Open Error //SIGIO signal 을 수신하도록 설정 // file descriptor를 비동기로 설정 stNewState.c_cflag = SPEED | CRTSCTS | CS8 | CLOCAL | CREAD | PARENB; // 짝수패리티
stNewState.c_iflag = IGNPAR | ICRNL ; //stNewState.c_lflag = ICANON; // Canonical 통신 기법 사용
stNewState.c_lflag = 0 ; // Non-Canonical 통신 기법 사용 tcflush (iDev, TCIFLUSH); // 시리얼 포트수신 큐 초기화
//원래 데이터에 체크섬 계산된값을 넣음
read(iDev, Buff, sizeof(Buff)); //명령전송후 리턴되는 값 수신
ucTemp = Buff[4]; printf("SW-TYPE : "); case 30:
case 31:
case 71:
case 72:
case 73:
case 74:
case 75:
case 40:
case 41:
case 91:
case 80:
case 81:
case 84:
default: }
if( 0 != ((*((unsigned short *)(&Buff[9]))) & 0x0001) ) }
void Handle_Serial_Sig(int Arg)
#define CRC_POLYNOM 0x8408
unsigned short CRC16(unsigned char *DATA, unsigned int cnt) { unsigned short crc = CRC_PRESET; crc ^= DATA[i]; } }
<Get Software Version> SW-REV : Revision status of the firmware.
☞ control byte [0x71] Set Output는 리더기의 LED와 비프음의 출력을 제어함
※ OS는 LED와 부저의 동작모드를 설정함 b00 : 변화없음 b01 : ON b10 : OFF b11 : FLASH(깜빡임,켜졌다 꺼졌다를 반복)
※ OSF(Out State Flash)는 OS에서 FLASH로 설정된것의 동작 주파수를 설정함 b00 : 8Hz(1초에 8번) b01 : 4Hz(1초에 4번) b10 : 2Hz(1초에 2번) b11 : 1Hz(1초에 1번)
※ OS-Time는 LED와 Beeper의 동작시간을 설정함 0x0001 => 1 x 100ms . . . 0xFFFE => 65534 x 100ms (1:48:13h) 0xFFFF => 계속 동작
|
_____ASM & context switching_____________________________________________________
실행파일의 code섹션, data 섹션 메모리에 적재하기 | ||||||||
<CM 프로그램>
<MY 프로그램> ☆ 두 프로그램이 LOAD 한 섹션값이 같음을 알수 있음
------------------------------------------------------------------------------------------------------------
※ 기타 함수는 생략...
※ Clear_mem()는 실행파일의 섹션을 올리고 실행하기위해 할당해 놓은 메모리 전체를 0으로 초기화하는 함수
※ go()는 새로운 context 구조체 변수(stNewReg)를 새로 하나더 만들어 EAX 멤버에 stOldReg의 주소를 EIP 멤버에 ucpCode(할당해 놓은 코드영역)주소값을 ESP멤버에 ucpStack(할당해 놓은 스택영역)주소를 넣고 LDST()를 호출한다.
LDST()는 stNewReg에 셋팅된 값으로 레지스터 값들을 바꾸기 때문에 return address가 ucp코드 즉, ucpCode에 적재되어 있는 프로그램을 수행한다.
ucpCode에 적재된 프로그램은 INIT(어셈블리어 소스)에 의해 컴파일 링크된 실행파일(t1.exe)이기 때문에 t1.c의 test()를 수행한뒤 자동으로 LDST(&stOldReg)를 호출해준다.
그러면 자동으로 main에 STST(&stOldReg)를 호출한 뒤의 위치로 점프되고 레지스터 상태도 바뀌게 되기 때문에 kernel panic이 뜨지 않고 이전상태로 되돌아감.
|
_____________________________________________________________________________
'코스웨어 > 13년 스마트컨트롤러' 카테고리의 다른 글
20131002 어셈블리 -서준영 (0) | 2013.10.02 |
---|---|
20131002 ASSEMBLY - 전영기 (0) | 2013.10.02 |
메모리,레지스터 프로그램 (0) | 2013.10.02 |
131002 수 _ 어셈블리 김성엽 (0) | 2013.10.02 |
131001 화 어셈블리 조유진 (0) | 2013.10.01 |
130930 월 어셈블리 숙제 조유진 (0) | 2013.09.30 |
PE 헤더 구조, 응용 프로그램 원리 pdf (2) | 2013.09.27 |
9월 25일 어셈블리 - 석주원 (0) | 2013.09.25 |