2121 } \
2222 return data; \
2323 } else { \
24- return *(_type *)((uint8_t *) param->addr + i * param->array_step); \
24+ /* Increment pointer in bytes, we have static check on array step being aligned */ \
25+ uintptr_t aligned_address = (uintptr_t )param -> addr + (uintptr_t ) i * (uintptr_t )param -> array_step ; \
26+ return * (_type * )aligned_address ; \
2527 } \
2628 } \
2729 _type param_get_ ##_name (const param_t * param ) { \
@@ -90,7 +92,8 @@ void param_get_data(const param_t * param, void * outbuf, int len)
9092#endif
9193
9294#define PARAM_SET (_type , name_in , _swapfct ) \
93- static void __param_set_ ##name_in (const param_t * param, _type value, bool do_callback, unsigned int i) { \
95+ void __param_set_ ##name_in (const param_t * param, _type value, bool do_callback, unsigned int i); \
96+ void __param_set_##name_in(const param_t * param, _type value, bool do_callback, unsigned int i) { \
9497 if (i >= (unsigned int) param->array_size) { \
9598 return; \
9699 } \
@@ -99,8 +102,11 @@ void param_get_data(const param_t * param, void * outbuf, int len)
99102 value = _swapfct(value); \
100103 vmem_write_direct(param->vmem, param->vmem->vaddr + param->vaddr + i * param->array_step, &value, sizeof(_type)); \
101104 } else { \
105+ /* Increment pointer in bytes, we have static check on array step being aligned */ \
106+ uintptr_t aligned_write_address = (uintptr_t )param -> addr + (uintptr_t ) i * (uintptr_t )param -> array_step ; \
102107 /* Aligned access directly to RAM */ \
103- * (_type * )((uint8_t * ) param -> addr + i * param -> array_step ) = value ; \
108+ _type * typecasted_write_address = (_type * )aligned_write_address ; \
109+ * typecasted_write_address = value ; \
104110 } \
105111 /* Callback */ \
106112 if ((do_callback == true) && (param -> callback )) { \
0 commit comments