diff options
| author | Keith Packard <keithp@keithp.com> | 2011-11-11 22:30:17 -0800 |
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-11-11 22:30:17 -0800 |
| commit | b132eefc5f63412bb4a98a4bb72b9055e40d5d42 (patch) | |
| tree | 53f0d529cf30b21649b69cee3e5f8966adf86642 /src/drivers/ao_gps_skytraq.c | |
| parent | 7ecde50fbebe68a2e2200a2f8d081fd37074f840 (diff) | |
altos: Make ao_xmem funcs require __xdata void * instead of casting
Having an explicit cast in the ao_xmem wrapper macros caused the
compiler to generate garbage values for pdata addresses, making the
upper byte 0x00 instead of the required 0xf0. Removing the
casts from the ao_xmem macros exposed this problem, so a new
PDATA_TO_XDATA macros was added, along with a CODE_TO_XDATA macro
which serve to cast pointers, with suitable address modifications, so
that things work again.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/drivers/ao_gps_skytraq.c')
| -rw-r--r-- | src/drivers/ao_gps_skytraq.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/drivers/ao_gps_skytraq.c b/src/drivers/ao_gps_skytraq.c index 1d457a1f..62909606 100644 --- a/src/drivers/ao_gps_skytraq.c +++ b/src/drivers/ao_gps_skytraq.c @@ -285,7 +285,7 @@ ao_nmea_gga(void) if (!ao_gps_error) { ao_mutex_get(&ao_gps_mutex); ao_gps_tick = ao_gps_next_tick; - ao_xmemcpy(&ao_gps_data, &ao_gps_next, sizeof (ao_gps_data)); + ao_xmemcpy(&ao_gps_data, PDATA_TO_XDATA(&ao_gps_next), sizeof (ao_gps_data)); ao_mutex_put(&ao_gps_mutex); ao_wakeup(&ao_gps_data); } @@ -343,8 +343,7 @@ ao_nmea_gsv(void) ao_gps_tracking_next.channels = 0; else if (done) { ao_mutex_get(&ao_gps_mutex); - ao_xmemcpy(&ao_gps_tracking_data, &ao_gps_tracking_next, - sizeof(ao_gps_tracking_data)); + ao_xmemcpy(&ao_gps_tracking_data, PDATA_TO_XDATA(&ao_gps_tracking_next), sizeof(ao_gps_tracking_data)); ao_mutex_put(&ao_gps_mutex); ao_wakeup(&ao_gps_tracking_data); } |
