2013-06-20 2 views
0

우리는 프로젝트를 수행하고 있으며 p30f3013 마이크로 칩 (PIC30 칩 제품군)을 사용하고 있습니다. 지금 우리는 우리 칩을위한 소프트웨어를 작성하고 있습니다. 우리가 사용하고있는 운영 시스템은 Linux Ubuntu 12.04입니다. 아래에 몇 가지 기능이있는 작은 파일이 있습니다.Linux에서 PIC 컨트롤러 프로그램을 작성하는 방법은 무엇입니까?

#include "p30f3013.h" 
#include "hardware.h" 

//SPI connects the display with the U2A1 

void init_lcd() 
{ 
    //after any reset wait 500 milliseconds 
    SPI1BUF   = 0; //buffer displayed 
    SPI1STATbits.SPIEN = 1; //SPI enable 
    SPI1CONbits.MSTEN = 1; 
    SPI1CONbits.SSEN = 1; 
    SPI1CONbits.PPRE = 0; 
} 

void write_char(char character) 
{ 
    //wait 5 milliseconds between writing two successive char in first row 
    //wait 250 microseconds between writing two successive char in second row 

    SPI1BUF=character; 
} 


void write_int(int num) 
{ 
//wait 5 milliseconds between writing two successive char in first row 
//wait 250 microseconds between writing two successive char in second row 
    if (num >= '0' && num <= '9') 
    { 
     SPI1BUF = '0' + num; 
    } 
    else 
    { 
     SPI1BUF = '!'; 
    } 
} 

void move_cursor(int hexadecimal) 
{ 
    //first row: from 0x80 to 0x8F 
    //first row: from 0xC0 to 0xCF 
    //wait 250 microseconds before writing an address byte 
    //cannot move cursor and write a char in the same cycle 

    SPI1BUF=hexadecimal; 
} 

void init_led() 
{ 
    _TRISB0=0; 
    _TRISB1=0; 
} 

일부 매크로, 버퍼, 레지스터 등이 포함 된 p30f3013.h 헤더를 추가합니다. 우리는 우리가 얻을 코드를 컴파일 할 때

#ifndef __dsPIC30F3013__ 
#error "Include file does not match processor setting" 
#endif 

#ifndef __30F3013_H 
#define __30F3013_H 

/* ------------------------- */ 
/* Core Register Definitions */ 
/* ------------------------- */ 

/* W registers W0-W15 */ 
extern volatile unsigned int WREG0 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG1 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG2 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG3 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG4 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG5 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG6 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG7 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG8 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG9 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG10 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG11 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG12 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG13 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG14 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
extern volatile unsigned int WREG15 __attribute__((__sfr__,__deprecated__,__unsafe__)); 
...... 

것은 우리가 오류 다음과 같습니다 : 여기 이 헤더의 짧은 부분

#ifndef __dsPIC30F3013__ 
#error "Include file does not match processor setting" 
#endif 
:이 때문에 처리기 derectives의 apperas

#error "Include file does not match processor setting" 

우리는 아직 옵션이없는 간단한 gcc 컴파일러를 사용하고 있습니다. 우리는 pic30-gcc와 -mcpu 키를 같이 사용해야한다고 가정합니다. 그러나 우리는 qtcreator를 사용하고 있으며이 옵션을 지정하는 방법이나 컴파일러를 변경하는 방법을 알지 못합니다. pic30-coff-gcc-4.0.3 컴파일러를 시스템에 설치했습니다.

제안 사항?

+0

'sdcc '로 컴파일 해보십시오. –

+0

하지만 질문 - qtcreator에서 sdcc에 대한 컴파일러를 변경하는 방법은 무엇입니까? –

+0

마이크로 프로세서에서 QT를 사용하고 있습니까? O_o ... 나는 항상 가장 간단한 방법은 makefile을 손으로 작성하는 것이라고 생각 해왔다. 그리고 어떤 도서관도 사용하지 마십시오. –

답변

0

컴파일러가 __dsPIC30F3013__ 전처리 기 기호를 정의하지 않았기 때문에 해당 메시지가 나타납니다. 컴파일러 문서를 읽으면서 필요한 플래그를 찾아야합니다. 이를 설정하려면 IDE 문서를 읽어야합니다. 당신은 사용할 수 있습니다

gcc -dM -E - < /dev/null 

는 컴파일러 생성하는 사전 정의 된 매크로를 인쇄합니다.