On 12 February 2013 13:31, Eric Decker <[email protected]> wrote:

> First, the #define works because it is simple text substitution.   So if
> you look at the resultant app.c you will see
>
> error_t foo(nx_uint16_t val)
>
> when using the define.
>
> So of course it works.
>

I'd like to think so, but given that a plain typedef doesn't work in this
situation, I wouldn't say "of course" - there could've been something wrong
with using nx types as pass-by-value parameters, for example. :)


If you compile Blink say for the telosb and then take a look at app.c you
> can see where the nx types are defined.   Search for nx_uint16.
>

I'll do you one better, I'll show you what's in the app.c from the minimal
test case in my previous email:

First there's the nx_uint16_t which is an innocuous enough packed struct:
  typedef struct { unsigned char nxdata[2]; } __attribute__((packed))
nx_uint16_t;

Then there's an unused typedef of a __nesc_nxbase_nx_uint16_t whose use I'm
not entirely clear on without delving into compiler internals:
  typedef uint16_t __nesc_nxbase_nx_uint16_t  ;

There is of course my typedef, looking as expected (module__type name):
  typedef nx_uint16_t TestNxTypedefP__my_type16_t;

And then there's the weirdness of the function taking my typedef'd type as
an argument:
  static inline error_t
TestNxTypedefP__foo(TestNxTypedefP____nesc_nxbase_my_type16_t val);

What I had expected to see here was:
  static inline error_t TestNxTypedefP__foo(TestNxTypedefP__my_type16_t
val);


It seems the compiler has an internal translation rule for nx types that
translates them from the struct version to the "base" version. When
compiling with the #define rather than the typedef, the function prototype
looks like this:
  static inline error_t TestNxTypedefP__foo(__nesc_nxbase_nx_uint16_t val);


To me this seems like a nesc issue (or at the very least a nesc
documentation issue).
Who/where do I bounce this to?  Running nescc --help only points at the gcc
bug reporting, which is clearly not applicable here.



> Maybe adding a nx_ prefix to your type would help.
>

Tried that, it didn't help.


Thanks,
/Johny
*
*
_______________________________________________
Tinyos-help mailing list
[email protected]
https://www.millennium.berkeley.edu/cgi-bin/mailman/listinfo/tinyos-help

Reply via email to