검색

저자의 재개 및 생물 내 취미에 관련된 기사의 커플 - 로봇
호주로 이민에 대한 내 노출. 오직 러시아. 해결 일상적인 문제 요리법
리눅스에 관련된 글 윈도우 관련 게시물
소프트웨어에 관련된 게시물 하드웨어에 대한 정보를 많이
당신이 유용하게 찾을 수있는 다른 도구 다양한 웹 기술에 대한 게시물
메뉴의 나머지에 맞지 않아 모든 이 블로그에 대한 RSS 피드

태그 클라우드

기록 보관소

링크

안드레이 Mikhalchuk의 블로그

English flagItalian flagKorean flagChinese (Simplified) flagPortuguese flagGerman flagFrench flagSpanish flagJapanese flagRussian flagDanish flagFinnish flagHebrew flag

삶에 대해 Technoblog

2010년 6월 19일 수정 : 오류 : 레지스터 r24, r26, r28 또는 r30 필요

저는 최근 NewSoftSerial 함께 Arduino 코드를 컴파일되었고 악명높은 "오류 : 레지스터 r24, r26, r28 또는 r30 필수"로 맞았 오류가 발생했습니다. NewSoftSerial은 훌륭한 라이브러리이다 세 이상 avr-GCC 컴파일러를 사용하는 그것이 alot 즐길 수 있습니다. 문제는 새로운 gcc가 코드에서 역거운 오류를 좋아하고 여기에 문제를 해결하는 방법은없는 것입니다 ...


문제는 방법 NewSoftSerial :: 어셈블리 언어로 작성된 tunedDelay에 발생합니다. 당신은 ASM과 많은 경험이없는 경우이 방법은 다소 애매한 태도를 보인다. 그것은 기본적으로 단일 통화 semicolomn로 구분하여 1-4 매개 변수를 얻을 수 "휘발성 ASM"으로 구성되어 있습니다. 첫 번째 매개 변수는 어셈블리 코드 자체입니다. 그것은 % 아이디의 형태로 다른 세 부분에 대한 여러 개의 참조가 포함될 수 있습니다. 두 번째 및 세 번째 매개 변수는 ASM 코드를 입력 및 출력 매개 변수입니다. 그것이 잘못된 tunedDelay 방법으로 사용되지 않습니다로의 네 번째 부분은 생략하자.
가 ASM 호출의 두 번째 매개 변수를 살펴 봅시다 :
: "+r" (delay), "+a" (tmp)
첫 번째 마법 "+ R"(지연) 모든 % ASM 코드에서 0 (즉, 매개 변수 # 0) C 코드에서 "지연"변수로 대체된다는 것을 의미합니다. '+'는 읽기 - 쓰기 매개 변수를 의미합니다. 컴파일 NewSoftSerial 무능력의 원인 - "R"은 "제약 조건 클래스"입니다. 문제는 ASM 코드를 지연하고 이러한 작업에만 특정 레지스터가 사용될 필요로 특정 작업을하기 때문입니다. 작업에 사용할 레지스​​터의 집합 제약 조건 클래스에 의해 정의됩니다. 당신은 ASM 코드를 보면 당신은 작업 "sbiw의 %에게 0, 0 × 01"이 표시됩니다. NewSoftSerial 코드가 클래스 "R"을 지정하는 동안 설명서에 따르면이 작업은 제약 조건 클래스에 "W"의 첫번째 인자가 필요합니다. 최신 avr-gccs 더 조심 반면 오래된 컴파일러가이 문제를 알아낼만큼 영리하지 않았 것 같습니다.
따라서 코드를 수정하고 확인하기 위하여 당신이 인수가 다음에 브리핑을받을 교체할 필요가 새 컴파일러로 컴파일 :
: "+w" (delay), "+a" (tmp)
이 작은 패치 NewSoftSerial는 새로운 컴파일러를 이용한 compilable 된 후에.

이 게시물에 게시된 하드웨어 , 리눅스 , 로봇 , 소프트웨어 .

코멘트가 없습니다

지금까지 코멘트가 없습니다

회신을 남겨주

사이트맵 (다) 안드레이 Mikhalchuk, 2005년부터 2008년까지