|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
So i have to say that my array of buttons is going to be holding addresses by declaring it like this:
Code:
int (*)joystickbuttons[8] = {&p1_sw_trig, &p1_sw_top, &pl_sw_aux1, &p1_sw_aux2, &p2_sw_trig, &p2_sw_top, &p2_sw_aux1, &p2_sw_aux2};
And the 2nd half of the above code: Code:
if ((*)joystickbuttons[arrayindexer[1]] == 1) I don't get some of your example: Code:
void idouble(int * input){ Input the address and convert it to the data "input"
*input += input ; I don't get the use of *input
}
void main(){
int x ;
x = 5 ;
idouble(&x) ; Call the above function giving it an address as a parameter
print(x); I don't get how the idouble() returns x
}
Last edited by amateurrobotguy : 13-12-2007 at 02:11. |
|
#2
|
|||
|
|||
|
Re: How to manipulate a variable value using an array?
Quote:
|
|
#3
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
Oh you sly bastard
You are basically bypassing the whole naming system of variables with input and directly puting data to addresses. I like this The int *input is just the declaration of input and not the actual conversion of &x to data....that was the confusing part. I can see why google refers to pointers as "advanced c".Can you check the code i posted above the above post to tell me if that will work fine? Last edited by amateurrobotguy : 13-12-2007 at 02:29. |
|
#4
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
This code isn't working:
int *joystickbuttons[8] = {&p1_sw_trig, &p1_sw_top, &pl_sw_aux1, &p1_sw_aux2, &p2_sw_trig, &p2_sw_top, &p2_sw_aux1, &p2_sw_aux2}; it errors me saying I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1105] symbol 'pl_sw_aux1' has not been defined I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1101] lvalue required I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1218] extraneous initializer values |
|
#5
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
Well I see you have a pl instead of a p1
|
|
#6
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
I fixed that but it still says
I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield I:\Robot\2007\MPLAB\Current\2007_2005\user_routine s.c:411:Error [1200] cannot reference the address of a bitfield |
|
#7
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
not a 100% but I think it may have something to do with the fact that the p1, p2 etc switches are defined to structures. They're defined in the C preprocessor but they were never declared as variables anywhere else(atleast not anywhere I could find)
I'm thinking that you can't do this with those variables... Last edited by kevin.li.rit : 13-12-2007 at 21:08. |
|
#8
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
The problem is what MPLAB says it is, you cannot reference (aka have a pointer to) a bitfield, relay outputs and, I assume, joystick switch states are stored in bitfields.
|
|
#9
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
I know they are defined in ifi_aliases.h with the #define. So how do I get them out of bitfields? Do i need to "redeclare" them as ints?
|
|
#10
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
When I was trying to write a generalized, modular library for FRC robots (something like WPIlib, but not as high level), I ran into this same issue, but with relay outputs. My solution was to use a structure for storing the values then, at the end of the program loop, call a function that assigned the values in the structure to the actual relays. I think you could do something similar in your case; for example, you could just assign the values of the switches to the various variables in your array at the beginning of every program cycle.
|
|
#11
|
|||||
|
|||||
|
Re: How to manipulate a variable value using an array?
I don't think you can redefine them to an INT since it's using a structure.
|
|
#12
|
|||
|
|||
|
Re: How to manipulate a variable value using an array?
Each of these names refers to a single bit, not a byte. Because each symbol is referring to a bit and not a byte, an address is insufficient to identify the symbol. The wikipedia article http://en.wikipedia.org/wiki/Bitfield explains the concept very well.
Quote:
~Phil |
|
#13
|
||||
|
||||
|
Re: How to manipulate a variable value using an array?
So much for elegant coding...
But i think lukevanoort's workaround will work, just as long as I put it all in a separate function. My goal with this was just to clean up a billion if-thens into a for loop but i guess a if-then function will make the code easier to read anyways. Last edited by amateurrobotguy : 14-12-2007 at 00:23. |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| turning inputs into outputs | Huron Warriors | Programming | 4 | 19-04-2007 22:10 |
| How do the Analog Inputs work? | JBotAlan | Electrical | 3 | 07-01-2005 00:11 |
| How to put Inventor pics on the web | Andrew Schuetze | Inventor | 7 | 05-01-2005 13:59 |
| How much time do you put into building your robot | Wayne Doenges | General Forum | 16 | 29-01-2002 19:30 |
| put effort into thread subject | Brandon Martus | General Forum | 12 | 28-01-2002 19:12 |