>My bad, verkar ju helt OK och även rekomenderat...
Ja, det kan tyckas lite märkligt. Men med tanke på åldern på
språket kan man väl ta det, moderna språk slipper helt headerfilerna
>Jag vet inte hur du tycker, men det skulle kunna vara
>intressant att se vad du har sett...
Självklart. Ska sluta gnälla och plocka fram "rätt" saker istället.
Här är alltså länken. Den snackar visserligen om en gammal hi-tech,
men XC8 är ju hi-techs kompilator. xc.h inkluderar bara htc.h vilken
var den filen man skulle inkludera med hi-techs version.
http://www.microchip.com/forums/m558733-print.aspx
Här är alltså outputen:
Kod: Markera allt
"/opt/microchip/xc8/v1.12/bin/xc8" --pass1 --chip=18F2550 -Q -G --asmlist --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib "--errformat=%f:%l: error: %s" "--warnformat=%f:%l: warning: %s" "--msgformat=%f:%l: advisory: %s" -obuild/default/production/main.p1 main.c
main.c:16: warning: function declared implicit int
main.c:20: warning: function declared implicit int
main.c:31: warning: function declared implicit int
"/opt/microchip/xc8/v1.12/bin/xc8" --chip=18F2550 -G --asmlist -mdist/default/production/Robocut.X.production.map --double=24 --float=24 --emi=wordwrite --opt=default,+asm,-asmfile,+speed,-space,-debug,9 --addrqual=ignore -P -N255 --warn=0 --summary=default,-psect,-class,+mem,-hex,-file --runtime=default,+clear,+init,-keep,-no_startup,-download,+config,+clib,+plib "--errformat=%f:%l: error: %s" "--warnformat=%f:%l: warning: %s" "--msgformat=%f:%l: advisory: %s" -odist/default/production/Robocut.X.production.cof build/default/production/main.p1 build/default/production/interrupts.p1 build/default/production/engines.p1
:: advisory: Employing 18F2550 errata work-arounds:
:: advisory: * Corrupted fast interrupt shadow registers
:: warning: Omniscient Code Generation not available in Free mode
(908) exit status = 1
make[2]: *** [dist/default/production/Robocut.X.production.hex] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2
make: Target `build' not remade because of errors.
engines.c:29: error: conflicting declarations for variable "_engines_interrupt" (main.c:16)
Där ser du de tre varningarna där han gör om mina funktionsanrop
till funktionsdeklarationer.
Och sen koden:
main.c
Kod: Markera allt
/*
* File: main.c
* Author: rasmus
*
* Created on January 28, 2013, 10:48 PM
*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "interrupts.h"
#include "engines.h"
#include "bool.h"
void interrupt highInterrupt() {
engines_interrupt();
}
void interrupt low_priority lowInterrupt() {
engines_interrupt_low();
}
void init_pins() {
LATA = 0;
ADCON1 = 0x0F; //disable analog functions
CMCON = 0x07; // disable comparators
TRISA = 0b00011000;
//LATB = 0;
//TRISB = 0b00100000;
engines_stop();
}
void init_processor() {
// Use 8MHz int osc
OSCCON = 0b01111111;
// Disable USB
UCON = 0;
UTRDIS = 1;
init_interrupts();
init_pins();
}
/*
*
*/
int main(int argc, char** argv) {
init_processor();
LATA2 = 1;
while (true) {
}
return (EXIT_SUCCESS);
}
engines.c:
Kod: Markera allt
#include "engines.h"
#include "ports.h"
#include "bool.h"
#define backwards 0
#define forward 1
#define left 2
#define right 3
#define back_left 4
#define back_right 5
#define back_around 6
#define forward_left 7
#define forward_right 8
// Servo definition and variables
#define STILL 15
#define CCW_ROTATION 20
#define CW_ROTATION 10
volatile unsigned char cnt = 0;
volatile unsigned char direction_left = STILL;
volatile unsigned char direction_right = STILL;
char go = false;
char dir = forward;
char turn = false;
volatile unsigned int iTurn = 0;
void engines_interrupt() {
if (TMR2IF) {
PR2 = 250;
TMR2IF = 0;
switch (turn) {
case forward:
direction_left = CW_ROTATION;
direction_right = CCW_ROTATION;
break;
case left:
if (iTurn < 500) {
direction_left = CCW_ROTATION;
direction_right = CCW_ROTATION;
iTurn++;
} else {
turn = forward;
iTurn = 0;
}
break;
case right:
if (iTurn < 500) {
direction_left = CW_ROTATION;
direction_right = CW_ROTATION;
iTurn++;
} else {
turn = forward;
iTurn = 0;
}
break;
case back_left:
if (iTurn < 1000) {
direction_left = CCW_ROTATION;
direction_right = CW_ROTATION;
iTurn++;
} else {
turn = left;
iTurn = 0;
}
break;
case back_right:
if (iTurn < 1000) {
direction_left = CCW_ROTATION;
direction_right = CW_ROTATION;
iTurn++;
} else {
turn = right;
iTurn = 0;
}
break;
case back_around:
if (iTurn < 1000) {
direction_left = CCW_ROTATION;
direction_right = CW_ROTATION;
iTurn++;
} else {
turn = left;
iTurn = 0;
}
break;
case forward_left:
if (iTurn < 1000) {
direction_left = CW_ROTATION;
direction_right = CCW_ROTATION;
iTurn++;
} else {
turn = left;
iTurn = 0;
}
break;
case forward_right:
if (iTurn < 1000) {
direction_left = CW_ROTATION;
direction_right = CCW_ROTATION;
iTurn++;
} else {
turn = right;
iTurn = 0;
}
break;
}
}
}
void engines_interrupt_low() {
if(TMR0IF) {
TMR0 = 56; // Initial Value for 0.1ms Interrupt
TMR0IF = 0; // Clear TIMER0 interrupt flag
if (cnt < direction_left) {
WHEEL_LEFT = 1;
} else {
WHEEL_LEFT = 0;
}
if (cnt < direction_right) {
WHEEL_RIGHT = 1;
} else {
WHEEL_RIGHT = 0;
}
if (cnt > 200) {
cnt = 0;
}
cnt++;
}
}
void engines_stop() {
direction_left = STILL;
direction_right = STILL;
}
engines.h
Kod: Markera allt
/*
* File: interrupts.h
* Author: rasmus
*
* Created on January 28, 2013, 10:49 PM
*/
#ifndef INTERRUPTS_H
#define INTERRUPTS_H
#ifdef __cplusplus
extern "C" {
#endif
void engines_interrupt();
void engines_interrupt_low();
void engines_stop();
#ifdef __cplusplus
}
#endif
#endif /* INTERRUPTS_H */
Filerna lägger jag till genom att högerklicka på mappen "source files"
och väljer "C source file" samt "header files" och väljer "c header file"
EDIT:
Kan tillägga att mapparna "header files" och "source files" inte finns i
verkligheten utan verkar vara nått som MPLAB X har fantiserat ihop.
Men eftersom interrupt.c och interrupt.h ligger i dessa och fungerar
bra (nu) så borde det vara så det ska vara.