自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 Linux-C 文件长度的获取方法

获取文件大小这里有两种方法:方法一、范例:unsigned long get_file_size(const char *path){unsigned long filesize = -1;FILE *fp;fp = fopen(path, “r”);if(fp == NULL)return filesize;fseek(fp, 0L, SEEK_END);filesize = ftell(fp);fclose(fp);return filesize;}此种以打开文件的方法取得

2021-08-18 15:03:56 1307 1

原创 linux环境实现定时器----- itimerval实现

linux环境实现定时器----- itimerval实现分析:实现定时器,通过itimerval结构体以及函数setitimer产生的信号,系统随之使用signal信号处理函数来处理产生的定时信号。从而实现定时器。先看itimerval的结构体struct itimerval { /* Value to put into `it_value' when the timer expires. */ struct timeval it_interval; /* Time t

2021-08-10 14:13:45 535

原创 strcpy()和memcpy()的区别

  最近涉及了一个功能,先通过U盘读取JSON格式的文件列表,获取需要读取的文件名前缀。拼接所需文件名后缀后,得到读取的文件名,在读取U盘中的内容。  例如读取文件列表得到AA、BB的头,拼接上“_MENU.TXT”后,读取U盘中的文件“AA_MENU.TXT”和“BB_MENU.TXT”。  但是在实际使用过程中,死活读不出来,通过串口打印出来文件名,发现文件名是正确的。而直接输入读取的文件名是可以读出来的,通过代码拼接的文件名就不行。结束符‘\0’结束符会占用一个数组的长度,创建数组大小时需要

2021-03-08 11:26:14 379

原创 json格式在C语言中的应用

  最近要修改一款海外的多语言主机,涉及到了语言的导入功能。  主机采用的是U盘导入.txt文件的方式,文件内容则是参照json格式,存到自身的flash当中。JSON格式先了解一下Jason的格式。JSON 名称/值对名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:key : value例如 “encode”:“UTF-8” ,等价于encode = “UTF-8”JSON 值JSON 值可以是:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 f

2021-02-25 10:16:07 1037 1

转载 Linux下进程间通信方式

1.什么是共享内存?共享内存就是允许两个或多个进程共享一定的存储区。就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。因为数据不需要在客户机和服务器端之间复制,数据直接写到内存,不用若干次数据拷贝,所以这是最快的一种IPC。注:共享内存没有任何的同步与互斥机制,所以要使用信号量来实现对共享内存的存取的同步。共享内存特点和优势当中共享内存的大致原理相信我们可以看明白了,就是让两个进程地址通过页表映射到同一片物

2021-02-21 10:19:48 85

原创 Linux应用开发之延时操作

  嵌入式开发的过程中,定时器是很重要的一部分,每个任务都需要控制他的运行周期和运行时间。在介绍Linux的定时器开发之前,先简单介绍一下其他开发方式的延时。一、其他开发定时裸机开发  裸机开发的定时比较简单粗暴,一般就是各个计时变量和标志在定时器中自加或者溢出。例如:void TMR_IRQHandler(){  static INT32U timecnt;  timecnt++;  if(1 == timecnt%50)    event1_flag = 1;  if(1 ==

2021-02-04 16:51:54 315

原创 Linux应用开发之多线程

本文包括线程的基本定义和操作以及互斥锁。一、线程的定义线程包含在进程里面,一个进程可以有多个线程。做个简单的比喻:进程=火车,线程=车厢线程在进程下行进(单纯的车厢无法运行)一个进程可以包含多个线程(一辆火车可以有多个车厢)不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易)进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源)进程间不会相互影响,一个线程挂掉将导致整个进程挂掉(一列火车不会影

2021-02-04 15:17:47 126

原创 Linux应用开发之共享内存

一、概述共享内存是一种最为高效的进程间通信方式。因为进程可以直接读写内存, 不需要任何数据的拷贝。为了在多个进程间交换信息,内核专门留出了一块内存区。这段 内存区可以由需要访问的进程将其映射到自己的私有地址空间。因此,进程就可以直接读 写这一内存区而不需要进行数据的拷贝,从而大大提高了效率。当然,由于多个进程共享一段内存,因此也需要依靠某种同步机制,如互斥锁和信号量等。二、实现方法共享内存的实现分为两个步骤,第一个是创建共享内存,也就是从内存中获取一段共享内存区域。第二个是映射共享内存,也就是把创建的

2021-02-04 09:01:44 120

原创 QT导出数据到Excel的方法

一、系统库中自带的写入方法写入Excel使用QAxObject,系统自带的参数。使用方法参考:https://blog.csdn.net/cannon_qi/article/details/79972258二、通过线程的方式导出Excel导出数据量大的时候,为了不影响系统的运行,通过新建一个线程进行导出数据。/* * 线程头文件 */#include <QThread>/* Excel线程 */class excelThread: public QThread{ Q

2021-01-22 14:03:35 3370

原创 QT线程读取excel表格问题解决

报错问题:CoCreateInstance failure (尚未调用 CoInitialize。)QAxBase::setControl: requested control Excel.Application could not be instantiated解决方法:#include “Windows.h”并且在 excel = new QAxObject(“Excel.Application”);前添加CoInitializeEx(NULL, COINIT_MULTITHREADED);

2021-01-20 19:08:15 1114

原创 字符设备驱动开发

一、驱动模块的加载和卸载 Linux 驱动有两种运行方式,第一种就是将驱动编译进 Linux 内核中,这样当 Linux 内核启动的时候就会自动运行驱动程序。第二种就是将驱动编译成模块(Linux 下模块扩展名为.ko),在 Linux 内核启动以后使用“insmod”命令加载驱动模块。 在调试驱动的时候一般都选择将其编译 为模块,这样我们修改驱动以后只需要编译一下驱动代码即可,不需要编译整个 Linux 代码。而且在调试的时候只需要加载或者卸载驱动模块即可...

2021-01-12 10:22:45 88

原创 mian函数传入参数

用C语言定义main函数时,大多数人的写法都是int main(void)。其实main函数是可以向其传递参数的,int main(int argc, char** argv)或者int main(int argc, char* argv[]),其中argc 是指命令行输入参数的个数,argv存储了所有的命令行参数。例如./uarttest /dev/tty0 /mnt/ttargc将会是3 其中argv[0]是“./uarttest” argv[1]是“/dev/tty0” argv[2]是

2021-01-08 16:25:42 249

原创 Qt选择文件后获取路径并打开

qt菜鸟记录贴包含头文件:#include <QFile>#include <QFileDialog>代码://点击按钮后打开文件选择void MainWindow::on_pushButton_clicked(){ //打开文件选择控件 QString fileName; fileName = QFileDialog::getOpenFileName(this,tr("文件"),"",tr("text(*.txt)"));

2020-12-30 10:23:03 4103

原创 Linux的阻塞和非阻塞IO

这里的IO不是指单片机的GPIO引脚,指的是Input/Output;1.Linux的IO分为阻塞IO和非阻塞IO1.1 阻塞式IO当应用程序对设备驱动进行操作时,如果获取不到设备资源(设备不可用或数据未准备好),那么阻塞式IO就会将应用挂起,进入休眠态等待资源,直到获取到设备资源为止。1.2 非阻塞式IO当程序以非阻塞的方式读取设备数据时,在获取不到设备资源的情况下(设备不可用或数据未准备好),则不会进入休眠态,而是立刻向内核返回一个错误码,表示数据读取失败。应用程序会重新读取数据,循环读取直

2020-12-21 18:00:17 317

原创 mount.nfs: an incorrect mount option was specified

查看设备是否支持nfs功能:cat /proc/filesystems在开发板中挂载NFS,输入命令:mount -t nfs 169.254.184.119:/home/lee/linux/nfs/mnt/nfs结果报错:mount.nfs: an incorrect mount option was specified解决方法:mount -t nfs -o nolock,nfsvers=3,vers=3 169.254.184.119:/home/lee/linux...

2020-11-16 17:17:07 6470

原创 Ubuntu18.04自适应VMware调整桌面大小

写在前面很多朋友可能一开始在VMware中装好Ubuntu后,将VMware最大化之后,Ubuntu界面却还是一小块,好不方便。博主在网络上搜了蛮多,大部分都是需要自己调整分辨率,不仅麻烦不说,而且不容易调到合适的比例,使得画面充满。2行代码解决打开终端,先键入sudo apt-get autoremove open-vm-tools之后键入sudo apt-get install open-vm-tools-desktop都按提示操作,结束后即可实现Ubuntu画面自适应VMware的大小

2020-11-04 15:17:27 2465 5

原创 Ubuntu使用U盘的方法

插入U盘后,连接到Ubuntu中先用sudo fdisk -l ,查看U盘是否连接到系统中:可以看到U盘设备为sdb1.如果要挂载U盘的话,因为此处U盘只有一个分区,所以直接挂载/dev/sdb1即可(若移动存储设备有多个分区,可按分区挂载),终端输入:sudo mount /dev/sdb1 /mnt,这里将U盘的唯一分区挂载到/mnt目录下。挂载成功后,即可在/mnt目录下查看到U盘内的文件,可以ls/cp/mv等等操作。最后U盘使用完毕,需要用umount命令卸载,终端输入:sudo um

2020-11-02 15:12:19 14308 2

原创 全局变量被未知原因改变的解决方法

在开发的过程中总会碰到一些奇怪的问题,仿真的时候一看,发现是某个全局变量被莫名其妙改变了,导致整个函数判断都出了问题。全局变量可能会被改变的原因有以下几点:1.自己改的(废话~):好好查看这个变量被谁调用了2.全局变量字节未对齐:有一次调试的时候发现一个变量定义成局部变量就能正常运行,而定义成全局变量就不能运行了。局部变量能运行说明我程序的逻辑是没问题的,找原因的时候一看是我全局变量经常会莫名其妙被改变。找了一圈发现这个变量根本没被其他函数使用。后面通过仿真,得到该变量的地址(假设为0x1002

2020-10-30 18:06:08 10313 6

原创 uCO/OS-ii 一种进程通讯总结

总结一下公司主机系统的任务通讯方式,任务的通讯方式用的是消息队列。一、创建消息队列创建消息队列的函数为OSQCreat(),其定义为:OS_EVENT *OSQCreate (void **start, INT16U size)以GSM任务和实时任务为例,创建消息队列。1、首先创建消息队列变量指针定义OS_EVENT * pRealTime_MsgQueue = 0; OS_EVENT * pGSM_MsgQueue = 0;2、给消息队列分配内存空间#define REALTIME_MSG

2020-10-15 17:01:56 174

转载 Makefile 编写入门

Makefile 编写入门Makefile编写规则:刚开始跟这些Makefile的时候发现会报错误Makefile:2: missing separator. Stop.在make命令后出现这种错误提示,是提示第2行没有分隔符。例如:target:prerequisites command (command前为空格)改为:target:prerequisites command (command前为[tab])就可以了。 在Makefile文件中,命令必须以【tab】键开始。如

2020-10-14 10:53:55 147

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除