STM32笔记--杂项


设置堆栈: startup_stmxxxxx.s文件

; 栈
Stack_Size     EQU     0x1000;
; 堆
Heap_Size      EQU     0x800;

cm_backtrace设置: 在SystemInit使能相关故障检测

/// 使能除0故障与未对齐故障
SCB->CCR   |= (1 << 4) | ( 1 << 5); 
/// 使能 Usage Fault, Bus Fault, and MMU Fault
SCB->SHCSR |= 7 << 16;

在cmb_fault.s中重新定义中断服务函数:

HardFault_Handler    PROC
    MOV     r0, lr                  ; get lr
    MOV     r1, sp                  ; get stack pointer (current is MSP)
    BL      cm_backtrace_fault
    BL      Fault_Loop  
BusFault_Handler
    MOV     r0, lr                  ; get lr
    MOV     r1, sp                  ; get stack pointer (current is MSP)
    BL      cm_backtrace_fault
Fault_Loop
    BL      Fault_Loop              ;while(1)
    ENDP
    END

使能全局中断:

__enable_irq();

禁止全局中断

__disable_irq();

解决Keil下载过慢的问题:
https://www.armbbs.cn/forum.php?mod=viewthread&tid=96992

- 阅读全文 -

QT5开发笔记--加密与解密


MD5计算:

   #include <QCryptographicHash> 
   QFile file(filename);
   if(!file.open(QIODevice::ReadOnly))
   {
       qDebug()<<"文件打开错误";
       return;
   }
   QCryptographicHash md5_hash(QCryptographicHash::Md5);
   md5_hash.reset();        /// 复位计算
   while(!file.atEnd())
   {
       md5_hash.addData(file.readLine()); /// 添加数据
   }
   qDebug()<< md5_hash.result().toHex();

base64计算:

arr.toBase64();            ///  QByteArray
str.toUtf8().toBase64();   ///  QString

- 阅读全文 -

grep与cut命令详解


提取匹配行前后内容:

grep -5  'helloworld' text.log  /// 打印匹配行及前后各N行(相当于C)
grep -A9 'helloworld' text.log  /// 打印匹配行及之后N行(共N+1行)
grep -B9 'helloworld' text.log  /// 打印匹配行及之前N行(共N+1行)  
grep -C9 'helloworld' text.log  /// 打印匹配行及前后各N行(共2N+1行)  

grep -B5 -A2 'helloworld' text.log  /// 打印匹配行及前5行和后2行(共8行)

显示不匹配的行:

grep -v "helloworld" text.log
-n 显示行号
-r 递归子目录
-i 忽略大小写
-l 只显示文件名(用于sed等操作)

匹配多个字符串: 与|符号连接,并用双/单引号圈起来

# 显示13:31:00 ~ 13:41:59之间的数据
grep -E "13:3[1-5]:|13:4[0-1]:"
# 或者
grep -E "13:(3[1-5]|4[0-1]):"

CUT命令:

 cut -d,  -f 1-4,9,20-

-d 指定分割符,一般与 -f 一起使用
-f 指定显示字段,从1开始,逗号分隔,不指定后边的范围表示一直显示到最后一个字段

cut -b 1-10,20-30
cut -c 1-10,20-30

-b 表示以字符截取
-c 以字节截取(不清楚-b和-c的区别)

- 阅读全文 -

QT5开发笔记(27)-- 表格显示


绑定数据模型:

QStandardItemModel *item_model;
/// 准备数据模型(设置表头)
item_model = new QStandardItemModel();
item_model->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("NO.")));
item_model->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("Name")));
item_model->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("Age")));
/// 将数据模型与QTableView绑定
ui->tableView->setModel(item_model);

添加数据:

/// 行号,列号,内容(字符串)
item_model->setItem(idx, 0, new QStandardItem("1"));
item_model->setItem(idx, 1, new QStandardItem("Alex"));
item_model->setItem(idx, 2, new QStandardItem("18"));

清空格格内容:

/// 从第起始行,行数
item_model->removeRows(0,student_model->rowCount());

/// 设置表格的各列的宽度值        
ui->tableView->setColumnWidth(0,100);    
ui->tableView->setColumnWidth(1,100);    
ui->tableView->setColumnWidth(2,100);

/// 隐藏行头
ui->tableView->verticalHeader()->hide();   
/// 隐藏某一列
ui->tableView->setColumnHidden(col,bool);    
/// 设置选中时为整行选中        
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);       
/// 设置表格的单元为只读属性,即不能编辑        
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
/// 使用右键菜单
ui->tstudent_tableview->setContextMenuPolicy(Qt::CustomContextMenu);

- 阅读全文 -

Makefile笔记


$(wildcard *.c) 匹配所有扩展名为.c的文件

将扩展名为.c的文件,修改为.so

$(patsubst %.c,%.so,$(wildcard *.c))

$@ - 目标文件
$^ - 依赖文件列表
$< - 文件列表中的第1个文件


将每个c文件单独编译为同名的动态链接库:

obj := $(patsubst %.c,%.so,$(wildcard *.c))

all: ${obj}

%.so:%.c
    gcc -shared -fPIC -o $@ $^ 

clean:
    rm -rf ${obj}

将每个c文件单独编译为同名的可执行文件:

objects := $(patsubst %.c,%,$(wildcard *.c))

all: ${objects} 
    
%: %.c
    gcc -o $@ $< ${CFLAG}
    
clean:
    rm -rf ${objects}
    

- 阅读全文 -


Copyright©2024 春天花会开, All Rights Reserved. Email: webmaster@oroct.com