paparazzi-commits
[Top][All Lists]
Advanced

[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;





reply via email to

[Prev in Thread] Current Thread [Next in Thread]