반응형

앞서 표준 입출력에 대해 설명했고, 문자(character) 1개의 1byte를 취급하는 입출력 함수에 대해 설명했다.

https://ansan-survivor.tistory.com/1297

 

[C언어] C언어 표준 입출력 stdin, stdout (입력과 출력), 문자 입출력 ( getchar, putchar, fgetc, fputc)

C언어에서 표준으로 지정된 입력스트림, 출력스트림이 있다. 보통 "키보드"의 입력을 통해 받으니 입력스트림이다. (stdin) 보통 "모니터"로 결과를 확인하니 출력스트림이다. (stdout) 그 외 default로

ansan-survivor.tistory.com

 

거의 내용이 비슷하지만 여기서는 문자열 (String) 에 대한 함수를 다룬다.

 

 

 

문자열 출력 함수로 : puts, fputs 가 있다.

 

출력 함수 puts

 - 함수 원형: int puts(const char * string)

 - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함.

 - int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다.

 - 자동으로 문자열 맨뒤 '\n' 개행이 붙는다.

 - char * 이므로 메모리상의 특정 문자열의 주소값이 그데로 전달 됨을 알 수 있다. (문자열 전달 방식 아래 참고)

https://ansan-survivor.tistory.com/1251

 

[C언어] 포인터로 문자열 선언, 배열 문자열 선언과 차이. (문자열 내부 변경하기)

문자열(string)이란, 알파벳 하나하나가 메모리상의 연속적으로 나열되며, 마지막에는 '\0' (NULL)으로 끝나는 배열이다. 위 그림과 같이 문자열을 만드는 방법은 아래와 같다. char string[11] = "hello worl

ansan-survivor.tistory.com

 

출력 함수 fputs

 - 함수 원형: int puts(const char * string, FILE * stdout)

 - 반환형이 int인 이유? char형은 컴파일러마다 unsigned, signed가 다른데, int는 모든 컴파일러가 signed int로 처리함.

 - int형 이므로 어떤 컴파일러든 -1값(EOF)을 반환하는데 무리가 없다.

 - 문자열 맨뒤 '\n' 개행이 붙지 않는다. (직접 붙어야 함)

 - puts와 마찬가지로 문자열의 주소값이 전달되나, 2번째 인자로 출력 형태를 정한다. stdout은 모니터 출력, 파일출력으로 변경 가능.

 

#include<stdio.h>

int main(void)
{
    char* str = "hello world";

    printf("1. puts test \n");
    puts(str);

    printf("2. fputs test \n");
    fputs(str, stdout);         // stdout : 모니터출력, 뒤에 개행이 없음

    return 0;
}

 

반응형

 

 

문자열 입력 함수로 : gets, fgets 가 있다.

 - 함수 원형: char gets(const char * string)

 - 함수 원형: char fgets(const char * string, int n ,FILE * stdin)

 

gets 사용 방법.

 - 할당 받은 배열 이상 초과하지 않도록 주의

 - 문자열의 끝인 NULL이 없는경우 메모리 침범문제 발생

int main(void)
{
	char str[7];	//	7개의 배열 공간 할당
	gets(str);	//	마지막 NULL을 포함한 6개의 문자열 가능. 그 이상 들어오면 할당되지 않은 메모리 침범 에러
}

 

 

fgets 사용 방법.

 - gets의 단점을 보완.

int main(void)
{
	char str[7];	//	7개의 배열 공간 할당
    // 배열의 주소, 배열의 크기, stdin-키보드입력
	fgets(str, sizeof(str), stdin);	
    
}

 

예제)

입력받은 문자열을 6자씩 잘라서 표현

#include<stdio.h>

int main(void)
{
    char str[7];
    int i;

    for (i = 0; i < 5; i++)
    {
        fgets(str, sizeof(str), stdin);
        printf("%d: %s\n", i+1, str);
    }

    return 0;
}

아래와 같이 입력하면 총 6개의 글이 들어간다. (맨뒤는 NULL문자가 있기에 배열길이가 7이다)

 

 

반응형
반응형

와치독(watchdog)은 가동중인 시스템이 어떤 외부적인 상황으로 시스템 구동이 멈췄을 때, 이를 타이머로 감지한 후 일정시간 반응이 없으면 자동으로 재부팅시켜 시스템이 완전히 다운되지 않도록 하는 방법이다.

 

라즈베리파이를 IOT 장비로 사용한다면 밖에 나가있을 때 고장나면 알아서 감지하여 재부팅하도록 설정하여야 한다.

이를 설정하는 방법이다.

 

1. watchdog 세팅

sudo modprobe bcm2835_wdt

 

2. 와치독을 모듈에 설정

echo "bcm2835_wdt" | sudo tee -a /etc/modules

 

3. watchdog 데몬 설치 (백그라운드로 돌는 것)

sudo apt-get install watchdog
sudo update-rc.d watchdog defaults

 

4. nano 편집기로 timeout에 대한 세팅

sudo nano /etc/watchdog.conf
max-load-1       =  24		<- 주석을 제거함.
watchdog-timeout = 14		<- 없으므로 내가 작성. 이숫자가 작아질수록 렉걸린후 기다리는 시간이 짧아짐.

        좀 더 아래로 내린 후 아래도 수정

watchdog-device = /dev/watchdog
realtime        = yes
priority        = 1

다되면 Ctrl + X로 저장

 

5. Watchdog 기능 활성화

sudo /etc/init.d/watchdog restart

 

 

(테스트)

강제로 에러를 일으켜 먹통으로 만들고 렉걸리게 하는 코드 (주의 아무곳이 사용하면 안된다!)

:(){ :|:&amp; };:

코드를 실행하면 무제한 루프에 가두고 먹통으로 만들어 버림
결국엔 이렇게 죽어버려서 원격이 끊긴다.

반응형

재접속 시도.

성공, 접속이 다시 되었다. 필자가 가서 재부팅을 한것도 아니고, 그저 원격으로 먹통을 만들었는데 와치독이 그것을 인식하고 알아서 재부팅을 시켜버렸다.

이제 이 와치독과 함께 시작시 프로그램을 자동으로 돌리는 코드를 함께 사용하면, 신뢰성이 향상된 IOT기기처럼 쓸 수 있을 것이다.

https://ansan-survivor.tistory.com/1310

 

[Raspberry Pi] 라즈베리파이 자동 시작프로그램 등록하기

라즈베리파이가 실행되자마자 프로그램을 실행시킬 수 있는 방법이 있다. 1. 시작프로그램 설정 파일 $ sudo nano /etc/rc.local 2. 아랫부분에 원하는 동작 등록 . . . fi [여기에 등록] exit0 3. 재부팅하면

ansan-survivor.tistory.com

 

 

 

반응형
반응형

만약 Stackup에서 Mask Layer를 생성하지 않았다면, 아래 포스팅을 보고 따라하면 된다.

https://ansan-survivor.tistory.com/684

 

[PCB Editor] OrCAD PCB / Allegro PCB Silkscreen(실크스크린)이 Pad나 Via 위에 겹치지 않도록 DRC 마커 띄우기

(출처: https://www.eevblog.com/forum/projects/silk-screen-on-exposed-pcb-pads/) PCB 제조적인 관점에서 Silkscreen이 납땜이 들어가야 할 Pad위에 뿌려지면 잉크 때문에 납땜의 성능이 떨어질 수 있다. 대부..

ansan-survivor.tistory.com

 

mask layer를 생성했을 때

그러나 Mask Layer를 생성했다면 아래와 같이 Silkscreen과 Pad (또는 Soldermask)의 간격에 대한 제한사항 (Constraint)을 줄 때 아래와 같이한다.

 

1. Setup - Constraints

 

2. Manufacturing - DFF Constraint Set - Silkscreen 에서 <Create New>를 선택 후, CSet의 이름 지정

 

3. CSet 생성 후, 이격거리를 입력하고, All pin pads 마우스우클릭 - Analysis Mode 선택

    * (만약 pad뿐만아니라 via, shape, hole 등등도 적용하고 싶으면 쭉 확인해보고 활성화 시키면 된다.)


4.

 

(결과) 실크스크린을 pad 근처로 가서 0.1mm 이내로 근접하면 DRC에러가 발생한다.

 

 

* 다른방법으로 Setup RAVEL Rules in CM을 사용할 수 있다. (이 기능은 Allegro PCB Designer 이상의 라이선스 보유자만 가능)

 Manufacture - Setup RAVEL Rules in CM 으로 기능을 실행시켜 아래와 같이 Silkscreen 부를 체크하고 우측하단 이격거리 Value를 넣으면 된다.

(이 기능에 대한 자세한 사항은 아래참고)

https://ansan-survivor.tistory.com/1332

 

[PCB Editor] Cadence Allegro PCB DFM 체크 Ravel GUI 사용법 (실크스크린, 테스트포인트 등 손쉽게 체크)

DFM은 설계단계에서 제조공정까지 고려하여 설계를 할 수 있도록 Rule을 설정해주는 기능이다. 사용 방법은 아래) https://ansan-survivor.tistory.com/938 [PCB Editor] [DFM] OrCAD / Allegro PCB Design True D..

ansan-survivor.tistory.com

 

 

반응형
반응형

아래와 같이 Create Differential Pair 명령어가 Greyed out 되버렸다. 그래서 선택할 수 없다.

이런경우에는 보통 회로도상에서 Constraint Manager 기능이 활성화 되었을 때 발생한다고 한다.

보통 회로설계 끝나고 Constraint Manager 설정을 이미 했거나, 아니면 PCB로 넘겨서 Constraint Manager를 설정하거나 등등 그럴 경우 greyed out 되어 선택을 못하는 경우가 발생한다고 한다.

반응형

이 상황에서 Differential Pair를 설정하는 방법은 Constraint Manager에서 설정하면 된다고 한다.

 

1. PCB - Constraint Manager

 

2. 원하는 2개의 Net를 동시선택 후 (Ctrl 누르고 선택) Create - Differential Pair

 

3. 자동 선택이 되어있으므로, 그냥 Create를 누르면 된다.

 

4. 그러면 Differential Pair으로 묶인다.

 

 

반응형
반응형

https://qengineering.eu/install-opencv-4.5-on-raspberry-pi-4.html

 

이전에 윈도우에서 실행하는 파이썬으로 OpenCV에 대해서 다뤘다.

https://ansan-survivor.tistory.com/category/%ED%8C%8C%EC%9D%B4%EC%8D%AC%28python%29/Python%20OpenCV

 

'파이썬(python)/Python OpenCV' 카테고리의 글 목록

 

ansan-survivor.tistory.com

 

 

OpenCV는 C언어 또는 Python등의 언어로 카메라에 각종 여러 프로그래밍을 넣어서 사물을 탐지하고 인식하는 등의 비전시스템을 개발 할 수 있는 오픈소스를 제공하는 라이브러리 이다.

 

라즈베리파이의 리눅스OS에서도 역시 이 오픈소스인 OpenCV를 넣어서 개발을 할 수 있다.

그러기 위한 개발환경을 구축하는 방법이다.

 

아래 순서를 따라하면 된다.

 

1. apt-get 최신버전 패치

$ sudo apt-get update -y
$ sudo apt-get upgrade -y

 

2. 컴파일링을 위한 패키지 설치

$ sudo apt-get install -y build-essential cmake

$ sudo apt-get install -y libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev	

// for videos
$ sudo apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libxine2-dev	

// 주의 1(숫자)이 아니고 l(알파벳)임
$ sudo apt-get install -y libv4l-dev v4l-utils										

$ sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

 

3. Opencv GUI 환경 설치 (옵션 패키지)

// tk 2.0 설치
$ sudo apt-get install -y libgtk2.0-dev	

// tk 3.0 설치
$ sudo apt-get install -y libgtk-3-dev	

// qt 4.0 설치
$ sudo apt-get install -y libqt4-dev

 

4. OpenGL 지원패키지 설치

$ sudo apt-get install -y mesa-utils libgl1-mesa-dri libgtkgl2.0-dev libgtkglext1-dev

 

5. 파이썬에 필요한 OpenCV관련 패키지 설치

$ sudo apt-get install -y libatlas-base-dev gfortran libeigen3-dev
$ sudo apt-get install -y python2.7-dev python3-dev python-numpy python3-numpy

 

6. home디렉터리에 새로운 디렉터리 생성 후 이동

// 현재 위치에 opencv 라는 디렉터리 생성
mkdir opencv

// 해당 디렉터리로 이동
cd opencv

 

7. opencv 필요 패키지 다운로드 및 압축해제

// opencv 설치패키지 다운로드
$ wget -O opencv.zip https://github.com/opencv/opencv/archive/4.1.0.zip

//	압축 해제
$ unzip opencv.zip		

// opencv_contrib 설치패키지 다운로드
$ wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.1.0.zip	

//	압축 해제
$ unzip opencv_contrib.zip

        ( 옵션 ) 압축이 잘 풀렸나 확인. 아래와 같이 디렉터리 2개가 생성되어야 한다.

$ ls

 

8. 압축을 푼 디렉터리로 이동하여 build 디렉터리 생성 후 이동

$ cd opencv-4.1.0
$ mkdir build
$ cd build

 

9. 해당 디렉터리에서 OpenCV 컴파일 설정하기

$ cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTAL_PREFIX=/usr/local  ?\
-D WITH_TBB=OFF  ?\
-D WITH_IPP=OFF  ?\
-D WITH_1394=OFF  ?\
-D BUILD_WITH_DEBUG_INFO=OFF  ?\
-D BUILD_DOCS=OFF  ?\
-D INSTALL_C_EXAMPLES=ON  ?\
-D INSTALL_PYTHON_EXAMPLES=ON  ?\
-D BUILD-EXAMPLES=OFF  ?\
-D BUILD_TESTS=OFF  ?\
-D BUILD_PERF_TESTS=OFF  ?\
-D ENABLE_NEON=ON  ?\
-D ENABLE_VFPV3=ON  ?\
-D WITH_QT=OFF  ?\
-D WITH_GTK=ON  ?\
-D WITH_OPENGL=ON  ?\
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.1.0/modules  ?\
-D WITH_V4L=ON  ?\
-D WITH_FFMPEG=ON  ?\
-D WITH_XINE=ON  ?\
-D BUILD_NEW_PYTHON_SUPPORT=ON  ?\
-D OPENCV_GENERATE_PKGCONFIG=ON ../

위와 같이 입력하고 엔터.
이렇게 진행한다.
끝날 때 위와같이 나타난다.

 

10. Swap 멀티코어 사용, 메모리 부족 대비

  - nano 편집기로 해당 파일을 연다

sudo nano /etc/dphys-swapfile

 - 기존의 것은 주석처리하고 사이즈를 20배(2048)으로 늘린다.

#...
# CONF_SWAPSIZE=100
CONF_SWAPSIZE=2048		// <= 메모리를 20배 확장
...

Ctrl+X - (Y)눌러서 저장 - 엔터

 

11. 변경한 SWAP 업데이트

// 이전 메모리 확인
$ free 										

// 스왑실행
$ sudo /etc/init.d/dphys-swapfile restart	

// 이후 메모리 확인
$ free

늘어난 것을 확인.

 

12. 컴파일 실행 (여기에서 엄청 오래 걸림 컴퓨터에 따라 몇시간? 도 걸림)

반응형
$ make

100%가 다 차면 완료

 

13. 컴파일 결과물을 설치

$ sudo make install

설치 완료

 

14. OpenCV 라이브러리를 찾을 수 있도록 명령

//  l(알파벳) 임.
$ sudo ldconfig

 

15. 설치가 끝났으니 다시 메모리를 100으로 원상 복귀

$ sudo nano /etc/dphys-swapfile

    아까 주석처리한 100을 해제하고, 2048을 주석처리, 그리고 저장.

 

16. Swap 재시작 변경 확인

// swap 재시작
$sudo /etc/init.d/dphys-swapfile restart

// 확인
$free

 

 

이제 라즈베리파이에 OpenCV를 설치했다.

Python코드를 작성하고, 카메라를 연결하여 사용할 수 있다.

 

 

https://link.coupang.com/a/j3JK2

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

라즈베리파이 4 4B 비주얼 개발 세트 OpenCV 얼굴인식 Pyth

COUPANG

www.coupang.com

 

https://link.coupang.com/a/j3JNR

 

기존 라즈베리 파이 4 모델 B 2 4 8GB RAM 옵션 9 레이어 아크릴 케이스 32GB TF 카드 스위치 전원 어댑

COUPANG

www.coupang.com

 

 

반응형
반응형

라즈비안이나 우분투와 같은 데비안 계열의 리눅스에서 apt-get update를 하려는데 아래와 같은 메세지를 받을 때.

E: Repository 'http://archive.raspberrypi.org/debian buster InRelease' changed its 'Suite' value from 'testing' to 'oldstable'


N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.

반응형

 

해결방법은 아래 코드를 입력하면 된다.

sudo apt update --allow-releaseinfo-change -y

 

 

반응형
반응형

 

보통  ~~.com   ~~.co.kr 같은 도메인을 발급하기 위해서는 해당 도메인을 구매해서 본인이 사용하고 있는 호스팅서버에 IP와 맵핑을 시켜 사용해야 한다.

 

그 방법으로는 아래 참고.

https://ansan-survivor.tistory.com/1099

 

[cafe24 - wordpress] 카페24 워드프레스 도메인 변경하기 (고대디 Godaddy 구매 도메인)

카페24의 호스팅을 이용한 워드프레스에서 내 도메인을 변경하고 싶을 때. 기존에 사용중인 도메인이 있었는데, Godaddy에서 하나 다른걸 구매해서 바꿔보았다. 카페24 조치사항 1. 호스팅으로 로

ansan-survivor.tistory.com

 

하지만 여기서는 유료가 아닌 무료로 도메인을 얻어서 사용하는 방법에 대해 포스팅한다.

 

1. 무료 도메인을 발급해주는 Freenom 사이트가 있다. 접속한다.

https://www.freenom.com/en/index.html?lang=en 

 

Freenom - A Name for Everyone

Cost Price Free Special

www.freenom.com

 

2. 원하는 도메인명 작성 후 검색

    그러나! 눌러보면 죄다 Not Available으로 나온다.

    그래서 여기서 확인해야 할 것은 .tk  .ml  .ga  .cf  와 같이 무료로 지원하는 뒤에 도메인 명을 확인

 

3. 그리고 < 내도메인명.tk > 와 같이 다시 입력하면 된다.

    그러면 아래와 같이 선택이 가능하다.

 

4. Checkout 으로 선택

 

5. 12개월 (1년) 동안 무료로 쓸 수있고, 그 이상은 돈을 지불해야 한다.

 

6. 인증할 메일주소를 쓰고 Verify My Email Address 클릭

 

7. 내 메일함에 가서 아래 인증링크를 누른다.

 

8. 내 구매자 정보를 쭈욱 쓴다. 그리고 Complete order

다 작성 후, Complete Order

 

9. 로그인 하고 Service - My Domain 에 들어가면 내가 구매한 도메인이 있다.

 

 

 

 

 

반응형
반응형

 

1. Plugin 설치 탭 - Add New - "translate" 검색 - Translate Wordpress - Google language Translator 설치 및 활성화

 

2. 플러그인의 Installed Plugins 에 가보면 설치가 되어있다. 여기서 Settings를 눌러 설정 변경

 

3. 기본언어로 설정할 부분 우측상단 - 번역기능을 넣고자 하는 국가를 추가

반응형

완료 후 스크롤 아래로 내려서 저장

 

4. 아랍어로 변경해보았더니 잘된다. (기계어라 완벽하지 않을 수 있다.)

 

반응형
1···23242526272829···181

+ Recent posts