6주차 기록으로 돌아왔습니다. 이번주는 월,화 이틀 밖에 수업에 참여하지 못했씁니다.ㅠㅠ
수요일에는 창원에 있는 기업의 면접과 주말에는 가족 행사로 인해 부산에서 지내가다 올라왔는데요 그래서 이번주는 기록을 쉬어갈까? 하다가도 기다리고 있는 독자 여러분들의 성원에 힘입어 일상을 기록하고자 돌아왔습니다.

ARM Processor

지난 주에 이어 이번 월,화 양일간 Nucleo-F401re보드를 활용해서 이런 저런 코드를 테스트 해보았습니다. 사실 회로 기반 지식이 빈약한 제게는 가혹한 실습이었는데요...

그래도 든든한 동료들에게 도움을 받으며 차근차근 따라 갈 수 있었습니다.

To register and instruction

  1. register

    core register = { r0 , r1 , ….. , r12 , r13 , r14 , r15 }

    1. system register
      1. GPR (General purpose register) ⇒ 주소 없음

        • r0~ r12 : scratch pad register ( by ALU )
      2. SPR (special purpose register) ⇒ 주소 있음

        • r13 : stack pointer : register (point at top) [full dec]
          • full : sp가 가리키는 주소에 항상 값이 있음
          • dec : 값이 추가되면 메모리 주소 값이 낮아짐
        • r14 : link (return address) : register
          • BL (branch with Link)
            - Jump : 명령어의 실행 흐름을 서브루틴(함수)의 시작 주소로 이동
            - Link : 실행을 마친후 돌아와야 할 주소를 r14에 저장.

            ⇒ Nested Call 의 경우 새로운 리턴 주소가 LR에 덮어쓰여지기 때문에 기존 LR 주소는 스택에 백업

        • r15 : program counter : register [ FU에서 다음에 가져올 instruction 주소가 들어있음]
      3. SFR(special function register) ⇒ 주소 있음

        1. Configuration
          GPIO → IN/OUT Pins

        2. Control
          Turn off / on

        3. Data
          Read / Write from and to

        4. Status

    2. device register
  2. Instruction

    why ? ⇒ Debugging에 도움이 된다. + 조금 더 깊은 이해가 가능하다.

    간단한 어셈블리어 => 코드 이해에 도움이 된다.

    • 데이터 이동
      오른쪽에서 왼쪽으로 이동

      mov {cond} {S} Rd, Rd :=Oprnd2

      논리 연산 , 비교 , 더하기 , 빼기
      ADD r0,r1,r2 ===== > r0 = r1 + r2
      ADDS r0,r1,r2 ; === > report to flag@ALU ⇒ flag(NZCV …)

    • COM , B

      $ CMP r1,r2 if , r1==r2 === > z=1 (flag)
      $ BEQ yes === > 조건 분기 NZCV 값으로 확인.
      $ BNE no

    • Supervisor Call

    • Load : LDR{cond} Rd , <a_mode2>

      • LDR : Load
        • LDR r0 , [ r1 , #option ] ; < — : r0에 저장
        • LDR r1 , [pc, #196] ⇒ pc에서 값을 가져오는 것은 ROM에서 가져옴 → const 값을 가져온다.
      • STR
        • STR r0, [ r1 , #option] ; — > : r1에 저장.
    • 모든 ARM 어셈블리 명령어는 조건부 실행이 가능하다 (conditional execute)

💡 32bit? → Register의 폭 → ALU에서 처리할 수 있는 데이터 크기 == word

주소의 크기와는 다르다 ARM 32bit → 2바이트만 주소에 사용

⇒ 프로그램 코드의 길이가 줄어든다.

⇒ 프로그램 실행 시간은 더 늘어난다. why ❔ 주소 확장 + 세그먼트 계산에 오버헤드 발생

실행 속도보다 메모리를 적게 쓰는 것이 더 중요할 때 사용 ⇒ 요즘은 혼합형으로 사용됨.

  • Bootloader : 조그만 메모리에 넣기 위해 메모리 효율을 선택.

PSR(program Status Register)

  • CPSR ( current program status register)
  • SPSR (stored)
  • SVC모드에서만 접근 가능
    • N : 음수 (꼭대기)
    • Z : 0
    • C : 캐리비트 → 넘어간 것 (범위를 넘긴 것)
      • B (borrow)⇒ 작은 수에서 큰 수를 뺄때 왼쪽 상위 자릿수에서 값을 가져오는 행위 ⇒ C비트를 쓴다.
      • 캐리아웃이 발생하면 C =1
      • 보로우가 발생하지 않으면 C =1
    • V : 오버 플로우
    • IF : IRQ , FIQ 발생 여부
    • T : Status bit
    • mode : 프로세서 모드
  • R14, R13은 모든 모드에 존재한다.

간단하게 사용하는 ARM processor의 특징을 파악하고 이제 사용하는 Board의 Manual을 읽어가면서 pinctrl 변경과 코드 실습을 진행했습니다.

사실상 메뉴얼을 읽고 이해하는게 어려워서 따라가기가 많이 벅찼습니다. 별도로 공부하는 시간을 마련해서 board의 이해를 작성한 velog를 업로드하도록 하겠습니다.

ㄸㅣㅇㅛㅇ ... (with 열공 정근 두상)
나는 회로도만 보면 현기증이 나벌여.😵‍💫

그래도 스위치 제어를 해보니 짜릿하긴 했슴 .
저항도 모르고 끼운 나 반성하자..

간단한 면접 후기

처음으로 서류 지원 후 면접을 다녀왔다.
DN 솔루션즈의 제어 R&D 직무 면접 준비를 하면서 전공 지식 기반 PT 면접이 있다고 해서 근 일주일 동안 제어 공학에 대한 공부만 급하게 하다가 다녀왔다 ...ㅠ.

가보니 제어 공학 외에 전자, 컴퓨터 공학 문제도 있었고 선택해서 한 문제에 대한 풀이를 진행했다. 음 공부한 전공 지식을 풀까 생각했지만 꼬리 질문에 약간의 부담감을 느끼고 메모리 구조에 대한 문제 풀이를 진행했다.

압박 면접은 아니었지만 잘 모르는 분야의 질문이 들어오니 자동으로 압박이 되었다. 제어 공학 위주로 공부를 하다보니 기업의 제품군에 대한 조사가 미흡했고 기초적인 관심도를 물어보는 질문에서 제대로 답변을 하지 못했다. 오히려 면접관님께서 나에게 알려주는 수준 ;;

그래도 빠져나가려는 혼을 붙들어매고 어떻게든 답변을 마친 것 같다. 사실 면접 끝나고 은근 답변 잘 했을지도? 라는 생각을 했지만 집에 와서 답변 피드백을 해보니 엉망진창이었더라..는. .

친절하신 면접관님들과 재밌는 경험을 하며 뉴비에서 약간 1렙 정도 렙업한 기분이 들었다.

DN솔루션즈 제어 R&D 직무 면접을 준비하게 된다면 댓글을 달아주시면 가능한 선에서 도움을 드리도 록하겠습니다.!!!

나의 지원서를 되돌아보며 computer vision 기반으로 활동들을 해왔고 어던 회사를 지원하던지 vision으로 약소하나마 나의 전문성을 기반으로 어떤 기여를 할 수 있을지 구체적으로 준비를 해가야겠다는 feedback을 남기며

6주차 기록 일지도 끗!!!


금주의 맛집

돼지벅스

한식 뷔페 G.O.A.T
⭐️⭐️⭐️⭐️+0.5점
고깃집이지만 점심에는 한식 뷔페를 운영한다. 근처 한식 뷔페들은 뷔페라고 쓰여있지만 다소 눈치가 보이지만 여기는 부담 없이 먹을 수 있다 매주 메뉴도 바뀌고 instagram에서 메뉴를 확인하고 갈 수 있어 설렘이 있다.
shout out to 규배 공.

profile
세상의 어려운 문제를 해결하자

0개의 댓글