blindman, http://www.visualdata.ru/blog/109-segv-signal.html
а с кэтчами согласен, погорячился.
roboforum.ruТехнический форум по робототехнике. |
|
|
QString cmd;
cmd.append('s').append(0x05).append(0x4A).append('p');
QByteArray cmd;
cmd = serialPort->readAll(); //сразу в стринг не могу читать, потому что значения могут быть в т.ч. и нулевые, что автоматом нуль-терминирует строку
QString cmd_str;
cmd_str.setNum(cmd.at(2)); //вот тут большая часть значений показывается ОК, но на некоторых значениях value строка принимает какое-то непонятное значение (думаю - 127 что ли...), но понять причину этого не могу. Это чаще всего происходит в начале диапазона, т.е. от 0x00 и до, скажем навскидку 0x30, и несколько раз проскакивает ближе к концу диапазона...
dccharacter писал(а):2. Я на QT как-то имхо убого формирую команду - работает, но мне не очень нравится.
- Код: Выделить всё • Развернуть
QString cmd;
cmd.append('s').append(0x05).append(0x4A).append('p');
Можно ли как-то сделать лучше/правильней/и т.д.??
QString str;
quint8 x=0x05,y=0x4A;
str.append(QString("s%1%2p").arg(x).arg(y));
qDebug()<<str;
#include <QtEndian>
ui->outputVoltageValue->setNum(qFromBigEndian<quint16>((const uchar*)fromSerialPort->constData()));
qDebug("%d", qFromBigEndian<quint16>((const uchar*)ba->constData()));
8054394: 8b 45 dc mov -0x24(%ebp),%eax
8054397: 89 04 24 mov %eax,(%esp)
805439a: e8 ff 67 00 00 call 805ab9e <_ZNK10QByteArray9constDataEv>
805439f: 89 04 24 mov %eax,(%esp)
80543a2: e8 38 c8 00 00 call 8060bdf <_Z14qFromBigEndianItET_PKh>
80543a7: 0f b7 c0 movzwl %ax,%eax
80543aa: 89 44 24 04 mov %eax,0x4(%esp)
80543ae: c7 04 24 6d 2c 08 08 movl $0x8082c6d,(%esp)
80543b5: e8 46 f2 ff ff call 8053600 <_Z6qDebugPKcz@plt>
0805ab9e <_ZNK10QByteArray9constDataEv>:
inline const char *QByteArray::data() const
{ return d->data; }
inline const char *QByteArray::constData() const
{ return d->data; }
805ab9e: 55 push %ebp
805ab9f: 89 e5 mov %esp,%ebp
805aba1: 8b 45 08 mov 0x8(%ebp),%eax
805aba4: 8b 00 mov (%eax),%eax
805aba6: 8b 40 0c mov 0xc(%eax),%eax
805aba9: 5d pop %ebp
805abaa: c3 ret
805abab: 90 nop
08060bdf <_Z14qFromBigEndianItET_PKh>:
| src[0] * quint32(0x01000000);
}
template<>
inline quint16 qFromBigEndian<quint16>(const uchar *src)
{
8060bdf: 55 push %ebp
8060be0: 89 e5 mov %esp,%ebp
return quint16( 0
| src[1]
8060be2: 8b 45 08 mov 0x8(%ebp),%eax
8060be5: 83 c0 01 add $0x1,%eax
8060be8: 0f b6 00 movzbl (%eax),%eax
| src[0] * quint16(0x0100));
8060beb: 0f b6 d0 movzbl %al,%edx
8060bee: 8b 45 08 mov 0x8(%ebp),%eax
8060bf1: 0f b6 00 movzbl (%eax),%eax
8060bf4: 0f b6 c0 movzbl %al,%eax
8060bf7: c1 e0 08 shl $0x8,%eax
8060bfa: 09 d0 or %edx,%eax
}
8060bfc: 5d pop %ebp
8060bfd: c3 ret
AddDialog dialog(this);
if (dialog.exec()) {
QString name = dialog.nameEdit->text();
QString email = dialog.emailEdit->text();
if (!name.isEmpty() && !email.isEmpty()) {
QListWidgetItem *item = new QListWidgetItem(name, ui.addressList);
item->setData(Qt::UserRole, email);
ui.addressList->setCurrentItem(item);
}
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Dialog *settingsDialog;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
settingsDialog = new Dialog(this);
}
я уже всю бошку об стол разбил - не пойму как это сделано.
Вернуться в Компьютеры в роботостроении
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3