Writing a needet HAL Component

More
7 years 2 months ago #143267 by rodw
Replied by rodw on topic Writing a needet HAL Component
Ok, the ; needs to go after the do{}while loop not on the first character of the next line

All lines in C need to be terminated with a ; sorry about that
Code:
do{ this_cycle++; }while(this_cycle < cycle);

Yes matching braces is important.

But I missed one on this line, so add it in
Code:
if(!is_warping){

so put the last one back!

It will be pretty close then

Please Log in to join the conversation.

More
7 years 2 months ago #143287 by Emanresu
There is no need to say sorry for anything^^
For me C, C# and C++ is some kind of black magic :)

Ive to go to work, so i just give a quick update:
Everything looks good, just no counting so far.

This is while Commpiling:
Code:
voxters@Vox-CNC:~/Arbeitsfläche$ sudo halcompile --install runner.comp make KBUILD_EXTRA_SYMBOLS=/usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/Module.symvers -C /usr/src/linux-headers-3.4-9-rtai-686-pae SUBDIRS=`pwd` CC=gcc V=0 modules make[1]: Entering directory `/usr/src/linux-headers-3.4-9-rtai-686-pae' CC [M] /tmp/tmpLn7hZ4/runner.o runner.comp: In function '_': runner.comp:50:9: warning: value computed is not used [-Wunused-value] runner.comp:57:5: warning: suggest explicit braces to avoid ambiguous 'else' [-Wparentheses] Building modules, stage 2. MODPOST 1 modules CC /tmp/tmpLn7hZ4/runner.mod.o LD [M] /tmp/tmpLn7hZ4/runner.ko make[1]: Leaving directory `/usr/src/linux-headers-3.4-9-rtai-686-pae' cp runner.ko /usr/realtime-3.4-9-rtai-686-pae/modules/linuxcnc/ voxters@Vox-CNC:~/Arbeitsfläche$

The code.
Code:
description """ Example: loadrt u32runner [count=N|names=name1[,name2...]] runner.N.run bit in => run runner.N.from u32 in => Number to start =>(just nice to have) runner.N.to u32 in => Number to count to =>(if there is no "from" this can also be "THE" number) runner.N.speed s32 in => count speed =>(must have - can also be an u32 if in ms) runner.N.cycle bit in => repeat yes/no =>(must have) runner.N.rev bit in => count backwards =>(just nice to have) runner.N.warp bit in => one way or up and down =>(one way is need, up and down is nice to have) runner.N.out u32 out => output =>(need of course) """; author "Rod Webster"; // Example Calibration Data: 0v = 122.9 kHz, 10v = 925.7 Khz should be entered as 122900 and 925700 pin in bit run "count if true"; pin in signed from "number to count from"; pin in signed to "number to count to"; pin in unsigned speed = 1 "number of cycles between counts (default = 1 = one servo thread cycle)"; pin in bit cycle = 1 "if true, start again or stop"; pin in bit warp "if true, count up and then back down"; pin out unsigned out "the number to output"; function _; license "GPL"; ;; #include <rtapi_math.h> FUNCTION(_) { static int first_pass = 1; static int this_cycle = 0; static int step = 1; static int counter = 0; static int is_warping = 0; if(first_pass){ //set up counter = from; first_pass = 0; } if(cycle < 1){ cycle == 1; } if(run){ do{ this_cycle++; }while(this_cycle < cycle); this_cycle = 0; if(!is_warping) if(from > to) // Set the direction to count step = -1; else step = 1; counter += step; if(counter == to){ // we got to the destination counter = to; // stop counting if(warp){ is_warping = 1;{ if(step > 0) step = -1; else step = 0; } } } else{ counter += step; if(counter == to){ is_warping = 0; if(step > 0) step = -1; else step = 0; } } } }

Please Log in to join the conversation.

More
7 years 2 months ago #143289 by Emanresu
Off Topic

Just noticed you live in one of the most beautiful countries in the world.
I was working on going to Australia since 5 years with my CNC-Shop.
I also had different sponsorships to start with.
But each time the GOV told my sponsors they have to look 3month in Australia
bevore they can take me.

Now i try New Zealand^^

No idea why, just had to mention it. Maybe just in case if you wona live in Germany
and switch Passports :-P

Please Log in to join the conversation.

More
7 years 2 months ago #143293 by rodw
Replied by rodw on topic Writing a needet HAL Component
Well it looks like I got your logic wrong.
Try changing to this
Code:
do{ this_cycle++; }while(this_cycle < speed);

I was counting to the wrong variable

I think you need to reconsider the pins cycle and warp because the way I see it it would be much easier to have one pin where:
0 = count once and stop
1 = count from from to to and repeat from the beginning
3 = count from from to too and back to from again and repeat. (warp)

That would be much easier to code as you could use a switch statement

Thanks for your interest in Australia. Clive S is coming to meet me on a holiday later in the year so there is hope for you yet. New Zealand is also an amazing country.

Please Log in to join the conversation.

More
7 years 2 months ago #143295 by Emanresu
Awesome!

Cant wait to get home and test it!

In fact a single input with more variables was my first idea.
I just thought this is MORE complex and harder to realize.
(As you see... zero skills in coding :) )
So if this is easyer, just go ahead!

And a question:
Im free to change "signed" and "unsigned" for the
inputs / output or will it interrupt the code?
Atleast i get no message while compiling.

That way i dont need a converter in HAL.

Please Log in to join the conversation.

More
7 years 2 months ago #143306 by rodw
Replied by rodw on topic Writing a needet HAL Component
signed and unsigned make no difference really. They are the same size. They are much bigger numbers now but in the 8 bit days signed went from -32767 to +32767 and unsigned went from 0-65535

I can't guarantee I will get time to finish it off for you

Please Log in to join the conversation.

More
7 years 2 months ago #143326 by Emanresu
Perfeckt!

Thats an awesome information for further projects and give some new options!

Dont worry, if you dont have the time.
You allready helped me way more then i was thinking off when i started this Topic.

Now i know, its possible, what to look for and i even have a base to work on!

Please Log in to join the conversation.

Time to create page: 0.057 seconds
Powered by Kunena Forum