单片机中的data,bdata,idata等用法

51单片机中的data, bdata, idata, xdata,code等内存区域的范围如下:

上表可以看出bdata的描述是:

片内RAM 位寻址区

只有这个区域的变量可以使用X^N的方式进行位寻址。
因此一个u8类型就可以作为8个bit的状态量供8条逻辑使用,节约内存开支。

Qt获取IP地址,子网掩码,网关地址

Qt获取操作系统网络信息挺尴尬的,使用自带的QNetworkInterface不光层级众多,而且很难获取Gateway网关,网上有使用第三方库IPHlpApi获取网关的方法,无疑又会增加复杂度。
这里简单的使用cmd命令+正则匹配来获取,利用Windows提供的ipconfig或者Linux提供的ifconfig等命令迅速获取相关信息:

QString Utils::GetIP(){
    QString ip = "";
    QProcess cmd_pro ;
    QString cmd_str = QString("ipconfig");
    cmd_pro.start("cmd.exe", QStringList() << "/c" << cmd_str);
    cmd_pro.waitForStarted();
    cmd_pro.waitForFinished();
    QString result = cmd_pro.readAll();
    QString pattern("[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}");
    QRegExp rx(pattern);

    int pos = 0, count = 0;
    while((pos = rx.indexIn(result, pos)) != -1){
        ip += rx.cap(0) + ",";
        count++;
        if(count == 3)
            break;
        pos += rx.matchedLength();
    }
    return ip;
}

Qt5中读写配置文件

Qt中可以使用QSettings来进行简单的.ini配置文件的读写。

/* 初始化ini配置文件 */
QSettings configFile = new QSettings(QString("%1/app/app.ini").arg(QApplication::applicationDirPath()) ,QSettings::IniFormat);
configFile.setIniCodec(QTextCodec::codecForName("UTF-8"));

/* write */
configFile.beginGroup("PMC");

configFile.setValue("spindleKnifeNum", "BD0");
configFile.setValue("boxKnifeNum", "BR722");
configFile.endGroup();

/* read */
configFile.value("PMC/spindleKnifeNum",tr("")).toString();

要注意,以上代码,在第一阶段初始化配置文件过后,所有配置项已经在内存中了,下面的读取功能并不是实时计算的,实际上实时读取也是一件低效率的事情。

丁丁生于 1987.07.01 ,30岁,英文ID:newflydd

  • 现居住地 江苏 ● 泰州 ● 姜堰
  • 创建了 Jblog 开源博客系统
  • 坚持十余年的 独立博客 作者
  • 大学本科毕业后就职于 中国电信江苏泰州分公司,前两年从事Oracle数据库DBA工作,两年后公司精简技术人员,被安排到农村担任支局长(其本质是搞销售),于2016年因志向不合从国企辞职,在小城镇找了一份程序员的工作。
  • Git OSChina 上积极参与开源社区