안녕하세요. 여리 君 입니다.
요즘 Arduino 여러대를 붙여 Linx 라이브러리를 이용해 코드를 작성 중입니다.
여러대를 엮어 만들다 보니, 통신 포트 열고 닫는 것 부터 속도 문제가 발생하기 시작 했습니다.
그래서 Linx 의 통신 포트 여는 부분에 걸려있던 5초 Delay 도 1초로 줄이고, 함수도 공유 복제 재호출 설정을 해서 속도가 많이 줄었습니다.
이런 노력을 했는데도, 속도가 많이 줄었음에도 여전히 지연이 걸리고 있고, 이 지연의 길이가 일정하지 않고 있습니다.
이러한 문제의 원인이 Linx 라이브러리의 dll 함수 호출에 원인이 있다고 생각되어 지고 있습니다.
아무리 공유 복제 재호출 설정이 되어도, 하나의 dll 라이브러리를 서로 호출하다 보면, Windows 우선권으로 먼저 호출한 라이브러리가 먼저 동작할 것이고, 그것 때문에 전체 프로그램의 Queue 가 버퍼가 걸리고 있는 걸로 보입니다.
현재 arduino 한대당 IO 제어를 위해 Loop 하나씩을 할당해 놓은 상태 입니다. 라이브러리도 공유 복제 재호출 설정되어 있습니다.
dll 호출이 문제라면, 여러 루프로 나누고, 공유 복제 재호출까지 해 놓은 의미가 없어 보입니다.
라이브러리를 별도로 생성하는 것도 생각해 보았는데, 어차피 하나의 dll 이 지정되어 있다면 그것도 의미 없어 보입니다.
현재로써는 뾰족한 방법이 없어 보입니다.
별도의 arduino 라이브러리를 만드는게 나을까 싶기도 합니다.
조언 부탁 드리겠습니다.
감사합니다.
해결되었습니다! 솔루션으로 이동.
여리군님 편안한 연말 보내십시오 !
말씀하신 것처럼 DLL 을 여러 개 생성하는게 맞아 보이지만,
해당 DLL 이 아두이노에 접근하기 위해서 운영체제의 공유 리소르를 점유하는 형태로 되어 있다면(예를 들면 DCOM 과 같은 윈도우 소켓을 건든다든지...),
DLL 을 여러 개로 만들봐야 의미가 없을 수도 있습니다.
고생하십시오 !
날짜: 12-15-2023 12:49 AM
초랑님 잘 지내고 계시지요?
올 한해도 고생 많으셨습니다. 마무리 잘 하고 계시리라 믿습니다. 🙂
저는 이 문제 때문에 머리가 아파 죽겠습니다.
아두이노 펌웨어 까지 개발해야 하나 싶어서 어제 오늘 이틀간 붙들고 씨름 중입니다.
아두이노가 좋다 했더니... 갯수가 점점 늘어나는 바람에... 일이 늘어나서 아주 죽을 맛입니다. ㅠㅠ
연말에 이게 왠 일 복인가 싶습니다.
dll을 호출하는 라이브러리라서, 공유 재호출로 빨라지긴 했습니다만 문제가 해결되진 않았습니다.
아무래도 펌웨어까지 손을 대야 하나 싶습니다.
답변 감사드립니다.