Cogs Competing for memory?
Hey guys,
I just posted a few days ago, and Mike Green and BEEP definitely helped me with part of my problem, and now I'm hitting another wall which confuses me to death. Let me first say that all of my subroutines work just like they should (finally). The main program runs multiple cogs which keep time in various ways, monitor temperature, rpm's, blink lights, post serial out, etc. The problem is that I can run any 5 of of the six routines without a hitch (as far as I can tell, some inter dependencies make that a little tricky, but this seems to be the case. But when I run all 6, my Debugger won't report to my screen. (if anyone checks it out, I use Labview to parse it a little, so if it looks a little funny in hyper terminal, sorry. Just comma delimited numbers.) It seems that my servo is still being controlled correctly, but I have no way to tell if the sensors are still behaving.
Why won't all of them launch? I don't believe that my @stack arrays are running into each other, but I'm too new to this to be very confident in that statement.
The idea is simply this: A motor boat waits for a pin to be set high, at which point there is a countdown of 15 or so seconds. A blinking LED pattern is used as a warning. The motor ramps up, and ramps down. The temp, and rpms are monitored throughout, which are sent to a serial port at the moment, and which I'd like to log to a USB (and have done before, but the code is not included as I have other problems right now.) It's a pretty simple process, and I could probably consolidate a few of the time-keeping procedures, but I'd rather learn in this situation, instead of finding a kludge around it.
Unfortunately, it might be necessary for me to post all of my code, but I'll try to see if just posting the top few blocks is enough, just to spare you. If anyone wants to see more, just let me know, and I'd be glad to post it.
Thanks, in advance for any help offered. Also, if anyone wants to pick on my code and suggest a better way, I'm definitely open to hearing it.
I just posted a few days ago, and Mike Green and BEEP definitely helped me with part of my problem, and now I'm hitting another wall which confuses me to death. Let me first say that all of my subroutines work just like they should (finally). The main program runs multiple cogs which keep time in various ways, monitor temperature, rpm's, blink lights, post serial out, etc. The problem is that I can run any 5 of of the six routines without a hitch (as far as I can tell, some inter dependencies make that a little tricky, but this seems to be the case. But when I run all 6, my Debugger won't report to my screen. (if anyone checks it out, I use Labview to parse it a little, so if it looks a little funny in hyper terminal, sorry. Just comma delimited numbers.) It seems that my servo is still being controlled correctly, but I have no way to tell if the sensors are still behaving.
Why won't all of them launch? I don't believe that my @stack arrays are running into each other, but I'm too new to this to be very confident in that statement.
The idea is simply this: A motor boat waits for a pin to be set high, at which point there is a countdown of 15 or so seconds. A blinking LED pattern is used as a warning. The motor ramps up, and ramps down. The temp, and rpms are monitored throughout, which are sent to a serial port at the moment, and which I'd like to log to a USB (and have done before, but the code is not included as I have other problems right now.) It's a pretty simple process, and I could probably consolidate a few of the time-keeping procedures, but I'd rather learn in this situation, instead of finding a kludge around it.
Unfortunately, it might be necessary for me to post all of my code, but I'll try to see if just posting the top few blocks is enough, just to spare you. If anyone wants to see more, just let me know, and I'd be glad to post it.
CON
_xinfreq = 5_000_000
_clkmode = xtal1 + pll16x
VAR
Byte stack1[noparse][[/noparse]100], stack2[noparse][[/noparse]100], stack3[noparse][[/noparse]100], stack4[noparse][[/noparse]100], stack5[noparse][[/noparse]100], stack6[noparse][[/noparse]100]
Byte lm34temp, secondsDelay, LEDPin, RPMPin, runState, servoPin
long highTime, RPMs, counter, secondsTillLaunch, maxHigh, servoPeriod
OBJ
Ser : "FullDuplexSerial"
PUB main | minHigh, peakTime, slowRampCoeff, rampCoeff, relayPin, index
'Servo
maxHigh := 1100*80
minHigh := 1000*80
servoPeriod := 20000*80
peakTime := 2 'seconds
runState := 0 'what the motor is actually doing
'The Coefficients affect the rate at which the motor ramps up and down
slowRampCoeff := 1*80
rampCoeff := 1*80
'Setting Pins
servoPin := 0
RPMPin := 15
LEDPin := 30
relayPin := 12
'Serial Comm Vars
rxpin := 14
txpin := 29
mode := 1
baud := 57600
'WarningLED
secondsDelay := 15
ser.start(rxpin, txpin, mode, baud)
dira[noparse][[/noparse]relayPin]~
highTime := minHigh
coginit(1, PulseServo, @stack1[noparse][[/noparse]0])
repeat until ina[noparse][[/noparse]relayPin] == 1
waitcnt(clkfreq / 5 + cnt)
'Launching all the new Cogs
coginit(2, TimerCountDown, @stack2[noparse][[/noparse]0])
coginit(3, ComputeMotorTemp, @stack3[noparse][[/noparse]0])
coginit(4, ReportingCog, @stack4[noparse][[/noparse]0])
coginit(5, RPM_Monitor, @stack5[noparse][[/noparse]0])
coginit(6, PulseWarningLED, @stack6[noparse][[/noparse]0])
'Makes sure propeller doesn't turn prematurely
repeat while secondsTillLaunch
waitcnt(clkfreq / 5 + cnt)
'Ensures a SLOW ramp, moving the pulse ahead by VERY little for ~3 seconds
runState := 1
repeat index from 1 to 30
highTime := hightime + slowRampCoeff
waitcnt(clkfreq / 10 + cnt)
'FASTER ramp to max speed
runState := 2
repeat until highTime == maxHigh
highTime := highTime + rampCoeff
highTime <#= maxHigh
waitcnt(clkfreq / 30 + cnt)
'Holding Maximum Speed for 'peakTime' seconds
runState := 3
waitcnt(clkfreq * peakTime + cnt)
'Ramp Down sort of fast
runState := 4
repeat until hightime == minHigh
highTime := highTime - rampCoeff
highTime #>= minHigH
waitcnt(clkfreq / 50 + cnt)
runState := 0
Thanks, in advance for any help offered. Also, if anyone wants to pick on my code and suggest a better way, I'm definitely open to hearing it.

Comments