]> git.sur5r.net Git - openocd/commitdiff
Fix stm32x and pic32mx flash pointer cast alignment warnings, simplify their last...
authorzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 7 May 2009 00:21:59 +0000 (00:21 +0000)
committerzwelch <zwelch@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Thu, 7 May 2009 00:21:59 +0000 (00:21 +0000)
git-svn-id: svn://svn.berlios.de/openocd/trunk@1626 b42882b7-edfa-0310-969c-e2dbd0fdcd60

src/flash/pic32mx.c
src/flash/stm32x.c

index 77c9f4072c54b6a7ec3bf5f3821f923decd7e1aa..94ec74589ceeb2d5dba90f67e2fa6a2870d03ee9 100644 (file)
@@ -463,9 +463,10 @@ static int pic32mx_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset
 
        while(count > 0)
        {
-               u32 status;
+               u32 value;
+               memcpy(&value, buffer, sizeof(u32));
 
-               status = pic32mx_write_word(bank, address, *(u32*)buffer);
+               u32 status = pic32mx_write_word(bank, address, value);
                if( status & NVMCON_NVMERR ) {
                        LOG_ERROR("Flash write error NVMERR (status=0x%08x)", status);
                        retval = ERROR_FLASH_OPERATION_FAILED;
@@ -568,8 +569,10 @@ static int pic32mx_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32
 
        while (words_remaining > 0)
        {
-               status = pic32mx_write_word(bank, address, *(u32*)(buffer + bytes_written));
+               u32 value;
+               memcpy(&value, buffer + bytes_written, sizeof(u32));
 
+               status = pic32mx_write_word(bank, address, value);
                if( status & NVMCON_NVMERR )
                        return ERROR_FLASH_OPERATION_FAILED;
                if( status & NVMCON_LVDERR )
@@ -582,19 +585,10 @@ static int pic32mx_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32
 
        if (bytes_remaining)
        {
-               u8 last_word[4] = {0xff, 0xff, 0xff, 0xff};
-               int i = 0;
-
-               while(bytes_remaining > 0)
-               {
-                       /* Assumes little endian */
-                       last_word[i++] = *(buffer + bytes_written);
-                       bytes_remaining--;
-                       bytes_written++;
-               }
-
-               status = pic32mx_write_word(bank, address, *(u32*)last_word);
+               u32 value = 0xffffffff;
+               memcpy(&value, buffer + bytes_written, bytes_remaining);
 
+               status = pic32mx_write_word(bank, address, value);
                if( status & NVMCON_NVMERR )
                        return ERROR_FLASH_OPERATION_FAILED;
                if( status & NVMCON_LVDERR )
index 8b8723915800b042d15b601fa8722f2650e19c25..e151fc573811ffd0bb6f6d4710eabeaa76c92865 100644 (file)
@@ -658,8 +658,11 @@ static int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 c
 
        while (words_remaining > 0)
        {
+               u16 value;
+               memcpy(&value, buffer + bytes_written, sizeof(u16));
+
                target_write_u32(target, STM32_FLASH_CR, FLASH_PG);
-               target_write_u16(target, address, *(u16*)(buffer + bytes_written));
+               target_write_u16(target, address, value);
                
                status = stm32x_wait_status_busy(bank, 5);
                
@@ -681,18 +684,11 @@ static int stm32x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 c
        
        if (bytes_remaining)
        {
-               u8 last_halfword[2] = {0xff, 0xff};
-               int i = 0;
-                               
-               while(bytes_remaining > 0)
-               {
-                       last_halfword[i++] = *(buffer + bytes_written); 
-                       bytes_remaining--;
-                       bytes_written++;
-               }
-               
+               u16 value = 0xffff;
+               memcpy(&value, buffer + bytes_written, bytes_remaining);
+
                target_write_u32(target, STM32_FLASH_CR, FLASH_PG);
-               target_write_u16(target, address, *(u16*)last_halfword);
+               target_write_u16(target, address, value);
                
                status = stm32x_wait_status_busy(bank, 5);