목록전체 글 (136)
고양이와 코딩
환경MacBookSTM32CubeIDE 최신 버전STM32F103RB + FreeRTOS 실습 프로젝트문제 상황강의와 동일하게 따라했는데 빌드 및 디버그가 정상적으로 진행되지 않았다.주요 증상:__FILENAME__ undeclared 에러 발생.elf 파일이 생성되지 않음Search Project... 에 아무것도 뜨지 않음Unable To LaunchC/C++ Indexer internal errorDebug launch configuration 꼬임원인STM32CubeIDE 최신 버전에서 GCC 컴파일러가 변경되면서기존 강의 프로젝트에서 사용하던 __FILENAME__ 매크로가 기본 제공되지 않음.기존 코드:#define configASSERT( x ) if( ( x ) == 0 ) vAssertC..
연결리스트 문제! 역시 꾸준히 하지 않으니까 매번 새롭게 느껴진다 .. 다시 열심히.. ~ Input: l1 = [2,4,3], l2 = [5,6,4]Output: [7,0,8]Explanation: 342 + 465 = 807.Example 2:Input: l1 = [0], l2 = [0]Output: [0]Example 3:Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]Output: [8,9,9,9,0,0,0,1] Constraints:The number of nodes in each linked list is in the range [1, 100].0 It is guaranteed that the list represents a number that does not h..
MutexSemaphore1. One thread2. Locked / unlocked3. Locking Mechanism1. Multiple thread2. Count3. Signally 세마포어는 자원의 개수 또는 작업 순서를 제어하기 위한 동기화 도구입니다.세마포어의 본질 : 숫자 카운터- 동작 흐름처음 세마포어 값 = 0 (버퍼 비어있음)1. 소비자가 wait()호출 -> 값이 0이니까 sleep2. 생산자가 데이터를 버퍼에 넣고 post() -> 값이 0에서 1이 됨3. sleep상태의 소비자가 깨어남 -> 값이 1에서 0 (버퍼에서 꺼내서 소비) 세마포어는 소유 개념이 X누가 wait했는지 상관 없이 다른 스레드가 post 해도 됨 뮤텍스는 공유 자원에 동시에 접근하지 못하도록 보호하는 Lock..
업무를 하다보면, 그냥 앞서 짜여져 있는 코드를 따라 나도 비트 마스크, 시프트 연산을 마구 사용하지만막상 남이 짠 연산 코드를 빨리 해석해서 공유해야 하는 상황이 오면 당황하게 된다 .... 사실 나는 컴퓨터가 아니기 때문에 왜 곱셈/나눗셈을 안하고 시프트 연산을 썼을까 .. 하면서 1차로 함수 이름으로 어떤 연산을 하는지 추측하곤 한다 ^^ ㅋ 이렇게 하면 훨씬 쉬워지지만 ~ 비트 연산도 결국 연산이니까 ,,, 어렸을때 곱셈 나눗셈 구몬 무한반복 했을때처럼 하면 좀 익숙해지지 않을까 싶어서 .. 아무튼 시작 1. 비트 제어 패턴value |= (1U | 연산자는 또는(OR)니까, 같은 자리에 둘 중 하나만 1이어도 1이 된다! & 연산자는 그리고(AND)니까, 같은 자리에 둘 다 1이어야 1이 된..
Chapter 01ARM은 프로세서 설계를 전 세계의 선도적인 반도체 회사들의 대부분을 포함한 비즈니스 협력사들에게 라이센스를 해준다.협력사들은 ARM의 저가이면서 저전력 프로세서 설계를 기반으로 하여 프로세서와 마이크로컨트롤러, 그리고 시스템-온-칩(SoC)를 만든다.이러한 비즈니스 모델은 일반적으로 지적 소유권(Intellectual Property: IP) 라이센싱이라고 불린다. → ARM은 직접 반도체를 생산하지 않고, IP라이선스를 제공하는 비지니스 모델을 가지고 있음즉, 반도체 회사(삼성, 퀄컴, 미디어텍, NXP ,,,)가 ARM으로부터 CPU코어(IP)를 라이선스 받아, 자신들의 칩(SoC, MCU등)에 포함시키는 방식임.칩을 개발하는 회사들은 필요한 IP들을 라이선스로 구매하여 조합하고,..
1. 모음 제거#include #include #include char* solution(const char* my_string) { char vowels[] = {'a', 'e', 'i', 'o', 'u'}; int str_len = strlen(my_string); char* answer = (char*)malloc(str_len + 1); int idx = 0; for(int i = 0; i vowels 는 배열로 선언. answer는 얼마가 될 지 모르는 문자열을 동적으로 할당하는것이므로 포인터가 필요!str_len + 1은 문자열 뒤 '\0' 공백이 차지하는 자리를 고려한것 2. 배열의 평균값 #include #include #include // number..