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

 
 
> опять volatile
ПАВ
сообщение Feb 9 2007, 22:46
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721



файл xxx.h
typedef struct {
unsigned char Isto;
...
} TDataLbk;
Прошу помочь. Пишется прога, состоящая из нескольких модулей.

файл xxx.c
#include "xxx.h"
volatile TDataLbk DataLbk;
Именно здесь проводится заполнение этой структуры. volatile в xxx.c необходим для корректного проведения оптимизации, без неё компилятор выбрасывает DataLbk из конечного кода в файле main.c

файл main.c
#include <string.h>
#include "xxx.h"
extern volatile TDataLbk DataLbk;
DataLbk.Isto = 0x00; //без volatile компилятор выбрасывает эти действия
memmove(&Obmen[chanl].Out.Data[4], &DataLbk, sizeof(TDataLbk));
На этой строке компилятор выдает ошибку:
Error[Pe167]: argument of type "TDataLbk volatile *" is incompatible with parameter of type "void const *"

Вопросов два:
1. Как бороться с этой ошибкой.
2. какая из фу-ий memmov() или memcpy() быстрее в данной ситуации?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ПАВ
сообщение Feb 11 2007, 22:41
Сообщение #2





Группа: Новичок
Сообщений: 11
Регистрация: 3-05-06
Пользователь №: 16 721



Цитата
Дык вы до сих пор не попробовали? Попробуйте так
memcpy(&Obmen[chanl].Out.Data[4], (const TDataLbk *)&DataLbk, sizeof(TDataLbk));

Пробовал, но записывал неверно. Воспользовался Вашим (rezident) советом помогло.
Всем огромное спасибо за оперативное участие!
Тема раскрыта, просьба закрыть!
Go to the top of the page
 
+Quote Post
singlskv
сообщение Feb 12 2007, 00:13
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(ПАВ @ Feb 11 2007, 22:41) *
Цитата
Дык вы до сих пор не попробовали? Попробуйте так
memcpy(&Obmen[chanl].Out.Data[4], (const TDataLbk *)&DataLbk, sizeof(TDataLbk));

Тема раскрыта, просьба закрыть!

Не, ну вот так всегда, на самом интересном месте smile.gif

Вот я например так и не понял как это так, компилятор у Вас скушивал
некоторые выражения/переменные которые дальше еще где-то используются.
код покажите ?

По поводу memcopy...итд
Если Вам нужен действительно быстрый код, то тогда надо писать "ручками"
типа так:
unsigned char i=sizeof(TDataLbk);
unsigned char *pS=(unsigned char *)&DataLbk;
unsigned char *pD=(unsigned char *)&Obmen[chanl].Out.Data[4];
do {
*pS++=*pD++;
} while (--i);

это будет не медленнее чем библиотечные memcpy
единственно, если копирование нужно выполнять много раз в программе,
то флешь будет расходоваться не очень эфективно...

P.S. Кстати, можно сделать копирование еще быстрее, но
это тема не этого топика ...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ПАВ   опять volatile   Feb 9 2007, 22:46
- - rezident   Я не большой спец, но с IAR немного работал. За...   Feb 10 2007, 01:42
- - ПАВ   Естественно здесь приведен не весь код, а лишь упр...   Feb 10 2007, 10:38
|- - zltigo   Цитата(ПАВ @ Feb 10 2007, 09:38) Насчет ф...   Feb 10 2007, 13:47
- - rezident   Если нужно просто проинициализировать структуру, т...   Feb 10 2007, 17:56
- - ПАВ   Прошу прощения за некорректную постановку вопроса....   Feb 11 2007, 00:15
|- - rezident   Цитата(ПАВ @ Feb 11 2007, 02:15) Вопрос: ...   Feb 11 2007, 01:00
|- - Сергей Борщ   Цитата(ПАВ @ Feb 10 2007, 23:15) То же са...   Feb 11 2007, 01:12
- - ПАВ   ЦитатаПо поводу ошибки. Если внимательно рассмотре...   Feb 11 2007, 10:23
- - Oldring   Цитата(ПАВ @ Feb 9 2007, 22:46) DataLbk.I...   Feb 11 2007, 11:59
- - ПАВ   Цитата(ПАВ @ Feb 9 2007, 22:46) DataLbk.Isto = 0...   Feb 11 2007, 18:30
|- - rezident   Цитата(ПАВ @ Feb 11 2007, 20:30) ЦитатаНе...   Feb 11 2007, 21:06
- - ПАВ   ЦитатаЕсли Вам нужен действительно быстрый код, то...   Feb 14 2007, 22:29


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

 


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


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