crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику Iron Bug ::: Спасибо сказали: 211 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
17.11.2017, 23:30 [РЕШЕНО]CRC16 для Modbus
алгоритм верный. я даже проверила по-быстрому. всё правильно он считает. может, ты ему данные как-то неправильно скармливаешь?

#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <memory.h>

uint16_t crc(uint8_t *data, uint8_t size)
{
        uint16_t pos;
        uint8_t i;
        uint16_t crc = 0xFFFF;

        for (pos = 0; pos < size; pos++)
        {
                crc ^= (uint16_t)data[pos];          // XOR byte into least sig. byte of crc

                for (uint8_t i = 8; i != 0; i--)
                {    // Loop over each bit
                        if ((crc & 0x0001) != 0)
                        {      // If the LSB is set
                                crc >>= 1;                    // Shift right and XOR 0xA001
                                crc ^= 0xA001;
                        }
                else                            // Else LSB is not set
                        crc >>= 1;                    // Just shift right
                }
        }
        // Note, this number has low and high bytes swapped, so use it accordingly (or swap bytes)
        return crc;
}

void convert(const char *src, uint8_t **dst, size_t *dst_size)
{
        size_t i;
        *dst_size = strlen(src)/2;
        *dst = (uint8_t*)malloc(*dst_size);

        for(i=0; i<*dst_size; i++) {
                sscanf(src+i*2, "%02x", *dst+i);
        }
}

void print_crc(const char *data)
{
        uint8_t *value;
        size_t size;
        size_t i;
        uint16_t val_crc;

        convert(data,&value,&size);

        for(i=0; i<size; i++)
                printf("%02X",value[i]);
        printf("\n");

        val_crc = crc(value,size);
        printf("0x%04X\n",val_crc);

        free(value);
}

int main()
{
        print_crc("01040040000a");
        print_crc("0104143a11e6ee3b16c44d39e24257381730ba3d862437");
        return 0;
}
larry,
6.6.2017, 2:38 Объявления о работе форума
Сегодня маленько подхимичила настройки. Теперь должно тормозить меньше.
Если обнаруживаете какие-то изменения (особенно негативные) в работе форума - сообщайте.
ViGOur, Алексей1153,
6.5.2017, 4:40 Подходящий runtime для GCC 6.1.0
LD_LIBRARY_PATH=/usr/local/lib64/:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

возможны и другие места для поиска библиотек.
но то, что у тебя происходит - это ненормально. это криво настроенная система и без рутовых прав ты это не исправишь.
AD,
11.1.2016, 14:22 Array
Цитата(AD @ 11.1.2016, 13:15) *
Я тоже не пользуюсь auto и прочими прелестями нового стандарта, но тут к ужасу узнал, что на подходе новый стандарт. Думаю, при появлении свободного времени поизучать новый стандарт.

да чота в последние годы новые стандарты плодятся, как грибы после дождя! я успешно освоила С++11 и поизучала С++14, а сейчас уже новые грядут.
я последние года два в основном чистым С занимаюсь, ощущаю, что отстаю от прогресса и надо сесть и почитать про последние новости стандартизации, для общего развития.
кстати, про чистый С. вчера на ЛОРе увидела ссылку на неплохую обзорную статью по С99 и С11. там ничего такого особенного, но сжато и понятно написано. возможно, для кого-то это будет полезно:
https://matt.sh/howto-c
AD, lanz,
28.10.2015, 16:09 Кириллица в Qt 5.5
Это багофича новой Qt. Решение см. здесь: http://www.forum.crossplatform.ru/index.php?showtopic=10548
iCast,
6.10.2015, 8:41 Умные указатели через сигналы.
обычный shared_ptr подойдёт.
вопрос не относится к Qt, переношу его в вопросы по С++.
call_me_Frank,
28.8.2015, 10:36 Что я не так делаю с указателями?
Цитата(Shaitan @ 27.8.2015, 18:48) *
Спасибо за ошибку.

да не за что. это твоя ошибка, ты её сам сделал ;)

код надо писать внимательно. если опыта нет, то тем более не нужно торопиться.

например, ты уверен, что это условие написано правильно?
if((_strList[i] != "=")||(_strList[i] != ".")||(_strList[i] != ",")||(_strList[i] != ":"))
Shaitan,
27.8.2015, 15:32 Что я не так делаю с указателями?
Цитата(Shaitan @ 27.8.2015, 15:03) *
Насчёт
delete &rVar; Это я пытаюсь очистить память от указателей. Согласен нужно это сделать иначе.

это выражение просто вообще смысла не имеет, причём в любом контексте. и оно всегда будет вызывать сбой в памяти.

Цитата(Shaitan @ 27.8.2015, 15:03) *
Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";"

нет. до конца это списка это никогда не дойдёт, потому что условие leght >= i его выкинет ровно посередине.
простая система уравнений
Цитата
leght = _strList.length() - i;
leght = i;

даёт
Цитата
i = _strList.length()/2;

так что с логикой тут серьёзные проблемы.
Shaitan,
27.8.2015, 11:01 Что я не так делаю с указателями?
ну, при беглом просмотре кода, сразу же в первом блоке:
   delete &rVar;

зачем тут адрес? подумай, что ты удаляешь.

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

потом, вот это условие тоже какое-то малопонятное:
leght = _strList.length() - i;
        while(leght >= i ...


не исключено, что там ещё есть ошибки логические.
в общем, внимательнее надо код писать.
Shaitan,
7.7.2015, 10:10 QSerialPort
чем длиннее провод - тем ниже должна быть скорость передачи.
и на проводе должны быть терминаторы. если их нет, то скорее всего в сигнале будут отражённые паразитные данные.
да, если в непосредственной близости присутствуют двигатели, трансформаторы или любые девайсы с мощными токами в обмотках, то возможны помехи на линии и данные также могут искажаться.
в целом от подобных вещей спасает только вычисление CRC на каждый пакет и нумерация пакетов плюс система перезапроса пакета, в случае его потери или испорченных данных.
leonneon_89,
21.6.2015, 9:05 Регулярные выражения
у тебя регулярное выражение правильное, а метод неправильный. Split разделяет выражение по указанному разделителю. соответственно, сам разделитель вырезается. я не спец в Qt, но гугл с первого захода выдал некий метод search:
http://stackoverflow.com/questions/1837469...using-qt-regexp
larry,
15.5.2015, 10:42 firebird, insert возвращает ошибку -1, строку вставляет
insert вернул true. в этом случае незачем читать что-то из lastError, там может быть что угодно.
gvenihvivar,
27.4.2015, 8:47 Phonon: не понятная ошибка
у тебя линковщик библиотеку не нашёл. её там действительно нет.
fredwriter,
3.4.2015, 9:26 WindowTitle, разделенная на 2 части
зачем обязательно делать это в заголовке? сделайте лейблы с надписями ниже, в самом окне, хоть десять штук.
Zaca,
25.3.2015, 12:03 Файловый ввод-вывод
убери ios::app и добавь ios::trunc.
почитай в документации про флаги: http://www.cplusplus.com/doc/tutorial/files/
dmitryrocks,
27.2.2015, 23:54 Кросс - компиляция
по-моему, в данном случае проще всего поставить линюксовую виртуалку и в ней собрать всё. с кросскомпиляцией даже у опытных программистов бывают проблемы, а уж с кросскомпиляцией библиотек типа Qt лучше вообще не связываться. быстрее и проще собрать на виртуалке.
wiz29,
26.2.2015, 11:21 подклассы Singlton
в случае, если перекрёстные ссылки всё-таки есть (это должны быть именно ссылки, а не объекты класса), то стандартное решение состоит в использовании предварительной декларации класса:
class ClassB;  // предварительная декларация класса ClassB

class ClassA {
     ClassB *ptrB;
};

class ClassB {
    ClassA *ptrA;
    ClassA A;  // после полного определения класса мы можем использовать не только указатели, но и объекты класса
};
call_me_Frank,
25.2.2015, 19:02 подклассы Singlton
насчёт решения с классами - какое-то оно странное. честно говоря, непонятно, как это будет использоваться. подумай ещё. это полезно. и обязательно попробуй использовать свои классы, без этого ты не поймёшь потенциальных минусов своего решения.

Цитата(call_me_Frank @ 25.2.2015, 19:26) *
и появился вопрос: как развязать классы по отдельным h-файлам? получается зацикленное включение хедеров

это стандартное решение в С/C++. каждый хэдер всегда заключён в блок препроцессорных определений:
#ifndef SOME_HEADER_NAME
#define SOME_HEADER_NAME
....
<код>
....
#endif

и ещё: лучше не использовать имена переменных, начинающиеся с двух подчёркиваний ( __ ) - часто это зарезервированные имена служебных переменных и функций и можно случайно напороться на конфликт с определениями в стандартных библиотеках.
call_me_Frank,
19.2.2015, 8:48 Подключение библиотеки crashrpt к Qt5.4.0(VS 2010)
Цитата(Trisch @ 18.2.2015, 15:42) *
Проверил при помощи depends файлы .h и .lib

Выдало такую ошибку:
Error: At least one file was not a 32-bit or 64-bit Windows module.

да, она не жрёт lib-файлы. только dll-ки. попробуй так:
Цитата
dumpbin.exe -headers foo.lib

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

я подозреваю, что у тебя каким-то образом получилась несовместимость юникода и не-юникода. одна часть собралась с юникодом, а другая - без него.
Trisch,
14.1.2015, 13:20 python std::shared_ptr clang++
Цитата(alexy @ 14.1.2015, 0:56) *
gcc не осилил скомпилить приведеннй код с этим примером

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

я не отслеживала самые последние изменения, но, по крайней мере, до версии 1.55.0 C++11 в бусте не использовался явно. главным образом потому, что буст сам по себе прототип стандартизации С++ и когда что-то становится стандартом, то буст пересматривается. а ещё потому, что С++11 с полным набором всех фич до сих пор не существует в некоторых компиляторах, которые буст поддерживает.

в последних версиях GCC (начиная с 4.7) для С++11 есть опция -std=c++11 (или -std=c++0x, начиная с GCC 4.3, но в старых версиях может быть далеко не полная поддержка фич C++11).
AD,
20.12.2014, 15:43 Ищу библиотеку обработки звука
использовать API для jackd. всё стандартно, как работа с любой другой библиотекой.
mezmay,
21.11.2014, 17:03 диагностика проблемы при вылете программы
6.1.7601 - это венда семёрка. а она умеет делать дамп. пока это окно висит (не закрывать его!) - зайти в менеджер задач (или как он там называется), выбрать упавшую программу, нажать правую кнопку мыши и выбрать "сохранить дамп". только тщательно запомнить путь, куда система его сохранит (он нетривиальный, она его покажет один раз, лучше его сразу скопировать, а то потом фиг найдёшь файл). и потом этот файл в студии можно открыть и увидеть весь стек и состояние программы в момент падения.
borune, lanz,
28.10.2014, 15:59 Неопределенные классы в динамической библиотеке
смотря что там в иерархии. всё, где шаблоны, которые как-либо прямо или косвенно используются в вызовах юзера - да.
то есть, шаблон лишь определяет, как генерить класс. а компилятор генерит его, по собранным в коде вызовам. если есть использование шаблона с классом А - будет просто сгенерён класс, который есть результат применения шаблона к этому классу. и так для всех сочетаний.

вообще говоря, вопрос сигнатуры решается просто: передачей указателя. а уж на что он там указывает - это можно описывать в документации к библиотеке алгоритмов, например.
Count0,
28.10.2014, 15:25 Неопределенные классы в динамической библиотеке
ответ: нет.
шаблоны используются только на этапе компиляции.
впрочем, если подождать лет так пять.... в последних дискуссиях по стандарту С++14 вроде как обсуждалось динамическое использование шаблонов ;)
Count0,
7.10.2014, 21:20 Получить stack trace удаленно
заюзай Google Breakpad. хорошая штука. её использует Мозилла и многие другие крупные компании. мы её на работе тоже пользуем на серверах.

кроме того, под вендой есть ещё отладка через дамп. не знаю, как в Win8, а в 7-ке была у них фича - сохранение дампа, из системного монитора, по правой кнопке на процессе, когда он уже выдал сообщение о падении, но ещё не был убит системой. дамп сохраняется в какую-то задницу, так что лучше сразу в сообщении после сохранения прочитать, куда система его сохранила, и записать этот путь. потом дамп можно загрузить в студию и с ним работать.
lanz,

8 страниц V   1 2 3 > » 
RSS Текстовая версия Сейчас: 22.11.2017, 14:29