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

 
 
> опять 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
Ответов
rezident
сообщение Feb 10 2007, 17:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Если нужно просто проинициализировать структуру, то почему бы это не сделать на этапе ее объявления? Естественно компилятор выбрасывает ее из кода, "наблюдая" что структура лишь только инициализируется какими-то значениями, но ни один элемент ее в данном модуле не используется. Я, например, тоже не вижу смысла extern-ить структуру только для того, чтобы ее проинициализировать. Вижу два выхода из этой ситуации:
- либо инициализируйте структуру при ее объявлении;
- либо инициализируйте ее в том модуле, в котором она реально используется.

Приведение типов естественно нужно делать в соответствии с прототипом функции.
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
- - ПАВ   Прошу прощения за некорректную постановку вопроса....   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 11 2007, 22:41
|- - singlskv   Цитата(ПАВ @ Feb 11 2007, 22:41) ЦитатаДы...   Feb 12 2007, 00:13
- - ПАВ   ЦитатаЕсли Вам нужен действительно быстрый код, то...   Feb 14 2007, 22:29


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

 


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


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