реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Кодогенерация в IAR (ARM7TDMI-S), Копирование слов
meister
сообщение Sep 18 2008, 07:22
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 219
Регистрация: 20-11-07
Пользователь №: 32 484



Он копирует слово побайтно. Но основная проблема в том, что meter_info_format_cached__ находится в батарейной RAM, которая can be accessed word-wise (32-bit) only.

Код
//   34             meter_info_format_cached__ = mif;
        LDR      R0,??check_and_repair_1+0xC ;; ??meter_info_format_cached__
        ADD      R1,SP,#+8
        LDRB     R2,[R1, #0]
        STRB     R2,[R0, #0]
        LDRB     R2,[R1, #+1]
        STRB     R2,[R0, #+1]
        LDRB     R2,[R1, #+2]
        STRB     R2,[R0, #+2]
        LDRB     R2,[R1, #+3]
        STRB     R2,[R0, #+3]


IAR все время структуры копирует побайтно, этим можно управлять?

Код
    template <unsigned W, unsigned BN> class meter_info_format_tpl
    {
        static unsigned const BS = W - BN - BN;

        dword blocks_number_total_ : BN;
        dword blocks_number_occupied_ : BN;
        dword block_size_ : BS;
    };
    
    typedef meter_info_format_tpl<32, 12> meter_info_format_t;
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Sep 18 2008, 08:27
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(meister @ Sep 18 2008, 10:22) *
IAR все время структуры копирует побайтно, этим можно управлять?
А вы нигде случайно перед описанием этой структуры не ставили #pragma pack(1)?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th June 2025 - 09:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016