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

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

By a3040, Published on 10/10/2024,

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

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

RTC모듈이 내장되어 있음.

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

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

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


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

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

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

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

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

Continue Reading
Note > cppextern, namespace, scope

By a3040, Published on 9/6/2024, 2:

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


선언: 함수의 서명(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 )


Continue Reading