Hi all, I am working with the TI TUSB3200, trying to modify their example code for our own USB device. USB requires many tables which start with a length byte. I would like to use the sizeof operator to calculate this for me, as shown here:
byte code rictest[] = { sizeof(rictest), 1, 2 };
warning C198: sizeof returns 0
Sorry guys, I didn't spell out all my requirements. The table is in read-only ROM, so I can't modify the first element later on. I want to experiment adding and removing entries to these tables, so the length will vary. It seems very labour intensive (and error-prone) to manually count the bytes each time. I was trying to think of some way to make a macro to somehow do a dummy define on the data to work out the size, and then do the real define once it knows the answer, but I can't think of a way to do this without really creating the table (so I would end up with two copies of it). I suppose the last resort solution would be to write a pre-processor in Visual Basic to construct the C source file for me...
You could do something like...
#include <string.h> static unsigned char code descriptor [] = { 1,2,3,4,5,6,7 }; unsigned char xdata xdescriptor [1 + sizeof (descriptor)] = { sizeof (descriptor), }; void main (void) { memcpy (&xdescriptor[1], descriptor, sizeof (descriptor)); }
"read-only ROM" What other sort of ROM is there?! ;-)
Can you make use of strings?
#define RICTEST_STR "\x1\x2" struct rictest_t { byte size; char str[sizeof(RICTEST_STR)]; }; struct rictest_t rictest = { sizeof(struct rictest_t), RICTEST_STR};
Andrew said: : "read-only ROM" : : What other sort of ROM is there?! ;-) What's wrong with a bit of redundancy? :~) It fits in well with "LCD display", "DOS operating System", "PIN number", "USB bus" ...
"What's wrong with a bit of redundancy? :~)" It's not redundancy, it's tautology! "It fits in well with 'LCD display', 'DOS operating System', 'PIN number', 'USB bus' ... Yes, it's exactly the same error - they're all just as bad! ;-)