머 확정은 아니지만 조금만 삐긋하게 되면

전세계 인류문명은 졸지에 50년 이상은 후퇴하게 되지 않을까 라는 걱정이 든다.

 

세계의 공장 중국을 중심으로 대량생산 대량소비를 패러다임으로

분업화되어 물류가 이를 하나로 묶어 지구촌을 유지해왔는데

 

한국만 국지적으로 생각하면

현재 요소 전량 수입으로 인한 요소수 문제가 불궈지며

극단적으로는 화물 운송이 멈추고 집 근처에 배달되던 식료품들 마저도 오지 못하게 되는 형국이 되진 않을까 걱정된다.

 

그리고 그 와중에 기름값, LNG 값이 폭등한다고 난리인데

물류와 겹쳐 겨울 동사자가 대량발생하거나,

최소한 작년 같은 쾌적한(?) 난방을 기대할 수 없게 되는건 아닐까 우려된다.

 

중국의 경우 환경을 포기하고 석탄을 열심히 때서 전기를 만들었는데

부품부족 사태와 연계하여, 수리 가능한 부붐의 점점 부족해지고 어느순간 최첨단 생산설비들이 하나둘씩 고장나면

낮은 단계의 생산만 가능하게 되고 그런식으로 퇴보하게 되다 보면

정말 손으로 갈아서 하나하나 만들기 시작해 다시 지금의 문명을 이루는데 까지 꽤나 오랜 시간이 걸리기 되지 않을까?

그 동안은 지금을 당연하게 느끼는 세대들에게 있어 문명붕괴 수준이 아닐까 생각된다.

 

 

그리고 요소가 부족하다고 난리인데, 비료는(!) 공기에서 추출한다고 알았었거늘.. (응?)

석탄과 같은 화석연료를 이용하여 요소를 만들고, 그걸 이용해 비료를 만들었다고 하면

비료의 부족으로 생산량이 급락하고, 보릿고개가 다시 오는게 되는건 먼일이 아닐지도 모르겠다.

 

 

LNG 급등에 전력단가 58%↑.. 허리휘는 한전

[링크 : https://news.v.daum.net/v/20211108150833365]

中석탄공급·전력난해소·요소가격 하락, 韓요소수 대란 숨통 트일까

[링크 : https://news.v.daum.net/v/20211108141713268]

'개소리 왈왈 > 정치관련 신세한탄' 카테고리의 다른 글

오랫만에 정치 늬우스  (2) 2021.12.23
코로나 5천 돌파  (0) 2021.12.01
휴가 1일차  (0) 2021.10.27
노태우 전 대통령 89세 별세  (0) 2021.10.26
누리호 성공  (0) 2021.10.21
Posted by 구차니
embeded/raspberry pi2021. 11. 8. 15:41

라즈베리 파이 pico의 GPIO를 이용하여

MEMS 마이크의 PDM 출력을 이용해 PDM을 PCM으로 변환하고(openPDM2PCM)

USB device 장치로 인식시켜 사운드 카드로 만드는 프로젝트

 

걍 ADC로 하는건 없나?

 

[링크 : https://www.hackster.io/sandeep-mistry/create-a-usb-microphone-with-the-raspberry-pi-pico-cc9bd5]

[링크 : https://github.com/ArmDeveloperEcosystem/microphone-library-for-pico]

'embeded > raspberry pi' 카테고리의 다른 글

라즈베리 피코 USB HID 키코드  (0) 2021.11.16
라즈베리 파이 피코 한글 키 입력?  (0) 2021.11.16
rpi3 2초만에 부팅하기  (0) 2021.10.30
rpi 4는 USB to Ethernet이 아닌가?  (0) 2021.09.29
rpi zero otg  (0) 2021.09.27
Posted by 구차니

거울을 달았는데 거울이 거울이 아니라

우둘두둘해서 벽에 붙이려고 손을 댈 수록 점점 거울이 아니게 되어가고 있다 ㅋㅋㅋㅋ

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

병원  (0) 2021.11.13
안경 파괴  (0) 2021.11.11
벽지 수선 준비  (0) 2021.11.06
떵개 사고침  (0) 2021.11.05
구몬 스마트펜 자가 수리  (2) 2021.11.01
Posted by 구차니

거울을 붙여볼까 하는데

거울식 반사 시트는 없대서

500mm x 400mm 정도 되는 거울판(?) 같은거 3장 사옴

일단 벽지는 예비로 있으니 적당히 땜빵해봐야지 머..

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

안경 파괴  (0) 2021.11.11
벽지 망했어 ㅋㅋ  (2) 2021.11.07
떵개 사고침  (0) 2021.11.05
구몬 스마트펜 자가 수리  (2) 2021.11.01
냄비 손잡이 교체  (0) 2021.10.31
Posted by 구차니

오줌 싸고!

벽지 뜯고!

 

아오 -_-

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

벽지 망했어 ㅋㅋ  (2) 2021.11.07
벽지 수선 준비  (0) 2021.11.06
구몬 스마트펜 자가 수리  (2) 2021.11.01
냄비 손잡이 교체  (0) 2021.10.31
휴가 3일차  (0) 2021.10.29
Posted by 구차니

RS485는 LSB 부터 전송하게 되는 듯?

일단 예제는 아래와 같은데

[링크 : https://www.best-microcontroller-projects.com/how-rs232-works.html]

 

대문자 J는 0x4A 이고

 

2진수로 계산하면 0b01001010 이고

 

실제로 찍은걸 보면 0이 Low고 1이 High로 매핑되고

LSB 부터니까 01010010 순서고

레벨을 바꾸어서 보면 10101101 인데

start bit 1개 들어가니 110101101 으로 보인다.

오호.. 신기해라(!)

 

'이론 관련 > 네트워크 관련' 카테고리의 다른 글

nrz encoding/decoding  (0) 2022.08.24
광 케이블 DAC, AOC  (0) 2022.06.30
EtherCAT - Ethernet for Control Automation Technology  (0) 2021.11.01
WiFi 프로토콜, cipher  (0) 2021.09.27
wake on patern matching  (0) 2021.06.10
Posted by 구차니
Linux2021. 11. 3. 11:32

gcc -g 옵션을 주고 빌드하지 않아서 그런가

어드레스만 주구장창 나와서 분석은 실패 ㅠㅠ

 

[링크 : https://blog.naver.com/hymne/221841282483]

[링크 : https://incredible-larva.tistory.com/entry/core-dump-분석을-위한-gdb-간단-정리]

'Linux' 카테고리의 다른 글

uniq 카운트  (0) 2021.12.07
grep 바이너리 파일 일치함  (0) 2021.12.06
convert fb(rgb565) to png 실..패?  (0) 2021.10.18
bash multiple session history  (0) 2021.10.01
특정 pts에서 프로그램 실행하기  (0) 2021.09.27
Posted by 구차니
Linux API/linux2021. 11. 2. 10:44

개략적으로 보면.. select나 poll이나 비슷하게 이벤트 발생시 누가 발생했는지 찾아서 처리해야 하고

epoll은 이벤트 발생시 발생목록을 전달하여, 누가 발생했는지 찾을 필요 없이 바로 처리하면 된다.

다만 select는 1024가 한번에 다룰수 있는 최대 fd 갯수고

poll은 숫자제한은 없지만 선형 탐색을 해야하고, 1500 넘으면 느려진다고 하고

epoll이 1500 보다 클 경우는 유리한 듯.

 

select / poll / epoll

[링크 : https://niklasjang.github.io/backend/select-poll-epoll/]

[링크 : https://applefarm.tistory.com/144]

 

select

while(1)
{
   fd_num = select(...);
   if(fd_num == -1) break;
   else if(fd_num == 0 ) continue;

   for(int fd =0; fd < fd_max + 1; ++fd)
   {
      if(FD_ISSET(fd, &cpy_reads))
      {
          // TODO
      }
   }

   close(server_socket);
   return 0;
}

[링크 : https://ozt88.tistory.com/21]

 

poll

       #include <poll.h>
       #include <fcntl.h>
       #include <sys/types.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>

       #define errExit(msg)    do { perror(msg); exit(EXIT_FAILURE); \
                               } while (0)

       int
       main(int argc, char *argv[])
       {
           int nfds, num_open_fds;
           struct pollfd *pfds;

           if (argc < 2) {
              fprintf(stderr, "Usage: %s file...\n", argv[0]);
              exit(EXIT_FAILURE);
           }

           num_open_fds = nfds = argc - 1;
           pfds = calloc(nfds, sizeof(struct pollfd));
           if (pfds == NULL)
               errExit("malloc");

           /* Open each file on command line, and add it 'pfds' array. */

           for (int j = 0; j < nfds; j++) {
               pfds[j].fd = open(argv[j + 1], O_RDONLY);
               if (pfds[j].fd == -1)
                   errExit("open");

               printf("Opened \"%s\" on fd %d\n", argv[j + 1], pfds[j].fd);

               pfds[j].events = POLLIN;
           }

           /* Keep calling poll() as long as at least one file descriptor is
              open. */

           while (num_open_fds > 0) {
               int ready;

               printf("About to poll()\n");
               ready = poll(pfds, nfds, -1);
               if (ready == -1)
                   errExit("poll");

               printf("Ready: %d\n", ready);

               /* Deal with array returned by poll(). */

               for (int j = 0; j < nfds; j++) {
                   char buf[10];

                   if (pfds[j].revents != 0) {
                       printf("  fd=%d; events: %s%s%s\n", pfds[j].fd,
                               (pfds[j].revents & POLLIN)  ? "POLLIN "  : "",
                               (pfds[j].revents & POLLHUP) ? "POLLHUP " : "",
                               (pfds[j].revents & POLLERR) ? "POLLERR " : "");

                       if (pfds[j].revents & POLLIN) {
                           ssize_t s = read(pfds[j].fd, buf, sizeof(buf));
                           if (s == -1)
                               errExit("read");
                           printf("    read %zd bytes: %.*s\n",
                                   s, (int) s, buf);
                       } else {                /* POLLERR | POLLHUP */
                           printf("    closing fd %d\n", pfds[j].fd);
                           if (close(pfds[j].fd) == -1)
                               errExit("close");
                           num_open_fds--;
                       }
                   }
               }
           }

           printf("All file descriptors closed; bye\n");
           exit(EXIT_SUCCESS);
       }

[링크 : https://man7.org/linux/man-pages/man2/poll.2.html]

 

epoll

int epoll_fd = epoll_create(EPOLL_SIZE);
struct epoll_event* events = malloc(sizeof(struct epoll_event)*EPOLL_SIZE);
struct epoll_event init_event;
init_event.events = EPOLLIN;
init_event.data.fd = server_socket;
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, server_socket, &init_event);
while(TRUE)
{
   int event_count = epoll_wait(epoll_fd, events, EPOLL_SIZE, -1);
   if( event_count = -1 ) break;
   for( int i = 0 ; i < event_count; ++i )
   {
      if(events[i].data.fd == server_socket) //서버 소켓에 이벤트
      { //accept 처리 ... init_event.events = EPOLLIN;
         init_event.data.fd = new_client_socket;
         epoll_ctl(epoll_fd, EPOLL_CTL_ADD, new_client_socket, &init_event);
      }
      else //이벤트가 도착한 소켓들
      {
            //read, write, closesocket처리
      }
   }
}

closesocket(server_socket);
close(epoll_fd);
return 0;

[링크 : https://ozt88.tistory.com/21]

 

 

 

+

오래된 글이지만 벤치마크 결과 poll/select는 거의 동일한 성능이고

fd 갯수가 늘어갈수록 느려지지만, epoll이나 kqueue의 경우 일정 상한 이상으로는 성능이 유지되는 경향을 보인다.

[링크 : https://monkey.org/~provos/libevent/libevent-benchmark.jpg]

[링크 : https://kldp.org/node/46542]

 

일반적으로 소켓수가 1500이하일때는 퍼모먼스 차이는 거의 없는것으로 알고 있습니다.

select poll epoll 의 성능차이는 5000 이상부터 급격히 달라집니다.

[링크 : http://foroum.gpgstudy.com/forum/viewtopic.php?t=12610]

'Linux API > linux' 카테고리의 다른 글

zeroMQ  (0) 2022.09.20
파일 존재유무 확인하기  (0) 2022.02.11
Unhandled fault: external abort on non-linefetch  (0) 2021.05.25
Stopped (tty input)  (0) 2021.05.21
linux gpio interrupt poll?  (0) 2021.05.04
Posted by 구차니

메모리 카드가 없다고 해서 분해해보니, 정말 SD 메모리 카드가 있네?!

 

구형이랑 다른게 sd 메모리 인줄 알았는데, 슬롯만 내부에 내장시키고 외부로 꺼내지 않았을뿐

동일한 구조인 것 같다는게 킹리적 갓심 -_-

 

남는 나사 하나는 어디서 나온거냐...

 

AXP173 GB132A 62G1 - 리튬이온 배터리 충전 및 PMIC

[링크 : http://www.x-powers.com/en.php/Info/product_detail/article_id/27]

N51822 QFABC0 1530NQ - BLE nRF51822

[링크 : https://www.nordicsemi.com/products/nrf51822]

BE1704 25Q16C61G P14915 - 정체 불명(SPI나 i2C 메모리나 램 아니려나?)

ANYKA AK3750CB121 T2A01B17 - ARM926EJ-S 

[링크 : http://www.anyka.com/en/productInfo.aspx?id=107]

'개소리 왈왈 > 육아관련 주저리' 카테고리의 다른 글

벽지 수선 준비  (0) 2021.11.06
떵개 사고침  (0) 2021.11.05
냄비 손잡이 교체  (0) 2021.10.31
휴가 3일차  (0) 2021.10.29
휴가 2일차  (0) 2021.10.28
Posted by 구차니
embeded/FPGA - ALTERA2021. 11. 1. 15:11

altera/intel fpga의 soft mcu가 risc-v 채택해서 nios V로 제공되는데

[링크 : https://www.intel.com/content/www/us/en/products/details/fpga/nios-processor/v.html]

 

하드웨어 요구사항이 높네.. 아쉽게도 내가 가징 de0-nano의 cyclone IV로는 무리인듯.

2.1. Hardware and Software Requirements

Intel uses the following hardware and software to build a Nios® V/m processor system:
  • Supported Intel FPGA devices:
    • Intel® Cyclone® 10 GX
    • Intel® Arria® 10
    • Intel® Stratix® 10
    • Intel® Agilex™
  • Intel® Quartus® Prime Pro Edition software version 21.3 or later

[링크 : https://www.intel.com/content/www/us/en/programmable/documentation/jmv1629188568604.html]

'embeded > FPGA - ALTERA' 카테고리의 다른 글

altera - partial reconfigure  (0) 2023.04.24
altera nios 2 epcs to ram  (0) 2023.03.28
IOFS - Intel Open FPGA Stack  (0) 2021.07.06
oneAPI Quartus pro 필요?  (0) 2021.04.06
cyclone V openCL?  (0) 2021.03.26
Posted by 구차니