노곤

nogon.egloos.com

포토로그 마이가든




unsigned char와 signed char Firmware

void fun(void)
{
     char a;
    
     a = 0x80;
     printf("%x\n", a>>1);
}

위와 같이 했을 때 a의 결과 값이 어떻게 나올까요?

상식적으로는 당연히 0b1100 0000 결과가 나와야합니다.

하지만 펌웨어에서는 종종 컴파일러가 char를 unsigend char로 기본으로 잡고 있는 경우가 많습니다.

따라서 결과는 컴파일러의 환경 설정에 따라서 0b1100 000도 될수 있고 0b0100 0000도 될 수 있습니다.



기업 문화 Etc

4년 동안한 한 직장을 다니다가 이직하는 과정에서 짧게 두 개의 회사를 거치게 되었습니다.

그 과정에서 회사마다 조금씩 다른 분위기를 느낄 수 있었고 고리타분하지만 회사는 작고 독립된, 배타적인 사회라는 것을 느낄 수 있었습니다.

회사마다 고유의 기업문화라는 것이 존재하더군요.

대부분 이직을 하시는 분들은 이전에 몸 담고 있던 회사와는 다른 새로운 회사 분위기에 당황스러움도 느낄 수 있습니다.

신입때야 무턱대고 이런게 사회 생활이구나 하고 그럭저럭 그 문화에 적응하게 됩니다.

하지만 경력으로 다른 회사에 가게 되었을 때에는 처음 몸 담은 기업 문화에 젖어 있기 때문에 쉽사리 다른 기업 문화를 받아들이기 힘듭니다. 더욱이 경력이기 때문에 실수를 하는 것에 대한 두려움도 있기 때문에 쉽사리 적극적인 모습을 띄기도 힘듭니다.

그래서 늘상 하는 말들이 첫 회사가 가장 좋다라는 말이 있는 것 같습니다.

새 술은 새 푸대에 담으라는 말 처럼 이직을 하는 과정에서는 예전 회사에서 가지고 있던 습관과 생각을 버리고 새로 시작하는 마음으로 시작해야하는 것 같습니다.



멀기만한 객체지향 Etc

Firmware와 Linux쪽으로 개발자 생활을 하고는 있지만 객체지향 언어에 관심이 많은 편입니다.

설계를 배우면 MVC 모델이라던지 패턴에 대해서도 얇팍한 지식을 조금 갖고 있는데다가 UML DISTILLED도 좀 보고 유스케이스 시나리오도 작성해서 개발한 경험이 그 이유인듯 싶습니다. 한편으로는 절차지향 언어에서 객체지향 언어로 컴퓨터 언어가 발전되었기 때문에 객체지향 언어를 이해한다면 절차지향 언어의 장단점에 대해서도 더 심화해서 이해할 수 있지 않을까? 라는 생각도 한 몫을 하는 것 같습니다.


허나 실질적으로 OOP는 해본적은 없다보니 가까이하고는 싶지만 먼 당신(?)이 저에게는 바로 객체지향 언어입니다.

C++를 배워야 하나 JAVA를 배워야하나 아니면 요즘 나름 인기를 얻고 있는 Objective-C를 배워야 하나... 그런 고민들도 참 많이 했었구요... 늘 똑같이 고민만 하다 끝나 버린... ;;

물론 책장에도  언어마다 2~3권의 책도 꼽혀 있습니다.

그러던 와중에 2년전에 어렵사리 구한 Objcted-Oriented Software Engineering이란 꺼내들었습니다. 아직은 생각날 때 일주일 5~6페이지 정도 읽어보는 수준이지만은 보면 볼 수록 매력이 있는 책인듯 싶습니다. 그래서 다시 시작해야 겠다는 결심을 하게 됬습니다.


앞으로 3개월 정도 충분한 시간을 갖고 틈틈히 다 읽어볼 계획입니다.





PDF Reader 추천 ( Foxit Reader ) Etc

컴퓨터 사양이 나날이 좋아진다고는 하지만 그에 맞게 AdobeReader 역시 나날이 무거워지는 것 같습니다.

그래서 최근에는 Foxit Reader라고 새로운 프로그램을 사용하고 있는데 Adobe Reader보다는 가벼워서 애용하는 편입니다.

Adobe Reader 때문에 짜증 나시는 분들에게 추천합니다.



http://www.foxitsoftware.com/Secure_PDF_Reader/



Nested Interrupt Firmware

Nested Interrupt란 Interrupt가 발생이 되고 그에 대응되는 Interrupt Service Routine(ISR)을 실행중에 해당 Interrupt나  혹은 다른 Interrupt가 발생되는 경우  먼저 발생된 ISR을 다 마치지 않고 새로 발생된 ISR을 처리하는 것을 말합니다.


대부분의 MCU에서는 Nested Interrupt를 고려하실 필요가 없습니다. NEC의 경우 Nested Interrupt가 된다고 얘기를 듣기는 했는데 확인해본바는 없습니다.


일반적으로 많이 쓰는 ATMEGA의 경우 역시 Nested Interrupt가 기본적으로 지원되지 않습니다.


하지만 여기서 나름이 반전이 있습니다. 제가 ATMEGA를 주로 써서 ATMEGA에 대해서만 한정지어 말씀드리자면은 ATEMGA의 경우 ISR 첫 부분에 자동적으로 글로벌 인터럽트를 DISABLE 시켜주는 코드가 삽입되게 됩니다. 그리고 ISR 마치는 시점에서 글로벌 인터럽트를 ENABLE 시켜줍니다.


이를 다시 말하자면 사용자가 ISR 함수 첫 부분에 글로벌 인터럽트를 ENABLE만 시켜준다면 Nested Interrupt를 사용할 수 있는 것입니다.



하지만 Nested Interrupt를 사용하게 되는 경우에는 ISR 간에 데이터 공유문제가 발생되기 때문에 시스템이 매우 복잡해질 요소가 있습니다. 복잡도의 증가는 버그의 증가로 나타나겠죠.


따라서 대부분의 MCU에서는 Nested Interrupt를 설정해서 쓰는 경우를 본적도 없고 들은 적도 별로 없습니다. 심지어 Nested Interrupt에 대해서 인지하지 못하고 계신 개발자 분들도 많습니다.



이처럼 Nested Interrupt는 예전 스승님이셨던 연구소장님 말씀처럼 “그냥 이런게 있다.” 라고 알고 넘어가는 수준이면될 듯한 내용입니다. 



1 2 3