개인 자료 정리 홈페이지 입니다.

Note > makerSIAM전자 시계, 컴퓨터 시간(RTC)가 유지된는 이유는

By a3040, Published on Invalid Date

전자 시계, 컴퓨터 시간이 유지된는 이유는?

- 컴퓨터 시간이 유지된는 이유는 

RTC모듈이 내장되어 있음.

- RTC모듈이 시간을 유지하는 방법은?

> 만들어질때 UTC 기준시간으로 초기화 되고, 그 이후는 자체 전원(보통 컴 보드에서 보이는 동그란 건전지)으로 유지되면서 

> 틱을 지속적으로 발생해서 초기화시간 + 만들어진 이후 틱개수 = 현재시간을 계산한다.


RTC 모듈은 제조 시점에 기준이 되는 UTC 시간으로 초기화됩니다. 이후에는 자체적으로 틱(tick)을 발생시켜 시간을 유지합니다. 구체적으로는 다음과 같은 과정이 있습니다:

  1. 초기화: RTC 모듈이 제조될 때 또는 처음 설정될 때 기준이 되는 UTC 시간으로 초기화됩니다.

  2. 틱 발생: RTC 모듈은 내부 클럭을 사용하여 초 단위로 틱을 발생시킵니다. 이 틱은 일정한 주기로 발생하며, 이를 통해 시간을 계산합니다.

  3. 시간 유지: RTC 모듈은 배터리 백업을 통해 전원이 꺼져도 시간을 계속 유지합니다. 내부 클럭이 계속 작동하여 틱을 발생시키기 때문에 시간이 정확하게 유지됩니다.

  4. 시간 읽기: 마이크로컨트롤러나 컴퓨터는 RTC 모듈로부터 현재 시간을 읽어와서 필요에 따라 타임존 변환을 통해 로컬 시간을 계산합니다.

Note > cppextern, namespace, scope

By a3040, Published on Invalid Date

기초용어 : 선언, 정의, 참조


선언: 함수의 서명(signature)을 작성

void print(); //<-- 선언

정의: 구현

void print(){ //<-- 정의

std::cout <<"hello" << std::endl;

}

참조: 


extern은 **외부 선언(external linkage)**을 의미하며, 변수가 다른 파일에서 정의되었음을 알려주는 역할 


변수에서의 extern: 참조 

extern int globalVar; 변수는 다른 파일에서 정의되어 있으며, 이 파일에서는 그 변수를 참조한다는 뜻 


함수에서의 extern: 선언 

extern void myFunction(); 


함수는 extern을 생략하고도 선언할 수 있습니다.



namespace는 namespace 영역에서 extern scope를 갖음.


//ns.h
#ifndef __ns_h__
#define __ns_h__


namespace ns{
    namespace siam{
        extern int g_int;
    }
}
#endif

//ns.cc
namespace ns{
    namespace siam{
        int g_int = 10;
    }
}

//def.cc
#include <iostream>

int in_def_cpp_int = 100;

void print(){
    std::cout << in_def_cpp_int <<std::endl;
}

//main.cc
#include "ns.h"
#include <iostream>

extern int in_def_cpp_int; //외부 어딘가에 정의되어다는 참조
extern void print(); //외부 어딘가에 정의한것이 있다는 선언

extern int not_exitsts_int;

int main(){
    std::cout << ns::siam::g_int << std::endl;
    //std::cout << g_int << std::endl;  //에러
    
    std::cout << in_def_cpp_int << std::endl;


    in_def_cpp_int = 1000;
    print();
    std::cout << in_def_cpp_int << std::endl;
    std::cout << not_exitsts_int << std::endl;
    
    // std::cout << ns::siam::g_int << std::endl;
    return 0;
}

//cmake
//add_executable(nsmain ./ns/ns.h ./ns/ns.cc ./ns/def.cc ./ns/main.cc )


Note > 개발환경과도구정리cmake

By a3040, Published on Invalid Date

- cmake/cmake-gui


- 타겟이란? 만들려고 하는 목적물 이름

add_executable(Tutorial tutorial.cxx)


이 경우 윈도우 환경에서 Tutorial.exe 파일이 만들어지고 CMakeLists.txt에서 타켓이름은 Tutorial임


CMakeLists.txt

cmake_minimum_required(VERSION 3.10) #버전표시
project(Tutorial) #프로젝트명 표시
add_executable(Tutorial tutorial.cxx) # 실행파일 만들기


윈도우에서 CMake사용시 cl인지 gcc인지?

message(STATUS "C Compiler: ${CMAKE_C_COMPILER}")

message(STATUS "C++ Compiler: ${CMAKE_CXX_COMPILER}")

message(STATUS "C Compiler ID: ${CMAKE_C_COMPILER_ID}")

message(STATUS "C++ Compiler ID: ${CMAKE_CXX_COMPILER_ID}")


현재 타겟의 컴파일 옵션은?

#현재 CMakeListtxt에서 설정된것

get_target_property(TARGET_COMPILE_OPTIONS my_target COMPILE_OPTIONS)

#모든 타겟의 옵션 상속된것까지 /

get_target_property(ALL_COMPILE_OPTIONS my_target INTERFACE_COMPILE_OPTIONS) 



CMake Tutorial — CMake 3.30.2 Documentation

Note > 리눅스 명령어 모음httpd 명령어 및 간단한 상태 분석

By a3040, Published on Invalid Date

상황에 따라서 현재 httpd 가 어떻게 컴파일 되어 있는지 상황이 어떤지 확인 해야할 경우가 있습니다.


1. httpd가 실행 가능한가 확인해보기

2. 버전 확인해보기

3. 컴파일시 서버 기본 설정 확인해보기

4. 설정 파일 확인해 보기

5. httpd 서버 실행하기

6. 동작 상태 확인


httpd는 아파치 하이퍼텍스트 전송 프로토콜 (HTTP) 서버 프로그램이다. 자체(standalone) 데몬 프로세스로 실행하도록 설계되었다. 원한다면 요청을 처리하기위해 자식 프로세스와 쓰레드들을 만든다.

일반적으로 httpd를 직접 실행하기보다는 유닉스기반 시스템에서는 apachectl을 통해, 2000, XP에서는 서비스로Windows 9x와 ME에서는 콜솔 프로그램으로 실행해야 한다.


1. httpd가 실행 가능한가 확인해보기

- 현 os에서 동작하는지 확인 가능합니다.

www]# ./bin/httpd -h

Usage: ./bin/httpd [-D name] [-d directory] [-f file]

          [-C "directive"] [-c "directive"]

          [-v] [-V] [-h] [-l] [-L] [-S] [-t] [-T] [-F]


2. 버전 확인해보기

- 버전을 확인합니다.

 www]# ./bin/httpd -v

Server version: Apache/1.3.37 (Unix)

Server built:  Dec 17 2006 17:32:36


apache2 -V


3. 컴파일시 서버 기본 설정 확인해보기

설정파일 및 실행 후 로그 관련 도메인에 연결된 정보를 확인하기 기본 설정을 확인할 필요가 있습니다.


컴파일 때의 기본 설정을 확인 합니다.

 www]# ./bin/httpd -V

Server version: Apache/1.3.37 (Unix)

Server built:  Dec 17 2006 17:32:36

Server's Module Magic Number: 19990320:18

Server compiled with....

...

 -D HTTPD_ROOT="/www"

 -D DEFAULT_PIDLOG="logs/httpd.pid"

 -D DEFAULT_ERRORLOG="logs/error_log"

 -D SERVER_CONFIG_FILE="conf/httpd.conf"

...


현재의 설정일 경우 옵션 없이 httpd가 실행될때 기본 설정 파일을 찾는 위치는 /www/conf/httpd.conf 입니다.

기본 로그 파일의 위치는 /www/logs 입니다.


4. 설정 파일 확인해 보기


설정 파일을 확인 합니다.

 ./bin/httpd -t

httpd -t

에러일 경우 에러가 무엇인지 나타납니다. 기본 설정으로 테스트 하기 때문에 윗쪽에서 분석했던 위치의 설정파일을 확인해줍니다.

정상일 경우 Syntax Ok 가 출력됩니다.


특정 설정 파일이 현재의 httpd컴파일 상태로 실행가능한가? 확인

./bin/httpd -f /etc/httpd/conf/httpd.conf -t



5. httpd 서버 실행하기

파일을 구성합니다. ServerRoot 및 httpd.conf 설정을 정상구성 후 실행해봅니다.


실행 확인 및 실행 - 정상 상태

www]# ./bin/httpd

기본은 80번이고 특별한 일 없이 실행됩니다.

정상 실행된 경우 그냥 저렇게 다음 명령어를 기다리고 끝입니다.



실행 되는 설정과 안되는 경우의 설정들 예시


www]# ./bin/httpd -f /etc/httpd/conf/httpd.conf

Syntax error on line 148 of /etc/httpd/conf/httpd.conf:

Cannot load /etc/httpd/modules/mod_auth_basic.so into server: /etc/httpd/modules/mod_auth_basic.so: undefined symbol: apr_table_unset

설정파일의 기본 로드 모듈과 현재 실행시킨 httpd와 맞지 않습니다. 실행 안됨


 www]# ./bin/httpd -f /www/conf/httpd.conf <--- 동작하도록 수정한 기본 설정 파일입니다. 실행후 그냥 다음 명령 요청 나오면 시작된 것입니다.

 www]#./bin/apachectl stop 은 설정에있는 pid 파일을 이용해서 현재 실행중인 httpd를 종료하는 명령어입니다.


 www]# ./bin/httpd -f /old_05/www/conf/httpd.conf

특정 위치의 설정 파일이 정상 동작하는 결과가 나온 상태입니다.


안되는 경우는 재 설치 혹은 에러에 따른 처리를 해줘야합니다.


6. 동작 상태 확인

ps -ef |grep httpd  명령등을 이용해서 프로세스 상태를 확인합니다.

브라우저 등을 이용해서 외부 접속 상태를 확인합니다.

설정위치의 log를 이용해서 추가 에러를 수정합니다.



httpd - 아파치 하이퍼텍스트 전송 프로토콜 서버 - Apache HTTP Server Version 2.4