취미/학습 목적으로 단순화 된 OS를 작성하는 프로젝트를 진행 중입니다. 나는 16 진수 파일을 생성 할 수 있으며, 이제 칩에 스크립트를 작성하여 직렬로 받아 들여 RAM에로드 한 다음 실행합니다. 단순함을 위해 모든 시작 코드가 나에게 달려 있도록 어셈블리로 작성하고 있습니다. 여기서부터 어디에서 시작해야합니까? 나는 16 진수 파일 형식이 잘 문서화되어 있다는 것을 알고 있지만 각 줄의 헤더를 읽고 주소를 정렬 한 다음 데이터를 RAM에 넣고 주소로 점프하는 것만 큼 간단합니까? 나는 그 이상을 필요로하는 것처럼 들리지만, 이것은 대부분의 사람들이 해결하려고 시도조차하지 않는 문제입니다. 어떤 도움이라도 좋을 것입니다.ARM Cortex-M의 RAM에 16 진수 파일 쓰기
답변
방식이 너무 모호합니다. 여러 가지 파일 형식이 있으며 실제로는 16 진수의 데이터와 함께 텍스트를 사용하는 두 가지 유형이 있습니다. 그래서 우리를 여기에서 돕지 않습니다.
스크립트를 칩에 작성한다는 것은 마이크로 컨트롤러에서 운영 체제가 실행되고 있음을 의미합니까? 어떤 운영체제이냐고 커맨드 라인이 어떻게 생겼는지 등등.
어셈블리는 기본적으로 모든 것을 제어 할 필요가 없다. (기본적으로 베어 메탈)는 asm을 사용하여 C를 부트 스트랩하고 나머지는 C로, 문제는 없다.
RAM으로 다운로드하여 실행하거나 다운로드하여 플래시로 레코딩하고 싶습니까?
기본적으로 만들고있는 것은 부트 로더입니다. 그리고 예, 항상 각 플랫폼별로 부트 로더를 작성하고 때로는 이전 플랫폼에서 코드를 빌려 오는 경우도 있습니다.
먼저 개발 컴퓨터, Windows, Mac, Linux에서 무엇이든간에 전체 파일을 배열로 읽는 프로그램 (C 또는 Pascal에서 마이크로 컨트롤러로 쉽게 이식 할 수있는 것이 이상적)을 작성한 다음 직렬로 수신하는 경우 기본적으로 한 번에 한 바이트 씩 받아들입니다. 당신이 선택한 파일 형식을 통해 구문 분석 (처음에는 더 이상 사용하지 않기로 결정한 경우 처음에는 형식을 변경 함) 디스어셈블러 또는 기타 도구에 어떤 바이트 또는 단어를 보여줄 수있는 다른 출력 옵션이 있어야하는지에 대한 실제 프로그램을 작성하십시오 어떤 주소에 착륙해야합니다. 이 데이터를 분석하고 찾은 주소/바이트 또는 주소/단어 항목을 인쇄 한 다음 툴체인이 보여준 것과 비교하십시오. 구문 분석 도구를 개봉하고 printf를 해당 주소의 메모리에 쓰기로 바꿉니다. 그런 다음 디자이너가 모든 프로그램에 특정 진입 점이 있어야한다고 결정할 때이를 파악할 수 있다면 진입 점으로 이동합니다.
인텔 16 진수 및 모토로라 s- 레코드가 좋은 선택입니다 (-O ihex 또는 -O srec, 현재 즐겨 찾기는 --srec-forceS3 -O srec입니다). 둘 다 위키피디아에서 문서화되어 있습니다. 그리고 적어도 GNU 도구는 둘 다 생성 할 것입니다, 당신은 마이크로 컨트롤러에 파일을 덤프하고 잘하면 구문 분석 및 RAM에 쓸 때 쓸모없는 터미널 프로그램 (minicom)을 사용할 수 있습니다. 만약 당신이 그 흐름을 처리 할 수 있다고 생각할 수도 있습니다 원시 바이너리 (-O 바이너리)를 만들고 부트 로더에 xmodem 수신기를 구현하십시오.