본문 바로가기

분류 전체보기895

심볼 SYMBOL Linker가 알아볼 수 있는 기본 단위이며 Link를 한 후에는 자신만의 주소를 갖게 되는 특별한 단위 Symbol의 이름은 그 Symbol이 갖는 메모리 영역의 시작 주소를 가리키는 Linker만의 pointer같은 존재 Debugging시 Symbol의 이름이 사용됨 Linker만이 이 Symbol을 참조하며, Linker가 Symbol들을 주소로 모두 변환해서 binary로 만듬 (실제로 메모리에 적재되는 것은 아님) 출처 : http://recipes.egloos.com/5009181 2022. 12. 2.
오브젝트 파일 .o .obj 오브젝트 파일(Object File) 어셈블러를 통해 변환된 어셈블리 코드는 이제 더 이상 사람이 알아볼 수 없는 기계어로 변환되는데 이를 오브젝트 코드(목적코드)라 부르고, 오브젝트 코드로 구성된 파일을 오브젝트 파일(Object File)이라 부른다. 이 오브젝트 파일은 특정한 파일 포맷을 가진다. (Windows의 경우 PE(Portable Executable), Linux의 경우 ELF(Executable and Linking Format)) 오브젝트 파일 포맷 Object File Header : 오브젝트 파일의 기초 정보를 가지고 있는 헤더 Text Section : 기계어로 변환된 코드가 들어 있는 부분 Data Section : 데이터(전역 변수, 정적 변수)가 들어 있는 부분 Symbol.. 2022. 12. 2.
컴파일 과정 컴파일 과정 1. Pre-processing 2. Compile 3. Assemble 4. Link 1. Pre-processing 전처리기(Preprocessor)를 통해 소스 코드 파일(*.c)을 전처리된 소스 코드 파일(*.i)로 변환하는 과정 주석 제거 : 소스 코드에서 주석을 전부 제거한다. 헤더 파일 삽입 : #include 지시문을 만나면 해당하는 헤더 파일을 찾아 헤더 파일에 있는 모든 내용을 복사해서 소스 코드에 삽입한다. 즉, 헤더 파일은 컴파일에 사용되지 않고 소스 코드 파일 내에 전부 복사된다. 헤더 파일에 선언된 함수 원형은 후에 링킹 과정을 통해 실제로 함수가 정의되어 있는 오브젝트 파일(컴파일된 소스 코드 파일)과 결합한다. 매크로 치환 및 적용 : #define 지시문에 정의.. 2022. 12. 2.
STM32 ] HAL_GetTick() 오버플로우에 대한 의문 Non Blocking 코드를 작성할 때 아래와 같은 구문을 많이 작성한다. 100ms 간격으로 무언가 실행하는 코드이다. 이때 의문이 들 수 있다. 오버플로우가되면 어떡하지, 그래도 100ms 간격으로 실행될까? uint32_t start_tick= HAL_GetTick(); while (1) { if (HAL_GetTick() - start_tick >= 100) { start_tick = HAL_GetTick(); // do something } } 결론은 그렇다이다. 다음의 쉬운 예제를 보자. start_tick(b)이 255이고 current_tick(a)이 오버플로우가 되서 0이 되었다면 차이(c)는 1이어야 맞을 것이다. uint8_t a, b, c; a = 0; b = 255; c = a .. 2022. 12. 2.
TMS320F28388D ] FLASH Build 와 RAM Build 같이 사용하는 .cmd 파일 만들기 메모리 맵을 보며 .cmd 파일을 재작성하였다. 지금보니 CLA 또는 DMA Access가 되는 램 블록이 있고 안되는 블록이 있네. 그래서 만약 DMA를 사용한다면 buffer를 GSRAM에 배치한다고 #pragma 를 통해 지시해주어야 한다. // Place buffers in GSRAM #pragma DATA_SECTION(sData, "ramgs0"); #pragma DATA_SECTION(rData, "ramgs1"); 아무튼.. 램빌드와 플래시빌드 시 실행구문은 #if defined(_FLASH)를 통해 구분해 두었고, 메모리 정의 부분에는 블록/섹터 별로 나누어져 있는게 보기 어지러워서 합쳐서 정의하였다. 물론 메모리 정의 부분에서 이렇게 합치지 않아도, 섹션 배치 부분에서 꺽쇠와 OR 연산.. 2022. 12. 1.
CCS ] 링커 커맨드(.cmd) 파일에 ALIGN(x) directive를 넣는 이유 Why do you use align directive (ALIGN(x)) in the linker cmd files provided in the C2000Ware examples? Answer. Fapi_AutoEccGeneration mode (one of the Flash API programming modes) programs the supplied data portion in Flash along with automatically generated ECC. The ECC is calculated for 64-bit aligned address and the corresponding 64-bit data. Any data not supplied (within a given 64-bit aligne.. 2022. 12. 1.
RS232 등 시리얼 케이블 고장 유무 확인법 사진은 ttl to USB 모듈이긴 하나 사진과 같이 rx, tx 를 쇼트시켜 물리적으로 루프백 환경을 만들고 테스트를 한다. 전압레벨이나 baudrate를 신경쓸 필요는 없다. 시리얼 터미널에서 타이핑(tx)을했을 때 글자가 출력(rx)되야 정상이다. 2022. 12. 1.
EABI 먼저 ABI란 응용 프로그램 이진 인터페이스(Application Binary Interface, ABI)의 약자로 응용 프로그램과 운영 체제 또는 응용 프로그램과 해당 라이브러리 그리고 응용 프로그램의 구성요소 간에서 사용되는 낮은 수준의 인터페이스이다. API가 소스 코드에서 사용된다면 ABI는 바이너리에서 호환이 가능하다는 점이 다르다. 그리고 EABI(임베디드 응용 프로그램 이진 인터페이스, Embedded-Application Binary Interface)는 임베디드 소프트웨어 프로그램을 수행하는 파일 형식, 자료형, 레지스터 사용, 스택 프레임 조직, 명령 변수를 위한 표준 변환을 정의하고 있다. EABI를 지원하는 컴파일러는 이를 지원하는 또 다른 컴파일러가 만든 코드와 호환되는 목적 코드.. 2022. 11. 30.
TMS320F28388D ] printf 사용하기 위한 설정 c표준 입출력함수 전부 해당한다. 먼저 stdio.h 를 include 하고 project properties - Build - Linker - Basic Option 에 가서 Heap size를 늘린다. Heap Size가 공백인 경우 default 값은 0x400 이다. Stack size 도 늘린 후 cmd 파일에 가서 메모리맵을 보며 .stack 과 .sysmem(=.heap)을 적절히 할당한다. Compiler - Advanced Options - Language Options 에 가서 --printf_support를 체크한다. 기존에 설정 됐더라도 다시 눌러줘야 summary of flags set 에 뜨는 것 같다. --printf_support의 옵션인 minimal/full/nofloat.. 2022. 11. 30.
CCS, Code Composer Studio ] 재사용 용이한 Portable Project 만들기 (device_support 와 driverlib 모두 사용) STM32CubeIDE 와 달리 CCS를 사용해보니 프로젝트 하나 생성해 쓰는 것도 쉽지가 않다. 예제 프로젝트에서 변경과 추가를 시작하는게 쉽기는 하지만 그렇게만 하다보면 프로젝트가 어떻게 구성되어 있는지도 모르고 사용을 하게 된다. 다음의 세가지로 나누어 설명할텐데 개인적으로 초보인 입장에서 라이브러리를 포함시키고 폴더나 파일을 링크해서 사용하는 것보다는 프로젝트 안에 복사해서 쓰는 것을 선호한다. (나중에 안쓰는 파일은 삭제해 코드크기를 줄이면 된다.) 1. driverlib 사용 프로젝트 2. device_support 사용 프로젝트 3. driverlib 와 device_support 모두 사용하는 프로젝트 공통과정 1. File - New - CCS Project 2. Target에서 MCU를.. 2022. 11. 27.
TMS320F28388D ] SD카드 읽기/쓰기 // FILE: sd_fat32.c // // TITLE: SD FATFS Library Example // //! \addtogroup driver_example_list //! SD FATFS Library Example //! //! This example demonstrates how to use the FATFS library. //! //! \b External \b Connections \n //! - Connect the SPI signals identifed in the SysConfig to an SD CARD. //! //! \b Watch \b Variables \n //! - None. //! // // Included Files // #include "driverlib.h" #i.. 2022. 11. 24.
DSP ] EALLOW / EDIS / DINT / EINT/ ERTM / DRTM / ESTOP0 MMR(Memory Mapped Register : Address를 부여받은 레지스터) 영역은 일반적으로 Protect가 걸려있다. 해당 protected 영역에 접근하려면 이 보호막을 제거했다가 다시 걸어줘야 하는데 그 때 쓰이는 명령어가 EALLOW와 EDIS 이다. 어셈블리 명령이기 때문에 원래는 asm("EALLOW"); asm("EDIS"); 라고 써야하지만 어딘가 다음과 같이 인라인으로 정의되어 있기 때문에 그냥 EALLOW, EDIS 라고 쓰면 된다. 이외에 다른 인라인 어셈블리 명령어들도 있다. #define EINT __asm(" clrc INTM")// 전역 인터럽트 on #define DINT __asm(" setc INTM") // 전역 인터럽트 off #define ERTM __a.. 2022. 11. 17.
한글 ] 목차 만들기 2022. 11. 17.
CCS ] 코드 수행시간 계산하기 Perspective Debug view 상태에서 Run - Clock - Enable 클릭 그럼 CCS 하단에 시계모양 아이콘이 보인다. 수행시간을 계산할 코드 앞뒤로 중단점을 잡아준다. 첫번째 중단점에서 걸렸을 때 Run - Clock - Rest을 누른다. 혹은 Clock Setup 에서 Rest Option Auto를 선택해 줄 수도 있다. 다시 F8을 눌러 실행시키고 두번째 중단점에서 걸렸을 때 Clock Cycle을 알 수 있다. 이 값은 CPU의 동작 Cycle Count로 System Clock 이 200Mhz로 설정되어 있다면 (1/200,000,000)인 5ns * 1,871,256 해서 코드 수행시간은 9.3ms 정도로 측정된다. 간단히 측정하려면 이 방법을 쓰고 보통은 tick값을 .. 2022. 11. 16.
Windows ] 송수신 테스트용 더미파일 만들기 파일 만들 위치에서 cmd . 혹은 파일명에 경로도 같이 쓴다. fsutil file createnew 파일 사이즈는 byte 단위 > fsutil file createnew test.txt 1024 1KB의 더미 txt파일 만들기 한글 더미 텍스트 생성기 : https://hangul.thefron.me/ 영어 더미 텍스트 생성기 : https://www.lipsum.com/ test000 부터 test999 까지 반복해 생성하는 윈도우 배치파일 @echo off setlocal enabledelayedexpansion set file_prefix=test REM set file_extension=.txt set file_size=1048576 set num_files=1000 for /l %%i in.. 2022. 11. 15.
부팅 SD카드 포맷하기 1. diskpart 2. list disk 3. sel disk * 3. list part 4. clean 혹은 각각 파티션을 sel part * 후 delete partition override 5. create partition primary 6. list part 7. sel part 1 8. active 9. format fs=fat32 quick 파일시스템 지정해 빠른포맷 10. assign 드라이브 문자 할당 11. exit 2022. 11. 15.
개발규격서 SS, PIDS, CIDS 체계규격서(System Specification) 부체계개발규격서(PIDS, Prime Item Development Specification) 구성품개발규격서 (CIDS, Critical Item Development Specification) 를 하향식으로 순차적 개발한다. 체계설계(SRR), 기본설계(PDR), 상세설계(CDR) 단계에 따라 초안작성과 확정시기가 다르다. 2022. 11. 14.
CDRL 과 SDRL In United States military contracts, Contract Data Requirements List (CDRL, pronounced SEE-drill) is a list of authorized data requirements for a specific rocurement that forms a part of the contract. The CDRL is a register of the deliverable data items. Subcontract Data Requirements List (SDRL) is a prime contractor flow-down of the CDRL requirements to a subcontractor. Generally the prime will.. 2022. 11. 14.
STM32 ] lwIP 통계와 디버그 기능 활성화하기 (LWIP_STATS, LWIP_DEBUG) lwipopts.h 파일 수정 및 추가 /*----- Value in opt.h for LWIP_STATS: 1 -----*/ #define LWIP_STATS 1 //... /* USER CODE BEGIN 1 */ #define LWIP_DEBUG 1 #define NETIF_DEBUG LWIP_DBG_ON #define DHCP_DEBUG LWIP_DBG_ON #define UDP_DEBUG LWIP_DBG_ON #define MEMP_DEBUG LWIP_DBG_ON #define MEM_DEBUG LWIP_DBG_ON #define ICMP_DEBUG LWIP_DBG_ON /* USER CODE END 1 */ arch.h 파일에 다음과 같이 정의되어 있기 때문에 printf를 redirectio.. 2022. 11. 11.
LwIP 메모리 옵션 설정 lwIP stack 사용 시 메모리 옵션 설정이 매우 중요하며 lwipopts.h 에서 사용자가 재정의 할 수 있다. lwIP Wiki 에서 소개하는 메모리 관리 팁 https://lwip.fandom.com/wiki/Lwipopts.h#Memory_management_(RAM_usage) Lwipopts.h lwipopts.h is a user file that you can use to fully configure lwIP and all of its modules. You do not need to define every option that lwIP provides; if you do not define an option, a default value will be used. Therefore, y.. 2022. 11. 11.
Wireshark ] 종료 전 또는 새 캡쳐 시작 전 이전 캡쳐 저장할 지 묻는 창 안뜨게 하기 이 창 안뜨게 하기  Edit - Preference Apperance, Confirm unsaved capture files 체크 해제 2022. 11. 6.
한글 ] 문단번호 단축키 문단번호 적용하기 : Alt + Shift + Insert 문단번호 1번부터 시작하기 : Alt + Shift + Insert 위의 단축키와 똑같다. 문단번호 잇기 만약 아래 상황에서 '라'를 4번으로 하고 싶다면 3번 문단에 커서를 두고 Alt + C, 번호를 이을 문단('라')를 블록설정한 다음 Alt + C 하면 된다. 1. 가 2. 나 3. 다 표/그림 1. 라 2022. 11. 4.
Windows 10 ] 윈도우 시작 프로그램으로 등록하기 바로가기를 만들어 아래 경로에 가져다 둔다. 개별 사용자용 : C:\Users\Users\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 전체 사용자용 : C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 혹은 레지스트리에 등록하는 방법 Window 키 + R, regedit 입력 후 확인 개별 사용자용 : HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run 전체 사용자용 : HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 해당 경로로 먼저 이동한다. 오른.. 2022. 11. 3.
한글 ] 형상관리하기 (버전 비교) 한글 2014 기준 작성됨. 한글에도 형상관리 기능이 있다. 먼저 테스트용 한글 파일을 하나 만든다. 검토 - 문서 이력 관리 버전1로 설명을 남기고 새 버전을 만든다. 그 다음 한글 파일을 아래와 같이 수정해 보았다. 다시 문서 이력 관리를 눌러 현재파일과 비교할 버전을 선택하고 버전 비교를 누른다. 상단의 메모로 보기를 클릭한다. 마치 소스코드 비교툴과 비슷하게 수정된 사항을 확인할 수 있다. 만약 현재문서와 예전버전을 비교하는게 아니라 예전버전과 또 다른 예전버전을 비교하고 싶다면, 문서 이력 관리에서 해당 버전을 더블클릭해 읽기전용으로 연 다음 저장하고 문서 이력 관리 옆의 문서 비교 기능을 사용하면 된다. 2022. 10. 26.
ping 명령어 옵션, tracert 명령어 ping 명령어 옵션 -t : Ctrl + C 를 누르기 전까지 지속 -n count : 보낼 횟수 지정 ex. -n 100 -l size : 보낼 데이터 크기 지정 ex. -l 1500 -f : 조각화를 실행하지 않음 -l 옵션과 -f 옵션은 MTU를 확인하는 데 사용할 수 있다. MTU(Maximum Transmission Unit)란 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷 크기이고, 조각화를 하지 않는다는 건 패킷을 나누지 않고 한번에 보낸다는 뜻이다. 이더넷의 경우 MTU가 1500byte 고 IP헤더가 20byte 붙고 ICMP 헤더가 8byte 붙으니 어플리케이션이 사용할 수 있는 데이터 크기는 1472byte가 된다. 1473byte를 보내려고 하니 fragment가 필.. 2022. 10. 26.
한글 ] 글자 모양복사, 문단 모양복사, 셀 모양 복사 단축키 : Alt + C 복사 : 복사할 곳에 커서를 두고 Alt+C 붙이키 : 붙이기 할 곳에 드래그해서 블락 지정하고 Alt + C 2022. 10. 22.
한글 ] 내어쓰기와 들여쓰기 단축키 내어쓰기 : 내어쓰기 할 곳에서 마우스 커서를 위치시키고 Shift + Tab 표안에서 내어쓰기 : 내어쓰기 할 곳에서 마우스 커서를 위치시키고 Ctrl + Shift + Tab 들여쓰기 또는 내어쓰기 단축키 : Ctrl + F6, Ctrl + F5 첫 줄에 커서를 두고 Ctrl + F6 을 누르면 들여쓰기가 Ctrl + F5 를 누르면 내어쓰기가 된다. 그런데 들여쓰기는 문단모양에 들어가 pt 를 지정해 들여쓰기 하는게 좋은 것 같다. 2022. 10. 22.
C ] 빅엔디안 리틀엔디안 변환함수 구현 + 매크로 함수 작성시 주의점 htons(), htonl(), ntohs(), ntohl() 함수를 쓰지 않고 직접 구현하기 #include #define uint16_t unsigned short #define uint32_t unsigned int #define SWAP_UINT16(x) ((uint16_t)((((x) & 0xff00) >> 8) | (((x) & 0x00ff) > 24) | (((x) & 0x00ff0000) >> 8) | (((x) & 0x0000ff00) 8) & 0x00ff) + (((x) & 0x00ff) 2022. 10. 22.
x86-64 어셈블리어 어셈블리어 어셈블리 언어는 컴퓨터의 기계어와 치환되는 언어이다. 기계어가 여러 종류라면 어셈블리어도 여러 종류여야 함을 의미하며, CPU에 사용되는 ISA(명령어 집합 구조)에 따라서 IA-32, X86-64, ARM, MIPS 등 많은 종류의 어셈블리어가 존재한다. 어셈블리어 기본 구조 어셈블리의 문장은 동사에 해당하는 명령어(Operation Code, Opcode)와 목적어에 해당하는 피연산자(Operand)로 구성된다. Opcode Operand1, Operand2 어셈블리어 명령어의 종류 데이터 이동 : mov, lea 산술 연산 (Arithmetic) : inc, dec, add, sub 논리 연산 (Logical) : and, or, xor, not 비교 (Comparison) : cmp, .. 2022. 10. 20.
한글 ] 표, 그림 캡션 위치 수정하기 표 또는 그림 오른쪽 클릭 후 개체 속성 클릭 - 여백/캡션 탭 캡션위치 선택 후 설정 2022. 10. 19.