[ell-i-developers] Re: CoAP testing (was Re: Status report: Also CoAP works in real hardware. Please test.)

  • From: Pekka Nikander <pekka.nikander@xxxxxx>
  • To: ell-i-developers@xxxxxxxxxxxxx
  • Date: Sun, 16 Mar 2014 20:04:57 +0200

I pushed a new version to feature-coap-wip, with the typo fix.  More 
importantly, the IP checksum handling has now been changed so that the IP 
header checksum is recomputed each and every time a packet is sent out.  In my 
environment, this version works externally as well as the previous one: answers 
to ARP, UDP echo, and CoAP.  The corner cases with IP checksums should be fixed 
now, thanks to Antti's suggestions off-list.

Next on my list is to clean up the ENC28J60 code somewhat, mostly inlining some 
SPI functions so in order to reduce the code size.  (At the moment 
enc28j60_spi.o is huge by our standards (over 800 bytes), as the compiler is 
not able to perform constant propagation on pins.  Fixing this requires moving 
those functions inline, allowing constant propagation to optimise them when 
they are called from the user-level code in the CoAP header.  But we really 
should move to LLVM also on ARM, to avoid this.)

>>> g++: error: unrecognized command line option ‘--start-group’
>>> g++: error: unrecognized command line option ‘--end-group’
>>> make: *** [hello_world] Error 1
>> Hmm.  What is your native g++ version?  I guess --start-group and 
>> --end-group should be -Wl,--start-group and -Wl,--end-group for emulator 
>> linking in Linux.

> Thanks, the version should be quite recent one:
> eero@kiinakone:~/sw-engineering/sulautetut/ng-ell-i/Arduino/hardware/ell-i/stm32/examples/CoAP$
>  g++ --version
> g++ (GCC) 4.8.2

Looks recent enough to me.  :-)

Hence, the issue is that when linking for ARM, we use the ld command, when 
linking for the emulator, we use the g++ command.  The reason for this is that 
when linking for the ARM, we want strict control over the libraries, while for 
the emulator we want to have whatever libraries GCC uses by default.  The ld 
command takes --start-group and --end-group directly.  The g++ command does not 
understand them, and therefore they must be prefixed -Wl,

At the moment it is more important to link for ARM and test on the real board.


Other related posts: