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

 
 
 
Reply to this topicStart new topic
> Как прочитать данные из памяти процессора, в массив
alt3857
сообщение Nov 18 2010, 13:00
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Привет! Что-то я торможу, как проще сделать? Придумал через цикл, но кажется что можно с указателями проще - не могу сообразить как.

Сообщение отредактировал alt3857 - Nov 18 2010, 13:02
Go to the top of the page
 
+Quote Post
Methane
сообщение Nov 18 2010, 13:03
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230



Цитата(alt3857 @ Nov 18 2010, 15:00) *
Привет! Что-то я торможу, как проще сделать? Придумал через цикл, но кажется что можно с указателями проще - не могу сообразить как.

А где массив находится?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 18 2010, 13:19
Сообщение #3


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



memcpy
memcpy_P


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
alt3857
сообщение Nov 18 2010, 13:50
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



массив просто определен в программе глобально, нужно в него кусок памяти сбросить
memcpy - можно, но нужно доп. библиотеки задействовать
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Nov 18 2010, 13:54
Сообщение #5


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(alt3857 @ Nov 18 2010, 16:50) *
memcpy - можно, но нужно доп. библиотеки задействовать

Ничего не нужно - это стандартная библиотека и компилятор всё сделает за Вас.
подключите <string.h>
и <avr/pgmspace.h> для avr-gcc

Проще не бывает.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
alt3857
сообщение Nov 18 2010, 14:05
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Она стандартная, но наверное код увеличится?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 18 2010, 15:45
Сообщение #7


Гуру
******

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



QUOTE (alt3857 @ Nov 18 2010, 16:05) *
Она стандартная, но наверное код увеличится?
А если вы будете врукопашную байты перетаскивать - код не увеличится?


--------------------
На любой вопрос даю любой ответ
"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
demiurg_spb
сообщение Nov 18 2010, 16:08
Сообщение #8


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Тут не о чем думать. Пробуйте!!!


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Nov 18 2010, 18:17
Сообщение #9


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



реализация memcpy должна быть весьма неплохо оптимизирована в стандартной поставке.
Организовать что-то более оптимально может быть и можно(если этого уже не сделали), но только на асме.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
alt3857
сообщение Nov 19 2010, 04:25
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 94
Регистрация: 21-04-10
Пользователь №: 56 794



Спасибо, буду пробовать memcpy
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 19 2010, 08:57
Сообщение #11


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Были случаи, когда простой цикл присваивания по элементам работал быстрее, чем memcpy. Все зависит от конкретной ситуации, объема копируемых данных и их расположения в памяти.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
sigmaN
сообщение Nov 21 2010, 04:11
Сообщение #12


I WANT TO BELIEVE
******

Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751



Цитата
Были случаи, когда простой цикл присваивания по элементам работал быстрее, чем memcpy
Очень интересно однако...


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
ReAl
сообщение Nov 21 2010, 11:55
Сообщение #13


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Да запросто, на короткой структуре загрузка адресов, вызов/возврат, универасльный цикл с 16-битным счётчиком на все случаи жизни...
Но только компиляторы тоже давно грамотные.
Код
#include <stdint.h>
#include <string.h>

uint8_t a1[32], a2[32];

void foo() { memcpy(a1, a2, 4); }

void moo() { memcpy(a1, a2, 32); }

Код
    .text
foo:
    lds r24,a2
    lds r25,(a2)+1
    lds r26,(a2)+2
    lds r27,(a2)+3
    sts a1,r24
    sts (a1)+1,r25
    sts (a1)+2,r26
    sts (a1)+3,r27
    ret

moo:
    ldi r26,lo8(a1)
    ldi r27,hi8(a1)
    ldi r30,lo8(a2)
    ldi r31,hi8(a2)
    ldi r24,lo8(32)
.L2:
    ld r0,Z+
    st X+,r0
    subi r24,lo8(-(-1))
    brne .L2
    ret


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mdmitry
сообщение Nov 22 2010, 09:40
Сообщение #14


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



Цитата(sigmaN @ Nov 21 2010, 07:11) *
Очень интересно однако...

Уважаемый ReAl показал пример. Многое зависит от режима оптимизации компилятора. Как-то получилось быстрее сделать 8 присваиваний, чем цикл или memcpy.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:23
Рейтинг@Mail.ru


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