;————————————————————
; Context Saving registers
CONTEXT UDATA 0x20
int_w RES 1
int_status RES 1
int_pclath RES 1
int_fsr RES 1
CONTEXT2 UDATA 0xa0
int_w2 RES 1 ;Dummy Register
;————————————————————
; Variables used in Main Loop
Main UDATA
tmpChar RES 1
;————————————————————
;
; NAME : RESET_VECTOR
;
; FUNCTION : Executes reset interrupt service routine
;
;————————————————————
RESET_VECTOR CODE 0000
RESET_VECTOR
GLOBAL RESET_VECTOR
PAGESEL reset_isr
goto reset_isr
;——————–ROUTINE SPECIFICATION——————-
;
; NAME : INTERRUPT_VECTOR
;
; FUNCTION : Contect saving, correct ISR selection
;
; NOTES : Saves W, STATUS, PCLATH as per ex.14-1
; in datasheet
;
;————————————————————
; REVISION HISTORY :
;
;————————————————————
INTERRUPT_VECTOR CODE 0004
INTERRUPT_VECTOR
GLOBAL INTERRUPT_VECTOR
EXTERN USART_Tx_isr
EXTERN USART_Rx_isr
;INTERRUPT_VECTOR
;
; Save the W,STATUS,PCLATH and FSR registers,
movwf int_w
swapf STATUS,W
clrf STATUS
movwf int_status
movf PCLATH,W
movwf int_pclath
movf FSR,W
movwf int_fsr
; Check to see what caused the interrupt,
; Byte received ?
BANKSEL PIR1
PAGESEL USART_Rx_isr
btfsc PIR1,RCIF
; Jump to USART Rx ISR
call USART_Rx_isr
; Ready to transmit byte ?
BANKSEL PIR1
PAGESEL USART_Tx_isr
btfsc PIR1,TXIF
; Jump to USART Tx ISR
call USART_Tx_isr
; Unknown interrupt ?
; Jump to exception handler
; PAGESEL Exception
; call Exception
; Restore registers and return from interrupt.
clrf STATUS
movf int_fsr,W
movwf FSR
movf int_pclath,W
movwf PCLATH
swapf int_status,W
movwf STATUS
swapf int_w,F
swapf int_w,W
retfie
;——————–ROUTINE SPECIFICATION——————-
;
; NAME : Exception
;
; FUNCTION : Called when an unhandled interrupt
; condition occours.
;
; NOTES :
;
;————————————————————
; REVISION HISTORY :
;
;————————————————————
;EXCEPTION
; Endless loop
Exception CODE
Exception
goto Exception
;——————–ROUTINE SPECIFICATION——————-
;
; NAME : reset_isr
;
; FUNCTION : Reset Interrupt service routine
; Determines correct action to perform
; on startup.
;
; NOTES :
;
;————————————————————
; REVISION HISTORY :
;
;————————————————————
reset_isr CODE
reset_isr
GLOBAL reset_isr
EXTERN MemoryTest
EXTERN USART_init
EXTERN USART_puts
EXTERN USART_putc
EXTERN USART_hi_msg_tmp
EXTERN USART_lo_msg_tmp
EXTERN Startup_screen
; EXTERN LCD_Initialise
; EXTERN LCD_PutChar
EXTERN USART_getc
PAGESEL MemoryTest
call MemoryTest
PAGESEL USART_init
call USART_init
; PAGESEL LCD_Initialise
; call LCD_Initialise
PAGESEL USART_putc
movlw A’.’
call USART_putc
movlw A’.’
call USART_putc
movlw A’.’
call USART_putc
movlw A’\r’
call USART_putc
movlw A’\n’
call USART_putc
; PAGESEL LCD_PutChar
; movlw A’T’
; call LCD_PutChar
; movlw A’e’
; call LCD_PutChar
; movlw A’s’
; call LCD_PutChar
; movlw A’t’
; call LCD_PutChar
; Enable perihiperal interrupts
BANKSEL INTCON
bsf INTCON,PEIE
; Enable all interrupts
bsf INTCON,GIE
; Print out startup message
PAGESEL USART_puts
movlw high Startup_screen
movwf USART_hi_msg_tmp
movlw low Startup_screen
movwf USART_lo_msg_tmp
call USART_puts
bcf OPTION_REG,7
BANKSEL PORTB
clrf PORTB
BANKSEL TRISB
movlw 0x00
movwf TRISB
BANKSEL PORTD
clrf PORTD
BANKSEL TRISD
movlw 0x7F
movwf TRISD
BANKSEL PORTE
clrf PORTE
BANKSEL TRISE
movlw 0x07
movwf TRISE
PAGESEL MainLoop
call MainLoop
;——————–ROUTINE SPECIFICATION——————-
;
; NAME : MainLoop
;
; FUNCTION : Main Control Interpreter
;
; NOTES : A Finite State Machine
;
;————————————————————
; REVISION HISTORY :
; 9/1/98 First Draft
;————————————————————
MainLoop CODE
MainLoop
GLOBAL MainLoop
EXTERN USART_getc
EXTERN USART_putc
EXTERN AnalogRoot
ExTERN DigitalRoot
EXTERN CounterRoot
EXTERN PWMRoot
EXTERN MotorControlRoot
EXTERN TimerRoot
PAGESEL USART_getc
call USART_getc
BANKSEL tmpChar
movwf tmpChar
PAGESEL MainLoop
movf tmpChar,W
xorlw A’.’
btfss STATUS,Z
goto MainLoop
;————————————————————
ServiceSelect
PAGESEL USART_putc
movlw ‘-‘
call USART_putc
movlw ‘-‘
call USART_putc
movlw ‘\r’
call USART_putc
movlw ‘\n’
call USART_putc
PAGESEL USART_getc
call USART_getc
movwf tmpChar
PAGESEL AnalogRoot
movf tmpChar,W
xorlw A’a’
btfsc STATUS,Z
goto AnalogRoot
PAGESEL DigitalRoot
movf tmpChar,W
xorlw A’d’
btfsc STATUS,Z
goto DigitalRoot
PAGESEL DigitalRoot
movf tmpChar,W
xorlw A’c’
btfsc STATUS,Z
goto CounterRoot
PAGESEL PWMRoot
movf tmpChar,W
xorlw A’p’
btfsc STATUS,Z
goto PWMRoot
PAGESEL MotorControlRoot
movf tmpChar,W
xorlw A’m’
btfsc STATUS,Z
goto MotorControlRoot
PAGESEL TimerRoot
movf tmpChar,W
xorlw A’t’
btfsc STATUS,Z
goto TimerRoot
;————————————————————
; Error
PAGESEL USART_putc
movlw ‘*’
call USART_putc
goto MainLoop
END
[/cc]
Okay, so that’s not quite as good as it could be, but the libraries were better. What about the Java code?
[cc escaped=”true” lang=”java” lines=”20″]
/////////////////////////////////////////////////////////////////////
//
// TACAN – TeleAutonomous Control And Navigation
//
// Mark Dennehy, 93369425
// S.S. C.Eng.
// Final Year Project 1996/7
//
//////////////////////////////////////////////////////////////////////
//
// PolarHistogram.java
// implements the polar histogram
// —————–
// $Date: 1997/04/03 21:49:54 $
// $Revision: 2.0 $
// $State: Stable $
//
//////////////////////////////////////////////////////////////////////
package Tacan.RLC;
import Tacan.util.LogFile;
import Tacan.util.MathUtil;
import java.util.*;
import java.io.*;
import java.awt.event.*;
/**
* The Polar Histogram of the Certainty value grid. This is effectively a
* polar graph of obstacle density.
*
*@author
*@version
*@see Tacan.RLC.CVGrid
*@see java.util.Observer
*@see java.awt.event.ActionListener
**/
class PolarHistogram extends Observable implements Observer, ActionListener
{
private final static double A = 22;
private final static double B = 1;
private final static int maxFreeSectorSize = 18;
private int tmpPH[];
private RLC rlc_;
private int no_of_segments_;
private LogFile log_;
private LogFile data_;
private Vector segment_terms_[];
/**
* The current Polar Histogram values
**/
protected int PH_[];
/**
* The Local Autonomy Control graph values
**/
protected double LAC_[];
/**
* The current maximum value in the Polar Histogram (for normalisation)
**/
protected int PH_max = 0;
/**
* The current maximum value in the Local Autonomy Control graph (for normalisation)
*@see
**/
protected double LAC_max = 0.0;
/**
* The threshold value for deciding what path is free and what is not
**/
protected int PH_threshold = 100;
/**
* The maximum network lag permitted before full local autonomy is granted (in seconds)
**/
public final static double maxNetLag = 10;
/**
* Constructor
*
*@param rlc The Robot Local controller instance associated with this graph
**/
protected PolarHistogram(RLC rlc)
{
rlc_ = rlc;
PH_max = 0;
segment_terms_ = new Vector[rlc.robot_config.PH_RES];
no_of_segments_ = rlc.robot_config.PH_RES;
PH_ = new int[no_of_segments_];
tmpPH = new int[no_of_segments_];
LAC_ = new double[no_of_segments_];
log_ = new LogFile(“Polar.log”);
data_ = new LogFile(“Polar.dat”);
for (int i = 0; i PH_max) ? sum : PH_max;
}
}
public synchronized void LACupdate(int t,int desired_sector)
{
double b = (t LAC_max) ? LAC_[i] : LAC_max;
}
}
public int clearPath(int bearing)
{
int res = (int)360.0/no_of_segments_;
int desired_sector = (int)(bearing/res);
int b;
int l_centre =1;
int l_width = 1;
int r_centre =1;
int r_width = 1;
LACupdate(3,desired_sector);
if ((PH_[desired_sector] * LAC_[desired_sector]) PH_threshold)
{
//Set centre of sector
l_centre = a+(int)(l_width/2);
break;
}
break;
}
//Scan Right
for(int a = no_of_segments_-1; a > (no_of_segments_/2) ; a–)
//Start of first free sector
if ((PH_[(a+desired_sector)%no_of_segments_] * LAC_[(a+desired_sector)%no_of_segments_]) PH_threshold)
{
//Set centre of sector
r_centre = a-(int)(r_width/2);
break;
}
break;
}
//Choose left or right, weighing size of sector with deflection
b = ((l_width/l_centre) > (r_width/(no_of_segments_ – r_centre))) ? l_centre : r_centre ;
b += desired_sector;
b %= no_of_segments_;
b *= res;
return b;
}
}
public String toString()
{
String s = “[ “;
for (int i = 0;iOh dear. That’s very much a curate’s egg. Some parts are okay, but some… well, I wouldn’t give them an okay in a code review session today. Still, I suppose that’s a good thing – remind yourself that you were just not as hot as a teenage coder as you thought you were, and that you’ve gotten better in the interim.
What about the C++ though?
[cc escaped=”true” lang=”cpp” lines=”20″]
/****************************************************************
* *
* TCD Robocup Project 1996/7 *
* Intelligent Agents Group *
* (Artifical Intelligence Group) *
* *
****************************************************************
RCS Block :
$Author: mdennehy $
$Date: 1996/09/07 15:57:18 $
$RCSfile: main.cc,v $
$Revision: 1.6 $
****************************************************************
$Log: main.cc,v $
// Revision 1.6 1996/09/07 15:57:18 mdennehy
// Final version by mdennehy.
// Now knows how to locate itself on the field and
// can determine the error in this measurement.
//
// Revision 1.5 1996/09/04 14:03:22 mdennehy
// Visual and Audio parsing working.
// Minor bug : if more than 5/6 agents connected, Bus errors/segmentation faufollow
//
// Revision 1.4 1996/08/30 17:31:38 mdennehy
// First Working Version
//
// Revision 1.3 1996/08/26 15:10:49 mdennehy
// *** empty log message ***
//
// Revision 1.2 1996/08/24 16:25:08 mdennehy
// Added Threads
//
// Revision 1.1 1996/08/22 14:34:30 mdennehy
// Initial revision
//
****************************************************************/
/***** RCS Program Information *****/
char RCS_revision[]=”$Revision: 1.6 $”;
char RCS_state[]=”$State: Exp $”;
/***** Header Files *****/
#include #include
#include #include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include “udpif.h”
#include “posdata.h”
#include “communications.h”
#include “dmalloc.h”
/***** Main Comms Socket *****/
UDPSocket comm;
#ifdef DEBUG
/***** Debugging Log file streams *****/
extern ofstream commlog;
extern ofstream datalog;
extern ofstream intsyslog;
#endif
/***** Function prototypes *****/
void usage();
void SignalHandler(int signal, siginfo_t *SignalInfo, void *ContextInfo);
/***** MAIN() *****/
int main(int argc, char **argv)
{
#ifdef DEBUG
print_statistics();
init_debugging_logfiles();
system_check();
intsyslog > s;
// parse returned initialisation message from server
err = sscanf(s,”(init %[lr] %i %[^)]”,side.cstring(),&unum,playmode.cstring());
#ifdef DEBUG
if (err == 3)
{
intsyslog si_code si_uid si_pid si_code == SI_NOINFO)
{
intsyslog si_code)
{
case BUS_ADRALN:
{
intsyslog si_errno si_addr;
intsyslog si_errno si_addr;
intsyslog si_errno si_addr;
intsyslog si_code == SI_NOINFO)
{
intsyslog si_code)
{
case SEGV_MAPERR:
{
intsyslog si_errno si_addr;
intsyslog si_errno si_addr;
intsyslog Erm. Yikes. I did get better though 😀
What about you? Do you check back over long periods to see how your standard of code is actually doing, rather than through the hazy pink-spectacled fog of old memories?
Like this:
Like Loading...