«   2025/07   »
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
Archives
관리 메뉴

printf("ho_tari\n");

11일차 본문

2025.05.30

 

uart.c

#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <pthread.h>
#include <termios.h>
#include <stdlib.h>
#include <string.h>

#define B_RATE B9600

int fd;  // Serial file descriptor

void* ReadProcess(void* arg)
{
    char buf[1024];
    while (1)
    {
        int n = serialDataAvail(fd);
        if (n > 0 && n < sizeof(buf))
        {
            for (int i = 0; i < n; i++)
            {
                char ch = serialGetchar(fd);

                // 줄바꿈 문자 무시 (선택 사항)
                if (ch == '\n' || ch == '\r') {
                    continue;
                }

                buf[i] = ch;
                buf[i + 1] = '\0';  // 실시간 null-terminate
                printf("<< %s\n", buf);  // 수신 데이터 출력
                fflush(stdout);
            }
        }
        delay(10);  // CPU 사용 제한
    }
    return NULL;
}

int main()
{
    if (wiringPiSetup() == -1) {
        fprintf(stderr, "wiringPi setup failed\n");
        exit(1);
    }

    fd = serialOpen("/dev/serial0", 9600);
    if (fd < 0) {
        perror("serialOpen failed");
        exit(1);
    }

    pthread_t rp;
    if (pthread_create(&rp, NULL, ReadProcess, NULL) != 0) {
        fprintf(stderr, "pthread_create failed\n");
        exit(1);
    }

    char buf[500];
    while (1)
    {
        printf(">> ");
        fflush(stdout);
        if (fgets(buf, sizeof(buf), stdin) != NULL) {
            // 개행 문자 제거
            char *newline = strchr(buf, '\n');
            if (newline) *newline = '\0';

            // 시리얼로 전송
            serialPuts(fd, buf);
            serialPutchar(fd, '\n');  // 필요 시 줄바꿈 명시적으로 추가
        }
    }

    return 0;
}

 

'(Telechips) AI 시스템 반도체 SW 개발자 교육 > SoC 시스템 반도체를 위한 온디바이스 AI' 카테고리의 다른 글

10일차  (0) 2025.05.29
9일차  (0) 2025.05.28
8일차  (0) 2025.05.27
7일차  (0) 2025.05.27
6일차  (0) 2025.05.23