[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[paparazzi-commits] [4764] fix support for doubles; alignment on 32bits
From: |
Pascal Brisset |
Subject: |
[paparazzi-commits] [4764] fix support for doubles; alignment on 32bits max |
Date: |
Tue, 30 Mar 2010 09:58:04 +0000 |
Revision: 4764
http://svn.sv.gnu.org/viewvc/?view=rev&root=paparazzi&revision=4764
Author: hecto
Date: 2010-03-30 09:58:04 +0000 (Tue, 30 Mar 2010)
Log Message:
-----------
fix support for doubles; alignment on 32bits max
Modified Paths:
--------------
paparazzi3/trunk/sw/tools/gen_messages.ml
Modified: paparazzi3/trunk/sw/tools/gen_messages.ml
===================================================================
--- paparazzi3/trunk/sw/tools/gen_messages.ml 2010-03-30 09:56:45 UTC (rev
4763)
+++ paparazzi3/trunk/sw/tools/gen_messages.ml 2010-03-30 09:58:04 UTC (rev
4764)
@@ -213,7 +213,7 @@
(** Converts bytes into the required type *)
let typed = fun o pprz_type -> (* o for offset *)
let size = pprz_type.Pprz.size in
- if check_alignment && o mod size <> 0 then
+ if check_alignment && o mod (min size 4) <> 0 then
failwith (sprintf "Wrong alignment of field '%s' in message '%s"
field_name msg_name);
match size with
@@ -227,7 +227,7 @@
s := !s ^ sprintf "|((uint64_t)*((uint8_t*)_payload+%d+%d))<<%d"
o i (8*i)
done;
- sprintf "({ union { uint64_t u; double f; } _f; _f.u =
(uint64_t)(%s); _f.f; })" !s
+ sprintf "({ union { uint64_t u; double f; } _f; _f.u =
(uint64_t)(%s); Swap32IfBigEndian(_f.u); _f.f; })" !s
| 4 ->
sprintf
"(%s)(*((uint8_t*)_payload+%d)|*((uint8_t*)_payload+%d+1)<<8|((uint32_t)*((uint8_t*)_payload+%d+2))<<16|((uint32_t)*((uint8_t*)_payload+%d+3))<<24)"
pprz_type.Pprz.inttype o o o o
| _ -> failwith "unexpected size in Gen_messages.print_get_macros" in
@@ -246,7 +246,7 @@
(** The macro to access to the array itself *)
let pprz_type = Syntax.assoc_types t in
- if check_alignment && !offset mod pprz_type.Pprz.size <> 0 then
+ if check_alignment && !offset mod (min pprz_type.Pprz.size 4) <> 0
then
failwith (sprintf "Wrong alignment of field '%s' in message '%s"
field_name msg_name);
fprintf h "#define DL_%s_%s(_payload) ((%s*)(_payload+%d))\n"
msg_name field_name pprz_type.Pprz.inttype !offset;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [paparazzi-commits] [4764] fix support for doubles; alignment on 32bits max,
Pascal Brisset <=