ASRock BC-250 보드 RAZER CORE X CHROMA 에 설치하기 4

RAZER CORE X CHROMA 에 있는 12V 전원 을 사용하는 허브 보드를 설계중이다. 새로 설계되는 허브에는 4개의 USB 2.0 포트, 이더넷 포트를 통한 오디오 출력, 오디오 엠프 회로, 전원 감지 및 오디오 엠프 컨트롤을 위한 MCU 가 포함되어있다. 전원 소스는 12V 와 5VSB 를 사용하며, MCU 만 5VSB 를 사용하고 나머지 장치들은 12V 를 사용하도록 설계하였다. 보드 고정의 경우 RAZER CORE X CHROMA 에 장착 되어있던 PCIE 허브 카드의 브라켓을 그대로 사용할수 있도록 설계하였다. 핀 헤더를 통해 BC-250 의 USB 2.0 포트에 납땜하여 사용할 목적으로 설계 되었다. USB 2.0 포트 하나를 희생해서 사용한다. USB 허브 전원은 BC-250 에서 가져오지 않고 내부 전원 회로에서 컨버팅 된 5V3A 전원을 커런트 리미트로 제한하여 사용하도록 설계하였다. 그리고 이 보드에는 BC-250 전원이 꺼졌는지 감지하여 먼저 제작 하였던 PSU 컨트롤러로 신호를 보내주는 회로가 설계되어 지난번에 우려 했던 PSU 가 꺼지지 못하는 상황을 방지 할 수 있다.  오디오 엠프를 넣은 것은 개인적인 욕심인데 스피커를 내장하기 위함이다. 엠프를 넣지 않았다면 사이즈도 더 작아지고 설계도 많이 쉬웠을 것이다. 가장 큰 걸림돌은 USB 포트와 이더넷 포트의 위치를 바꿀 수 없다는 것 이다. 아직 수정해야 할 부분이 많아서 먼저 설계했던 브라켓이 오기 전까지는 설계를 확정 할 수 없다.

함수형 프로그래밍

## 함수형 프로그래밍(functional programming)
함수형 프로그래밍은 프로그래밍 방법론 중 하나로, 수학적 함수의 개념을 기반으로 한다. 상태와 가변 데이터를 최소화하고, 순수 함수를 조합하여 프로그램을 구성합니다. 이는 부수 효과를 줄이고, 코드의 예측 가능성과 재사용성을 높이는 데 중점을 둡니다.

---
## 순수 함수 예제 순수 함수는 동일한 입력에 대해 항상 동일한 출력을 반환하며, 함수 외부의 상태를 변경하지 않는다. C 언어에서의 예는 다음과 같다. ```c int add(int a, int b) { return a + b; } ```
---
## 순수하지 않은 함수 예제 순수하지 않은 함수는 외부 상태를 변경하거나, 동일한 입력에 대해 다른 출력을 반환할 수 있다. C 언어에서의 예는 다음과 같다 ```c int counter = 0; void increment() { counter++; } ``` 이 함수는 전역 변수 counter의 값을 변경하므로, 외부 상태에 영향을 미치는 순수하지 않은 함수이다.
---
## 함수형 프로그래밍의 장점 - 가독성 향상: 순수 함수와 불변성을 강조하여 코드의 이해와 예측이 용이하다 - 디버깅 용이: 부수 효과가 없으므로, 함수 단위 테스트와 디버깅이 수월하다. - 병렬 처리 효율성: 상태 공유를 최소화하여 동시성 문제를 줄이고, 병렬 처리를 효율적으로 수행할 수 있다.
---
## 함수형 프로그래밍의 예 C 언어는 함수형 프로그래밍을 직접 지원하지 않지만, 함수 포인터와 고차 함수를 활용하여 일부 개념을 구현할 수 있다. 예를 들어, 배열의 각 요소에 함수를 적용하는 map 함수를 다음과 같이 정의할 수 있다. ```c void map(int* array, int length, int (*func)(int)) { for (int i = 0; i < length; i++) { array[i] = func(array[i]); } } int square(int x) { return x * x; } int main() { int numbers[] = {1, 2, 3, 4, 5}; int length = sizeof(numbers) / sizeof(numbers[0]); map(numbers, length, square); for (int i = 0; i < length; i++) { printf("%d ", numbers[i]); } return 0; } ``` 이 예제에서 map 함수는 배열의 각 요소에 square 함수를 적용하여, 함수형 프로그래밍의 일부 패턴을 구현하고 있다. 함수형 프로그래밍에서는 for나 while 같은 반복문 대신 map, filter, reduce 같은 고차 함수(Higher-Order Functions)를 사용하여 데이터를 변환하거나 처리할 수 있다. 이 방식은 코드의 가독성을 높이고, 반복문의 부수 효과를 줄여 함수형 프로그래밍의 장점을 살려준다.
---
## map의 개념 map 함수는 배열의 각 요소에 함수를 적용하여 새 배열을 반환하는 고차 함수이며, 원래의 배열은 변경되지 않는다. map을 사용하면 전통적인 반복문과 다르게 상태를 변경하지 않고 불변성을 유지할수 있다.
---
## map을 사용한 기본 예제 ### 전통적인 반복문 예제 ```c void square_array(int* input, int* output, int length) { for (int i = 0; i < length; i++) { output[i] = input[i] * input[i]; } } int main() { int input[] = {1, 2, 3, 4, 5}; int output[5]; int length = sizeof(input) / sizeof(input[0]); square_array(input, output, length); for (int i = 0; i < length; i++) { printf("%d ", output[i]); } return 0; } ``` ### map을 사용한 방식 ```c void map(int* input, int* output, int length, int (*func)(int)) { for (int i = 0; i < length; i++) { output[i] = func(input[i]); } } int square(int x) { return x * x; } int main() { int input[] = {1, 2, 3, 4, 5}; int output[5]; int length = sizeof(input) / sizeof(input[0]); // map을 사용해 배열의 각 요소에 square 함수 적용 map(input, output, length, square); for (int i = 0; i < length; i++) { printf("%d ", output[i]); } return 0; } ```
---
### 코드 동작 설명 - map 함수 - input 배열을 받아 각 요소에 대해 func 함수를 실행하고, 결과를 output 배열에 저장 - func는 고차 함수로, 매핑될 함수를 파라미터로 전달 - square 함수 - 주어진 숫자를 제곱하는 순수 함수 - map 내부에서 호출되며 배열의 각 요소에 적용 - 출력 결과 - input 배열 [1, 2, 3, 4, 5]의 각 요소가 square 함수에 의해 제곱되어 output 배열 [1, 4, 9, 16, 25]이 출력
---
### map 사용의 장점 - 코드 간결성: map은 반복문에 비해 더 간단하고 가독성이 높다 - 재사용 가능성: 다양한 변환 함수(square, increment 등)를 쉽게 교체하여 사용할 수 있다 - 불변성 유지: 원래 배열은 변경되지 않고, 결과를 새로운 배열에 저장 - 부수 효과 제거: 반복문처럼 전역 변수나 상태를 변경하지 않는다.
---

Comments

Popular posts from this blog

[POE] - 패스 오브 엑자일 획득키 F 의 사용법 (Path of Exile)

[AD보드] - 맥북 패널을 모니터로 만들기 ( LP154WP4-TLA1 )

[Arduino] - HC-06를 이용해 PC 와 Arduino 블루투스 연결