Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

아두이노 블록 -> 파이썬 언어 변환 -> 아두이노 블록 순서로 코드변환시 파이썬 언어에서 원래 아두이노 블록이 아닌 orange보드의 블록으로 잘못변환 #2145

Open
JeongJun-Lee opened this issue Aug 24, 2021 · 1 comment

Comments

@JeongJun-Lee
Copy link
Contributor

entrylabs/entry-offline#116 의 root cause 찾는 과정에 발견된 이슈입니다. 이 이슈가 해결되면 해당 이슈는 자동해결 됩니다.

image

위에 버저 소리출력 아두이노 블록 -> 파이썬 언어변환 -> 다시 블록으로 되돌릴시,
내부적으로 arduino_ext_set_tone 인데 파이썬 언어갔다가 다시 블록으로 변환시, 아래의 첨부 이미지에서 보여지는 것처럼 orange_set_tone로 바뀌어 버림. 해당 블록 안에 4개의 인자 중 2개도 orange_tone_list, orange_octave_list로 바뀌어 버럼.

parser.js 148라인
result = this._execParser.Program(astArray);

image

@JeongJun-Lee
Copy link
Contributor Author

JeongJun-Lee commented Feb 11, 2023

디버깅 결과 root cause를 공유드리자면, 굉장히 오래된 legacy 버그로 블록<->파이썬 상호간의 변환을 위한 맵핑 테이블(key, value 형식)을 구축하는 아래 코드에서

syntaxPointer[syntaxKey] = result;

기존에 정상적으로 구축된 key값이 동일한 심볼명을 갖는 다른 하드웨어의 key값에 의해 덮어 씌워지는 문제로 인해 발생.

예를 들어, Arduino.digitalWrite(%1, %2) 파이썬 심볼에 대한 맵핑 key값은 본래 엔트리 기본 하드웨어인 Arduino 또는 ArduinoExt의 것으로 초기에 key값이 arduino_ext_toggle_led로 잘 설정되나, 이후 동일한 심볼명을 사용하는 여러 다른 하드웨어(예를들어 오렌지 보드 등)이 동일한 심볼명을 사용하고 있는 바람에 해당 키값을 자신의 것(orange_toggle_led)으로 덮어 씌우면서 발생하는 문제.

미해결시 예상결과: 이 legacy bug를 해결하지 않으면, 매우 드물게 발생하나 굉장히 찾아내기 힘든 버그를 양산할 수 있음.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant