본문 바로가기
코스웨어/16년 스마트컨트롤러

20160401_김도관_업무일지_C언어 기초및 라즈베리파이_Non-Canonical

by 알 수 없는 사용자 2016. 4. 5.
728x90
반응형

C언어


전역변수

처음실행되면 메모리 공간에 할당되어 프로그램이 종료될때까지 메모리에 남아있는 변수

별도 값으로 초기화하지 않으면 0으로 초기화된 값을 가짐 비트0

프로그램 전체 영역 어디에서나 접근가능


GlobalVariable.c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
 
int Add(int val);
int numX=1;
 
int main(void)
{
    int num = 5;
    int num1 = add(3);
    int num2 = num+9;
    printf("num1 : %d \n", num1);
    printf("num1 주소 : %p \n",&num1);
    printf("num2 : %d \n", num2);
    printf("num2 주소 : %p \n",&num2);
    printf("main num주소 : %p \n",&num);
    printf("전역변수 numX : %p \n", &numX);
    return 0;
}
 
int add(int val)
{
    int num = 9;
    num+=val;
    printf("add num 주소 : %p \n",&num);
    return num;
}
cs


결과: 

해당 결과값과 각각 전역변수의 메모리 주소




라즈베리파이 


Non-Canonical


swrite.c - 송신TX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
 
#define SPEED B115200
#define SPORT "/dev/ttyAMA0"
int main(void)
{
    char cBuff[255];
 
    int iDev = 0; //장치데스크립션
    int iRet = 0; //반환값
 
    struct termios stOldState;
    struct termios stNewState;
    
    iDev = open(SPORT,O_RDWR | O_NOCTTY);
 
    if(0 > iDev)
    {
        perror(SPORT);
        exit(-100);
    }
 
    tcgetattr(iDev, &stOldState);
    bzero(&stNewState, sizeof(stNewState));
 
    stNewState.c_cflag = SPEED | CRTSCTS | CS8 | CLOCAL | CREAD;
    stNewState.c_iflag = IGNPAR | ICRNL;
    stNewState.c_oflag = 0;
    
    stNewState.c_lflag = ICANON;
    bzero(stNewState.c_cc, NCCS);
    stNewState.c_cc[VMIN] = 1;
 
    tcflush(iDev, TCIFLUSH);
    tcsetattr(iDev, TCSANOW, &stNewState);
 
    //iRet = read(iDev, cBuff, 255);
    iRet = write(iDev, "test\n"5);
    //cBuff[iRet] = 0;
    //printf("[%s]:[%d]\n", cBuff, iRet);
    printf("write complete: %d \n",iRet);
    tcsetattr(iDev, TCSANOW, &stOldState);
    close(iDev);
 
    return 0;
}
 
cs


코드 설명




sread.c - 수신 RX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/stat.h>
 
#define SPEED B115200
#define SPORT "/dev/ttyAMA0"
int main(void)
{
    char cBuff[255];
 
    int iDev = 0; //장치데스크립션
    int iRet = 0;
 
    struct termios stOldState;
    struct termios stNewState;
 
    iDev = open(SPORT,O_RDWR | O_NOCTTY);
 
    if(0 > iDev)
    {
        perror(SPORT);
        return -100;//exit(-100);
    }
 
    tcgetattr(iDev, &stOldState);
    bzero(&stNewState, sizeof(stNewState));
 
    stNewState.c_cflag = SPEED | CRTSCTS | CS8 | CLOCAL | CREAD;
    stNewState.c_iflag = IGNPAR | ICRNL;
    stNewState.c_oflag = 0;
 
    stNewState.c_lflag = 0;
    bzero(stNewState.c_cc, NCCS);
 
    stNewState.c_cc[VTIME] = 0;
    stNewState.c_cc[VMIN] = 5;
 
    tcflush(iDev, TCIFLUSH);
    tcsetattr(iDev, TCSANOW, &stNewState);
 
    iRet = read(iDev, cBuff, 255);
    cBuff[iRet] = 0;
    printf("[%s]:[%d]\n", cBuff, iRet);
 
    tcsetattr(iDev, TCSANOW, &stOldState);
    close(iDev);
 
    return 0;
}
 
cs


45번 : iRet 에 버퍼에 저장된값 225까지 읽어들이고 나머지는 버림

728x90