- Posts: 19306
- Thank you received: 0
custom hal component failed to compile, undeclared (first use in this function)
3 years 10 months ago #260018
by andypugh
Replied by andypugh on topic custom hal component failed to compile, undeclared (first use in this function)
default. It is the (optional) case for if all other case tests fail.
generally, it prints an error and the what the unhandled progress_level (or whatever) was so that you can debug it.
generally, it prints an error and the what the unhandled progress_level (or whatever) was so that you can debug it.
Please Log in to join the conversation.
- smc.collins
- Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 721
- Thank you received: 0
3 years 10 months ago #260025
by smc.collins
Replied by smc.collins on topic custom hal component failed to compile, undeclared (first use in this function)
that's what i thought you meant. I'll look over it tonight
Please Log in to join the conversation.
- smc.collins
- Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 721
- Thank you received: 0
3 years 10 months ago #260056
by smc.collins
Replied by smc.collins on topic custom hal component failed to compile, undeclared (first use in this function)
ok, I went through and I saw what you were talking about with the loops. coding style matter here to keep things organized with the loops. I moved a lot of the loops around into what seemed like vastly more rationally organized executions for me to keep track of.
I think it's almost ready to try now. If you see any glaring error, copy and paste them so I can follow along a bit easier. On a good note, at the end of this there will be a relatively easy to modify turret control that should work on a lot of lathes.
I think it's almost ready to try now. If you see any glaring error, copy and paste them so I can follow along a bit easier. On a good note, at the end of this there will be a relatively easy to modify turret control that should work on a lot of lathes.
Please Log in to join the conversation.
3 years 10 months ago #260069
by andypugh
Replied by andypugh on topic custom hal component failed to compile, undeclared (first use in this function)
Your switch statement is still completely messed up.
Also, your pin decoding is mad.
(Though I would use the inverted inputs and positive logic in the component)
Also, your pin decoding is mad.
Code:
if (! strobe) position = !bcd1 + 2 * !bcd2 + 4 * !bcd3
(Though I would use the inverted inputs and positive logic in the component)
Please Log in to join the conversation.
- smc.collins
- Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 721
- Thank you received: 0
3 years 10 months ago #260079
by smc.collins
Replied by smc.collins on topic custom hal component failed to compile, undeclared (first use in this function)
exactly how is my switch statement incorrect, because looking at all the books and articles i have here on C, it doesn't.
logically speaking, there's bo difference in either decoding of the switch table, it's exactly the same
the statement
if all these things are true = X.
doesn't change by putting strobe as a condition ahead of the statement.
logically speaking, there's bo difference in either decoding of the switch table, it's exactly the same
the statement
if all these things are true = X.
doesn't change by putting strobe as a condition ahead of the statement.
Please Log in to join the conversation.
3 years 10 months ago #260080
by JPL
First thing I see is that you are using switch statement much like an 'if' statement. You should have only one switch statement, with multiple 'case' under it, not 3 switch statements with each a single 'case'. This way the program doesn't need to re-evaluates the 'case' 3 times in a row.
Changing the value of the expression evaluated used in the switch make it difficult to clearly follow the logic of the program and is generally considered bad practice. And in this case there is no 'case' for progress_level
or progress_level =4,
ref.: www.tutorialspoint.com/cprogramming/switch_statement_in_c.htm
Replied by JPL on topic custom hal component failed to compile, undeclared (first use in this function)
exactly how is my switch statement incorrect, because looking at all the books and articles i have here on C, it doesn't.
First thing I see is that you are using switch statement much like an 'if' statement. You should have only one switch statement, with multiple 'case' under it, not 3 switch statements with each a single 'case'. This way the program doesn't need to re-evaluates the 'case' 3 times in a row.
Changing the value of the expression evaluated used in the switch make it difficult to clearly follow the logic of the program and is generally considered bad practice. And in this case there is no 'case' for progress_level
or progress_level =4,ref.: www.tutorialspoint.com/cprogramming/switch_statement_in_c.htm
Please Log in to join the conversation.
3 years 10 months ago #260081
by Grotius
Replied by Grotius on topic custom hal component failed to compile, undeclared (first use in this function)
Hi,
I share a little experience with you.
When coding in .comp language, there is no editor syntax plugin available.
As a result coding is a struggle.
To make life easyer while coding a more complex component i think you can
consider the following :
1. preprocess your component to .c with halcompile. Then use a code editor like qt.
There are example .c components, that are human readable.
The problems you then have is setting the correct
includepath's etc. Then create a makefile wich an sich is quite difficult for a lcnc component.
After the preprocess, you will be able to extend code in the function area.
Then also qt can help you with the "switch case" function. It has build in auto complete for this.
2. A more powerfull way to create a component is using cmake. This is in my view the most
elegant solution to create a component. Where halcompile gives to user power, using the cmake way
gives you full power and a bird eye view right away.
A example for a cmake component (lcnc compatible) :
github.com/grotius-cnc/hal-core-2.0/blob...mponents/test/test.c
A example for lcnc in cmake, including components etc. (good excersize to compile this, and try out a little bit)
github.com/grotius-cnc/linuxcnc
For what i have seen in your last few posts. You could open a new nml channel inside your new component, to
set the initial tool values, or do other nml related things.
Here you can see how to use nml into your component :
github.com/grotius-cnc/linuxcnc/blob/mai...rojects/qt_nml/nml.h
If you want to try it in your current lcnc install. Try to use a example cmakefile.txt for a component and edit the includepath's, libdir's to your needs.
The only thing i can say, have a try. If you got it running, you won't regret the effort.
I share a little experience with you.
When coding in .comp language, there is no editor syntax plugin available.
As a result coding is a struggle.
To make life easyer while coding a more complex component i think you can
consider the following :
1. preprocess your component to .c with halcompile. Then use a code editor like qt.
There are example .c components, that are human readable.
The problems you then have is setting the correct
includepath's etc. Then create a makefile wich an sich is quite difficult for a lcnc component.
After the preprocess, you will be able to extend code in the function area.
Then also qt can help you with the "switch case" function. It has build in auto complete for this.
2. A more powerfull way to create a component is using cmake. This is in my view the most
elegant solution to create a component. Where halcompile gives to user power, using the cmake way
gives you full power and a bird eye view right away.
A example for a cmake component (lcnc compatible) :
github.com/grotius-cnc/hal-core-2.0/blob...mponents/test/test.c
A example for lcnc in cmake, including components etc. (good excersize to compile this, and try out a little bit)
github.com/grotius-cnc/linuxcnc
For what i have seen in your last few posts. You could open a new nml channel inside your new component, to
set the initial tool values, or do other nml related things.
Here you can see how to use nml into your component :
github.com/grotius-cnc/linuxcnc/blob/mai...rojects/qt_nml/nml.h
If you want to try it in your current lcnc install. Try to use a example cmakefile.txt for a component and edit the includepath's, libdir's to your needs.
The only thing i can say, have a try. If you got it running, you won't regret the effort.
Please Log in to join the conversation.
3 years 10 months ago #260091
by andypugh
You have "switch(progress_level)" three times.
You do not have the contents of the switch in {braces}
No, but my single "if" replaces _all_ of yours.
I am tired of this. I am dropping out of this thread.
Replied by andypugh on topic custom hal component failed to compile, undeclared (first use in this function)
exactly how is my switch statement incorrect, because looking at all the books and articles i have here on C, it doesn't.
You have "switch(progress_level)" three times.
You do not have the contents of the switch in {braces}
the statement
if all these things are true = X.
doesn't change by putting strobe as a condition ahead of the statement.
No, but my single "if" replaces _all_ of yours.
I am tired of this. I am dropping out of this thread.
Please Log in to join the conversation.
3 years 10 months ago #260109
by rodw
Replied by rodw on topic custom hal component failed to compile, undeclared (first use in this function)
I am a bit like Andy and don't want to wade in either but I suspect the current decoding algorithm is not a good choice.
So many ways to do this.
I think I would convert bcd1-bcd4 to an integer and use an enum (which might need changing around a bit so the case statement is arranged better.)
I might not quite understand the bcd states, but something like this....
This should end up with clearer code
So many ways to do this.
I think I would convert bcd1-bcd4 to an integer and use an enum (which might need changing around a bit so the case statement is arranged better.)
I might not quite understand the bcd states, but something like this....
Code:
enum tool_state(T0, T1, T2, T3, T4, T5, T6, T7,T8, T9, T10, T11, T12, T13, T14, T15);
/*
Tool States where bcd1 = rightmost (bit0)
T0 = 0000
T1 = 0001
T2 = 0010
T3 = 0011
T4 = 0100
T5 = 0101
T6 = 0110
T7 = 0111
T8 = 1000
T9 = 1001
T10 = 1010
T11 = 1011
T12 = 1100
T13 = 1101
T14 = 1110
T15 = 1111
*/
enum tool_state tool_idx;
tool_idx = (tool_state) bcd1 & (bcd2 << 1) & (bcd3 << 2) & (bcd4 << 3);
if(!strobe){
switch(tool_idx){
case T6: // 0b0110
position = 1;
break;
case T5:
position = 2; // 0b0101
break;
// .......
}
}
This should end up with clearer code
Please Log in to join the conversation.
- smc.collins
- Topic Author
- Offline
- Platinum Member
-
Less
More
- Posts: 721
- Thank you received: 0
3 years 10 months ago #260209
by smc.collins
Replied by smc.collins on topic custom hal component failed to compile, undeclared (first use in this function)
I'm not really interested or concerned with writing the smallest possible version of a program, particularly when I am prototyping it. I am absolutely choosing to use a very big version of this truth table until I decide that optimizing it is a priority, which it isn't. What is a priority, is having high legible easy to understand code that is easily readable to look for faults. I do appreciate your input Rod, thank you, I will consider adding the lookup table design at a later date. My comments are not directed at you.
so I decided after wading through more of hal, that it would be easier to train the new GPTchat bot with it. BTW this makes writing components easier as you can sketch your code, explain to the chat bot what you are trying to make and it will help you with debugging, logic etc, and it now knows the hal syntax, or my version of the bot does. It is a tremendous learning aid to say the least.
anyhow. I will be testing this version and the powerchuck comp " which I need to work out the gcode mapping for" once this -4 F weather clears out. powerchuck is a chucker program for hydrualic and pnuematic chucks, very simple clean and elegant. offer manual and gcode control options and is stone simple. I am very suprised no one has posted a chuck control component yet, maybe I missed it ?
For those who have contributed positive and helpful comments, thank you very much for your time it is appreciated greatly.
so I decided after wading through more of hal, that it would be easier to train the new GPTchat bot with it. BTW this makes writing components easier as you can sketch your code, explain to the chat bot what you are trying to make and it will help you with debugging, logic etc, and it now knows the hal syntax, or my version of the bot does. It is a tremendous learning aid to say the least.
anyhow. I will be testing this version and the powerchuck comp " which I need to work out the gcode mapping for" once this -4 F weather clears out. powerchuck is a chucker program for hydrualic and pnuematic chucks, very simple clean and elegant. offer manual and gcode control options and is stone simple. I am very suprised no one has posted a chuck control component yet, maybe I missed it ?
For those who have contributed positive and helpful comments, thank you very much for your time it is appreciated greatly.
Please Log in to join the conversation.
Time to create page: 0.069 seconds
