본문 바로가기

SW 개발 공부

(77)
[stm32 chip 메모리구조#2] 메모리 디버깅 방법 프로그램 디버깅시에 현재 할당되어있는 메모리상태를 확인하고자 할때 참조. 1. Build Analyzer 사용  Build Analyzer를 사용하면 현재 프로그램의 RAM & Flash 사용 공간 및 여분을 확인 할 수 있다.추가적으로 Memory Details를 클릭하면 각 영역들의 주소와 크기를 확인 가능하다. 특히 문제가 발생하였을 때, registers 창의 SP와 heap_end를 비교하여 메모리가 Full 되었는지 여부를 확인 가능하다.heap_end를 확인하는 방법은 다음과 같다. heap의 마지막 주소를 확인하는 방법 우선 .ld에서 heap_end를 참조 가능하도록 변수 선언해준다./* User_heap_stack section, used to check that there is eno..
윈도우 부팅시 작업 스케쥴러 실행 안되는 문제 특정 프로그램을 윈도우 부팅시 자동으로 실행되도록 설정하였지만, 실행되지 않았다. 원인은 아래와 같다. 1) 프로그램 실행 권한. - 실행하려는 프로그램의 권한을 낮춘다. - 실행시 관리자 사용 권한 알람이 발생한다면 알람 기준을 낮춰줘야 한다. 2) 작업 스케쥴러 설정 - 보안 옵션에 "작업을 실행할 때 사용할 사용자 계정"을 Administrators로 설정한다. - 위와 같이 설정하기 위해서는 "사용자 또는 그룹 변경"을 클릭한다. - 이후 팝업창의 개체 이름 입력란에 "Administrators"를 작성 후 이름 확인을 클릭한다. - 위와 같은 작업을 진행시, 속성창에서 작업을 실행할 사용자 계정이 Administrators로 변경된다. 추가로 가장 높은 수준의 권한으로 실행 체크박스를 클릭한다...
ISR 내부 루틴의 간소화 필요성 timer를 디버깅시, timer는 설정한 time에 의하여 인터럽트 되기에 디버깅 중단점으로 멈춰있어도 인터럽트 트리거는 독립적으로 동작함. 따라서 인터럽트 루틴 내에 많은 작업이 존재한다면, 문제가 발생 할 수 밖에 없음. 인터럽트 루틴 내에서는 플래그만 설정하고 동작은 다른 쓰레드에서 처리하는것이 바람직함. 그렇다면 C# 내에서 timer와 thread는 우선순위가 어떻게 되는가? thread 동작중, timer가 동작하면, timer 동작이 끝날 때 까지 thread는 동작하지 않는가? -> timer 내부에서는 루틴들을 최소화해야한다. 이유 1) - timer 외부에서 발생되는 문제 -> 기존 루틴으로 돌아가기까지 시간이 오래걸려 에러의 원인이 된다. - timer 내부에서 발생되는 문제 -> ..
stm32에서 printf() 함수 사용하기 사용 방법 1) Project에서 설정 변경 Project -> Properties -> MCU Setting -> Runtime Library -> Standard C 선택 * float 형도 printf() 사용하기 위하여 Use float with printf from newlib-nano checkbox 체크 2) 표준 입출력 헤더파일 추가 /* USER CODE BEGIN Includes */ #include /* USER CODE END Includes */ 3) main함수 이전 _write 함수나 __io_putchar 함수 재정의 printf() 함수는 _write 함수를 호출하고, _write 함수는 __io_putchar 함수를 호출한다. 따라서 _write 함수나 __io_putch..
ERROR: File 'Oracle.DataAccess.dll' targeting 'AMD64' is not compatible with the project's target platform 'x86' 결론) - Setup 프로젝트의 Target Platform을 x64로(프로젝트의 Target Platform과 동일하게) 변경해주면 된다. 프로젝트는 정상적으로 구동 되었으나 배포를 위한 Setup 프로젝트에서 프로젝트 출력을 빌드하니 위의 에러 메시지가 발생하였다. 위의 에러 메시지는 Oracle.DataAccess.dll을 포함시켜 설치파일을 만들 때 발생한다. 단, 위의 에러 메시지는 해당 dll을 포함시킨 프로젝트를 빌드할때만 발생하는것이 아니다. 현재 프로젝트의 타겟 플랫폼과 Setup 프로젝트의 타겟 플랫폼이 다를 때 발생한다. 즉, 프로젝트의 타겟 플랫폼을 x64(64bit)로 설정해 놓은 후 해당 출력을 타겟 플랫폼이 x86인 Setup 프로젝트에서 빌드 할 시 위와 유사한 메시지가 출력..
const의 역할 const는 상수를 선언하는 키워드로, 선언한 변수를 상수화 시켜준다. 즉, 이후 변경이 불가능하게 한다. 사용 예) const PI = 3.1415; ** 추가 정보 상수와 변수 차이) * 처리 속도 차이 -> 변수는 컴파일 시 값이 변경될 수 있기때문에 처리 시간이 더 느림.
FPGA 문법 VHDL 1) entity - 인터페이스 정의에 사용됨.( 입 출력 정의 ) 사용 예) entity AndGate is Port ( A : in STD_LOGIC; B : in STD_LOGIC; Y : out STD_LOGIC); end AndGate; 2) std_logic & std_logic_vector 차이 * std_logic - 단일 비트 변수 자료형. * std_logic_vector - 여러 비트 변수 자료형 - std_logic의 배열형식. 3) 대입 연산. 예시) mpd
C# 폴더 없으면 생성하기 1. DirectoryInfo 사용 Directoryinfo di = new Directoryinfo(path); if(di.Exist == false) di.Create(); - Directoryinfo 객체로 작업할 것이 있다면 위의 코드방식을 사용하는 것이 편리함. 2. Directory 사용 if(Directory.Exist(path)==false) Directory.CreateDirectory(path); - 추가적인 작업이 필요하지 않다면 위의 방식대로 사용할것.