;;;; -*- Scheme -*- ;; ;;;; Comm example for HLSIM ;; ;; David DeRoure June 12 1997, revised Sep 10 1997 ;; dder@martigny.ai.mit.edu ;; ;; This Gunk file should be compiled with (cps "comm1") followed by ;; (cbf "comm1"). It uses definitions in clubs5d.scm. See comm1.scm ;; for simulation setup. See the HLSIM documentation for further details. ;; ;; Each processor transmits repeatedly, flashing cyan as it does so. ;; On receiving a message, a processor flashes red if a collision ;; was detected, else green if the message was detected. ;; ;; Use this to get a feel for the comms model and to experiment with ;; techniques for reducing numbers of collisions. (declare (usual-integrations)) ;; Collect data for later analysis (define transmits 0) (define receives 0) (define collisions 0) (define transmit-event (make-timeout-event (random 5000))) ; initial delay (define global-timeout (make-timeout-event 10000)) (define primitive-message-event (make-event)) (define (event-loop) (color-me "blue") (select (global-timeout 'done) (transmit-event (color-me "cyan") (broadcast 0) (set! transmits (1+ transmits)) (set! transmit-event (make-timeout-event (+ 200 (random 2000)))) (event-loop)) (primitive-message-event => (lambda (message) (event.clear! primitive-message-event) (if (eq? message 'collision) (begin (color-me "red") (set! collisions (1+ collisions))) (begin (color-me "green") (set! receives (1+ receives)))) (event-loop))))) ;; Run the loop (event-loop) ;; end of comm1.scm