Cannot use sub arguments in loops while option implicit
sub stopmotors(fl,fr,t) ' Stop motor from high speed to 0 in time t*10ms dl=fl/t dr=fr/t for i= 0 to t fl=fl-dl : fr=fr-dr if fr<0 then fr=0 if fl<0 then fl=0 waitms 10: wypin(l_motor_pwm,fl) : wypin(r_motor_pwm,fr) next i pinlo(r_motor_enable) : pinlo(r_motor_break) : pinlo(l_motor_enable) :pinlo(l_motor_break) end sub
This generates warnings:
C:/Programowanie/ultibo-robot/01 obrum/Propeller/robuv_obrum023.bas:149: warning: definition of fl hides a member variable
C:/Programowanie/ultibo-robot/01 obrum/Propeller/robuv_obrum023.bas:156: note: previous definition of fl is here
C:/Programowanie/ultibo-robot/01 obrum/Propeller/robuv_obrum023.bas:149: warning: definition of fr hides a member variable
C:/Programowanie/ultibo-robot/01 obrum/Propeller/robuv_obrum023.bas:156: note: previous definition of fr is here
as if the compiler treats the loop as something other than the sub and don't tries to redeclare fl and fr.
Line 149 is
sub stopmotors(fl,fr,t)
What can I do? Option explicit and dim all variables (..... ...... ) ? Or is there any other way to do this?
Edit: removed option implicit while the program is still small, dimed all vars, now the compiler doesn't complain, but still.. it should not redeclare inner loop variables when they are declared in the function (if I declared these as var at the start of the function, the compiler still tried to redeclare them inside the loop.)
Comments
@pik33 : That warning is bogus, and I'll try to fix it. But the generated code is correct, that is, "fl" and "fr" really are treated as function parameters.
Thanks for the bug report,
Another "option implicit" problem
if I have
and then try to use the "sl" inside a sub, it is redeclared as a local variable inside this sub so it doesn't work.
I tried to dim this variable to make it global, but then after this:
I got
error: Re-defining member sl
The simplest test code to reproduce:
This doesn't compile:
This compiles:
This also compiles:
and I can even see this sl(0) inside a sub
It looks like "option implicit" is causing more trouble than it is worth. I think I'll remove it soon, but for now just avoid it and use "option explicit".
Don't remove this... This is Basic... Classic code will no more work...
Edit: I can't assign to variable but I can read it.
Instead of test=1, which generates error, I can lpoke(addr(test),1) which works. I can then print test, which prints what I poked there