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

 
 
> C++ в микроконтроллерах, посветите безграмотного.
-=Sergei=-
сообщение Mar 17 2008, 09:20
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 339
Регистрация: 26-10-04
Пользователь №: 985



Имеем ARM Cortex-M3.

Ядро за командами лазит в флеш через шину Icode, за данными через system в ОЗУ. Конфликтов нет, работаем быстро.

я создаю некий объект обладающий свойствами и функциями. Он создается в ОЗУ. Т.е. теперь если я начну выполнять некую функцию объекта, то теперь и за командами и за данными ядро будет лазить в ОЗУ, возникают конфликты и их разрешение снижает производительность. Или я не праивльно понимаю создание объекта? Код функций объекта все так же будет распалагаться во Флеш а свойства в ОЗУ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Mar 17 2008, 10:06
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(-=Sergei=- @ Mar 17 2008, 12:20) *
я создаю некий объект обладающий свойствами и функциями. Он создается в ОЗУ. Т.е. теперь если я начну выполнять некую функцию объекта, то теперь и за командами и за данными ядро будет лазить в ОЗУ, возникают конфликты и их разрешение снижает производительность. Или я не праивльно понимаю создание объекта? Код функций объекта все так же будет распалагаться во Флеш а свойства в ОЗУ?

объект создается не в ОЗУ, а в определенном сегменте/секции. Причем там располагаются исключительно данные и указатель на VMT, а все функции (они в одном экземпляре для каждого класса) остаются в сегменте/секции кода.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 17 2008, 12:21
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(KRS @ Mar 17 2008, 12:06) *
объект создается не в ОЗУ, а в определенном сегменте/секции

, который/которая должны находиться таки в ОЗУ, т. к. в read-only памяти объект не может быть сконструирован
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 17 2008, 12:44
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(IgorKossak @ Mar 17 2008, 15:21) *
, который/которая должны находиться таки в ОЗУ, т. к. в read-only памяти объект не может быть сконструирован

который объявлен глобально и как const может.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 18 2008, 06:37
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(KRS @ Mar 17 2008, 14:44) *
который объявлен глобально и как const может.

Именно так и объявленный объект создаётся In section .bss, а также создаются конструкторы, пишущие в эту область памяти.
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 18 2008, 07:39
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(IgorKossak @ Mar 18 2008, 09:37) *
Именно так и объявленный объект создаётся In section .bss, а также создаются конструкторы, пишущие в эту область памяти.

Объект может не иметь конструктора. и все методы могут быть конст. Вот пример который кидает данные в скецию .rodata
Это конечно простой объект без VMT - реально просто структура с методами. Но такой подход может быть полезен никакого оверхида
Код
class cls {
    public:
        int a;
        int b;
        int foo(void) const;
};

extern const cls a;
extern const cls b;

const cls a = {4,5};
const cls b = {6,7};

int cls::foo(void) const
{
    return a + b;
}

а вот листинг
Код
   \                                 In section .rodata, align 4
     11          const cls a = {4,5};
   \                     a:
   \   00000000   040000000500       DC32 4, 5
   \              0000        

   \                                 In section .rodata, align 4
     12          const cls b = {6,7};
   \                     `b`:
   \   00000000   060000000700       DC32 6, 7
   \              0000        
     13          

   \                                 In section .text, align 4, keep-with-next
     14          int cls::foo(void) const
     15          {
     16              return a + b;
   \                     _ZNK3cls3fooEv:
   \   00000000   0168               LDR      R1,[R0, #+0]
   \   00000002   4068               LDR      R0,[R0, #+4]
   \   00000004   0818               ADDS     R0,R1,R0
   \   00000006   7047               BX       LR              ;; return
     17          }
     18
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 09:08
Рейтинг@Mail.ru


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