Russian Qt Forum
Апрель 26, 2024, 00:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 26 27 [28] 29 30 ... 38
406  Программирование / С/C++ / Re: Проблемы с разыменованием : Январь 07, 2011, 11:04
О!!!  Шокированный На сколько мир стал понятней! Всем спасибо.  Улыбающийся

brankovic спасибо за совет, попробую ваш пример.

А что мешает создать массив тех же alt_u16 и далее огранизовывать с ним работу?
Ни чего не мешает. Привычка. Обычно пишу на 8-ми разрядных микроЭВМ, типа AVR или MSP430. Там ОЗУ как правило байтами исчисляется, например 256 байт. Поэтому приходится экономить на спичках. А тут NIOS II, у него 8 Мб озу. Вполне можно пожертвовать несколькими кб памяти. Тоже хорошие решение. Спасибо за совет.

Цитировать
Предупреждать надо, что дело не на x86 происходит...
Цитировать
Предупреждать надо, что муж волшебник.
Улыбающийся сори, но я и не говорил что на х86. Тем более я указал компилятор nios2-elf-gcc - уже понятно что не х86.

Цитировать
Ну и обычные массивы - тоже плохой для цпп стиль, не говоря уже о том, чтобы писать слова в байты...
На х86 для этих целей использую QByteArray. В ниосе нет Qt. Вначале в качестве ByteArray использовал std::string, но чё то какие-то глюки были с стрингом, временно решил массив сделать. Для маленьких процессоров обычно с++ это экзотика, не говоря уже о стл. Поэтому иногда стл может быть реализован с багами.  А вообще мне тоже массивы не нравятся. А что можно использовать в качестве ByteArray? Можно конечно самому класс написать, но ....
407  Программирование / С/C++ / Re: Проблемы с разыменованием : Январь 06, 2011, 22:38
Цитировать
Цитировать
p = reinterpret_cast<alt_u16*>(&bufRecive[1]);
*p = 0x7890;

данные попали в bufRecive[1] и bufRecive[2]
вся проблема в том что на этом этапе данные попали не в bufRecive[1] и bufRecive[2], а в bufRecive[0] и bufRecive[1]

Поэкспериментировал еще с прогой.... проблема не в касте, давайте без каста и без тайпдефов привиду пример

Код:
char array[10]; //в отладчике посмотрел адрес размещения массива, пусть будет 0x00801C4
short *p = (short *)array;//после этого р равен 0x00801C4
*p = 0x1234; //после этого по адресу 0x00801C4 размещается 0х34, по адресу 0x00801C5 0х12. Всё правильно
                     // т.е. array[0] = 0х34, array[1] = 0х12
//теперь сделаем указатель на нечетный адрес
p = 0x00801C5;//можно тем же reinterpretate_cast<short*>(&array[1]), у меня не было этой строчки,
                       //я сделал точку останова и руками выставил нужный адрес
*p = 0x5678;

после последней строчки я ожидаю изменение по адресам 0x00801C5 и 0x00801C6. Т.е. должно быть array[0] = 0х78, array[1] = 0х56. Но адрес 0x00801C6 (элемент array[2] ) остается без изменения а меняются 0x00801C4 и 0x00801C5, т.е. array[0] = 0х78, array[1] = 0х56. Вот в этом проблема.
Цитировать
Скорее всего процессор игнорирует младший бит для указателя на слово.
Ну вот это уже похоже на истину. Как бы это побороть?


ps
офтоп

Цитировать
Но зачем вообще понадобилось писать двухбайтовые значения с интервалом в байт?!
Такой протокол обмена, я его реализую. Пакет примерно такой: первый байт кадра - адрес, следующие два это длинна пакета, слудеющие два команда, следующий ....., следующие 4 байта параметр Х, следующие 4 байта - это температура в формате float, .... и т.д. Во многих протоколах подобное встречал. Раньше парсил подобными кодом

Код:
char array[100];
int count = f();
array[16] = count;
array[17] = count>>8;
array[18] = count>>16;
array[19] = count>>24;

но решил попробовать явным преобразованием типов (int*)(array+16) = count; , но не тут-то было.

Цитировать
А можете рассказать, какой сокральный смысл в использование reinterpretate_cast в данном случае? Чем он правильней statiс_cast'а и чем лучше олдскульного приведения?
Да сам толком не понимаю. НА си делал явные приведения, типа (int*)(bufRecive[1]). Но в с++ это типа плохой стиль. Есть касты. Сто раз перечитал про касты, запомнил тока одно - в с++ пользуй касты. А почему ... минут 10 помнил после прочтения учебников, потом просто лишняя инфа из головы пропадала. Осталось только "В с++ пользуй касты"
Почему не static_cast? А не работает статик каст с базовыми типами. Компилятор ругается на такой каст
Код:
char array[10];
int i;
i = *static_cast<int*>(array);
  Ну есть ещё статьи что reinterpretate_cast нельзя вообще использовать, а лучше использовать двойной static_cast через указатель на void, как-то static_cast<int*>(statuc_cast<void*>(array)). Но есть также обоснованные мнения, что этот способ не менее опасен, чем reinterpretate_cast.
408  Программирование / С/C++ / Проблемы с разыменованием : Январь 06, 2011, 14:19
вот код

Код:
//alt_u16 - это тип данных, беззнаковое двухбайтное, можно считать что unsigned short
char bufRecive[100];
alt_u16* p = reinterpret_cast<alt_u16*>(&bufRecive[0]);
*p = 0x1234;
p = reinterpret_cast<alt_u16*>(&bufRecive[1]);
*p = 0x7890;
p = reinterpret_cast<alt_u16*>(&bufRecive[2]);
*p = 0x4321;
p = reinterpret_cast<alt_u16*>(&bufRecive[3]);
*p = 0x0987;
p = reinterpret_cast<alt_u16*>(&bufRecive[4]);
*p = 0x6571;
p = reinterpret_cast<alt_u16*>(&bufRecive[5]);
*p = 0x4294;
p = reinterpret_cast<alt_u16*>(&bufRecive[6]);
*p = 0x5302;
p = reinterpret_cast<alt_u16*>(&bufRecive[7]);
*p = 0x0192;

шагаю дебагом по строчке. когда указатель р указывает на четный адрес, то изменяется значение по адресам р и р+1, когда р указывает на нечетный адрес, изменяется значение по адресам р-1 и р. Чё-то тут с выравниванием связанно. Как это победить? компилятор nios2-elf-gcc. Но в доках на компилятор нет ни каких ограничений по поводу разименовывания.
409  Qt / Model-View (MV) / Цветной QTreeView : Январь 03, 2011, 17:45
как в QTreeView отобразить определённые строки нужным цветом шрифта/фона?
410  Программирование / Общий / Муекс в Svn : Декабрь 09, 2010, 12:28
Несколько человек работают с базой, которая обнавляется через subversion. база - бинарный файл. свн не может её сливать как код.  Если 2 пользователя будут вносить изменеия одновременно, то будут конфликты, даже если изменения в разных частях базы. Можно договорится, и ставить на стол флажёк тому, кто может в данный момент править базу. Остальные тока update и жать флажка. Есть в subversion какие нибудь средства, типа мутекса? Чтоб если захотел поправить, ..... вобщем база на редактирование закрыта, т.к. кто-то уже её правит. Потом высвобадилась - пожалуста, update, правка, commit.
411  Разное / Говорилка / Re: Как избавиться от рекламы "Ads by Google"? : Ноябрь 27, 2010, 17:34
ага, на хамелионе сработало, только вместо рекламы пустое поле. А на мазиле 100% сработало. ни рекламы, ни пустых полей. Всем спасибо.

ps Но на соседних компах и в ИЕ нет рекламы от гугл. Наверно есть способ и в ИЕ её отключить. Ни кто не знает как?
412  Разное / Говорилка / Re: Как избавиться от рекламы "Ads by Google"? : Ноябрь 26, 2010, 11:39
Открой для себя AdBlock.
Так она ставится только на мазилу или на хамелиона. Есть что-нибудь из мазилы или хамелион, тока чтоб без установки, портабл, для проверки. Думаю проблема не в браузре.
413  Разное / Говорилка / Re: Как избавиться от рекламы "Ads by Google"? : Ноябрь 26, 2010, 10:51
Нормальный - понятие относительное. На соседнем компе стоит хром и ие. Ни в хроме ни в ие нет рекламы от гугл. У меня есть.

Проверил на своём компе в хроме и в QtWeb - теже банеры с рекламой от гугл.
414  Разное / Говорилка / Как избавиться от рекламы "Ads by Google"? : Ноябрь 26, 2010, 10:18
В теме вопрос. Достала. да еще и трафик жрёт, и место на экране. Не могу от неё избавиться

ps Win 7, IE
415  Программирование / С/C++ / Re: какие книги порекомендуете по с++ : Ноябрь 11, 2010, 18:53
Философия C++. Введение в стандартный C++: http://www.books.ru/shop/books/156970
Философия C++. Практическое программирование: http://www.books.ru/shop/books/206028
416  Qt / Qt-инструментарий / Re: Настройка make в QtCreator : Октябрь 17, 2010, 20:58
Но в папке mingw нет файла make. Там есть файл mingw32-make. А в настройках Qt в креаторе прописан путь до mingw туда, куда нужно.
417  Qt / Qt-инструментарий / Настройка make в QtCreator : Октябрь 17, 2010, 11:42
Установлен QtCreator 2.0.1 под WinXP. Через два, а то через день, работа начинается с шаманства над настройками. Вчера работал - всё было нормально, ни чего не настраивал, все настройки сделаны давно. Выключил компьютер корректно. Сегодня включаю, запускаю креатор, запускаю компеляцию - получаю ошибку сборки
Цитировать
Выполняется сборка проекта TeremQt...
Настройки не изменились, этап qmake пропускается.
Запускается "D:/PROGRA~4/Borland/CBUILD~1/Bin/make.exe" debug
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland

Fatal: 'FORCE' does not exist - don't know how to make it

Процесс "D:/PROGRA~4/Borland/CBUILD~1/Bin/make.exe" завершился с кодом %2.
Возникла ошибка при сборке проекта TeremQt (цель: Настольный компьютер)
Во время выполнения сборки на этапе "Сборка"
Почему креатор захотел использовать борландовский make? В папке Qt по прежнему присутствует нужный MinGW. Как это побороть?
418  Qt / Qt-инструментарий / Re: Как в Qt Creator указать рабочий каталог? : Октябрь 03, 2010, 15:25
Слона и не заметил. Спасибо. Проблема решена.
419  Qt / Qt-инструментарий / Как в Qt Creator указать рабочий каталог? : Октябрь 03, 2010, 13:16
Креатор 2.0.1 под Win32. запускаю собранную программу в креаторе. В консоле сообщение
Код:
Запускается D:\MyProg\trunk\debug\myProg.exe...
после старта QDir::currentPath() возвращает "D:\MyProg\trunk\". А мне нужно чтоб текущая рабочая папка была другая. Где и как это указывается в креаторе?
420  Qt / Общие вопросы / Re: Как программно переместить каталог? : Октябрь 02, 2010, 21:17
нашел в чём ошибка. папки "deleted" не существует. нужно сначала проверить существует ли она, если нет то создать. Проблема решена.
Страниц: 1 ... 26 27 [28] 29 30 ... 38

Страница сгенерирована за 0.061 секунд. Запросов: 23.