合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(二)

目录

基于ARM语音识别的智能家居系统

练习一

一、程序编译

练习二:

二、文件IO

三、文件IO常用API接口函数

1、打开文件 open()

2、将数据内容写入文件 write()

3、关闭(保存)文件

四、编程示例

总结


基于ARM语音识别的智能家居系统

我们上一篇讲了,关于Linux系统的一些质量,今天,我们实现在Linux系统下编译程序,我们通过两个小练习来熟悉一下。

练习一

熟悉基本命令的使用:
    1、在用户桌面目录下新建一个目录文件 demo/。
    2、在该目录 demo/下新建一个普通文件 hello.c。
    3、修改文件hello.c的权限为:
        对用户可读可写可执行     rwx   7
        对同组用户可写可执行     -wx   3
        对其他用户可读          r--   4
    4、将该目录 demo/ 拷贝到根目录下。

一、程序编译

我们编写程序实现输出hello world!!,相信大家这里的程序都会写。

//#include <stdio.h>   //宏:包含导入c语言标准输入输出头文件int main()   //程序入口
{printf("hello world!!\n");   //在终端上打印 hello world!! 字符串 return 0;
}

gcc: 编译器、编译c语言的工具。编译: gcc hello.c    编译得到一个可执行文件 a.out
执行: ./可执行文件   ./a.out
gcc hello.c -o bin
-o:将可执行文件重命名为bin,方便使用,防止文件覆盖。

 我们在Linux系统中,运行gcc hello.c可以得到一个.out文件。如果程序有错,就会提示哪里有错。下面是GCC编译器的介绍: 

GCC(GNU Compiler Collection)是一款免费的开源编译器,支持多种编程语言,例如C、C++、Objective-C、Fortran、Ada等。它是许多操作系统和软件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的广泛应用和社区的庞大,它成为了业内最流行和广泛使用的编译器之一。

GCC(GNU Compiler Collection)是一款免费的开源编译器,支持多种编程语言,例如C、C++、Objective-C、Fortran、Ada等。它是许多操作系统和软件的基石,包括GNU/Linux、Mac OS X、FreeBSD等。由于GCC的广泛应用和社区的庞大,它成为了业内最流行和广泛使用的编译器之一。

 

 

练习二:

    使用    notpad++编写C程序,实现打印自己的姓名+学校+专业。在Ubuntu共享目录中,编译运行。
    拓展:打印99乘法表(循环)。

我们这里的程序都比较简单,我就直接展示代码,这里主要是来练习如何用GCC编译程序,熟悉这个过程。

#include <stdio.h> int main()  
{int i, j;for(i = 1; i<=9; i++){for(j = 1; j<=i; j++){printf("%dx%d=%d ", i, j, i*j);}printf("\n");}return 0;
}

如果你得到的结果和我一模一样,就说明,你已经掌握了这个方法,接下来,我们介绍文件。

二、文件IO

什么是文件?文件就是存放数据的集合。比如:.txt文件 .bmp文件   .jpg文件、、、、Unix/Linux对数据文件(*.mp3、*.bmp),程序文件(*.c、*.h、*.o),设备文件(LCD、触摸屏、鼠标),网络文件( socket ) 等的管理都抽象为文件,使用统一的方式方法管理。

在Linux系统中,一切皆是文件!!!

控制一个LCD屏幕设备----》控制LCD设备对应的设备文件---》文件IO

三、文件IO常用API接口函数

打开文件----》对文件进行读/写操作-----》关闭(保存)文件

1、打开文件 open()

头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>函数原型:int open(const char *pathname, int flags);
参数列表:const char *pathname:需要打开的文件路径的字符串  "./1.txt"int flags: 打开文件的方式O_RDONLY 以只读方式打开文件O_WRONLY 以只写方式打开文件O_RDWR   以可读写方式打开文件
返回值:失败: -1,错误码errno被设置。成功:返回一个新的文件描述符(文件的唯一标识符,遥控器)我们就可以通过这个文件描述符操纵这个文件。

2、将数据内容写入文件 write()

头文件:#include <unistd.h>函数原型:ssize_t write(int fd, const void *buf, size_t count);
从buf写入数据的内存缓冲区中  取count个字节数据  写入fd指代的文件中
参数列表:int fd:需要写入数据的目标文件的文件描述符,就是open函数的返回值。const void *buf:临时存放待写入的数据的内存缓冲区size_t count:写入的数据字节大小返回值:失败: -1,错误码errno被设置。成功:返回实际写入的字节个数。

3、关闭(保存)文件

头文件:#include <unistd.h>
函数原型:int close(int fd);
参数列表:int fd: 需要关闭的目标文件的文件描述符。
返回值:成功:返回0;失败:返回-1,错误码errno被设置。

四、编程示例

#include <stdio.h> 
#include <sys/types.h>  //open()
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>    //write()int main()  
{//1、打开文件 1.txtint fd = open("./1.txt", O_RDWR);if(fd == -1){//printf("open file failed!");perror("open file failed!");  //通过错误码打印错误信息return -1;   //程序非正常结束}//2、向文件中写入数据char buf[50] = "好好学习,天天向上!";int w_size = write(fd, buf, 50);printf("返回实际写入的字节个数: %d\n", w_size);//3、保存退出close(fd);return 0;
}
  • //1、打开文件 1.txt:这是打开文件的部分。它尝试打开当前目录下的"1.txt"文件,如果文件不存在,则返回-1。
  • //通过错误码打印错误信息:这是错误处理的代码。如果在打开文件过程中发生错误,它会打印错误信息并返回-1。
  • //2、向文件中写入数据:这是向文件写入数据的部分。它创建一个字符数组buf,并写入"好好学习,天天向上!"这句话。然后使用write()函数将buf的内容写入到文件中。
  • //返回实际写入的字节个数: %d:这是打印实际写入文件字节数的部分。
  • //3、保存退出:这是关闭文件的部分。在写入数据后,使用close()函数关闭文件。

我们这里实现了打开文件,写入文件的,最后关闭文件,今天的程序难度不大,主要还是熟悉操作。

总结

今天,我们主要熟悉了用GCC来编译程序和对文件的相关操作。下一篇,我们来介绍在led屏幕上显示图片。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/143825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比

分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比 目录 分类预测 | Matlab实现QPSO-SVM、PSO-SVM、SVM多特征分类预测对比分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现QPSO-SVM、PSO-SVM、SVM分类预测对比&#xff0c;运行环境Matlab2018b…

uniapp生成自定义(分享)图片并保存到相册

需求描述 在一个页面中底部有个保存图片的功能&#xff0c;点击能够保存一张生成的自定义表格图片。 第一眼见到这个需求 自己会出现了两个问题 如何去处理图片中的自定义内容以及样式如何将自定义内容转化成图片 至于保存图片&#xff0c;uniapp有对应的api去实现uni.saveIma…

小样本目标检测(Few-Shot Object Detection)综述

背景 前言:我的未来研究方向就是这个,所以会更新一系列的文章,就关于FSOD,如果有相同研究方向的同学欢迎沟通交流,我目前研一,希望能在研一发文,目前也有一些想法,但是具体能不能实现还要在做的过程中慢慢评估和实现.写文的主要目的还是记录,避免重复劳动,我想用尽量简洁的语言…

【移远QuecPython】EC800M物联网开发板的MQTT协议腾讯云数据上报

【移远QuecPython】EC800M物联网开发板的MQTT协议腾讯云数据上报 文章目录 导入库初始化设置MQTT注册回调订阅发布功能开启服务发送消息函数打包调用测试效果附录&#xff1a;列表的赋值类型和py打包列表赋值BUG复现代码改进优化总结 py打包 导入库 from TenCentYun import TX…

Clickhouse学习笔记(15)—— Clickhouse备份

手动备份 参考官网&#xff1a;Backup and Restore | ClickHouse Docs 简单来说&#xff0c;就是我们可以通过ALTER TABLE ... FREEZE PARTITION ...命令为表分区创建一个本地副本&#xff0c;然后这个副本硬链接到/var/lib/clickhouse/shadow/文件夹&#xff0c;因此其不会耗…

Unity性能优化分析篇

性能优化是游戏项目开发中一个重要环节。游戏帧率过低&#xff0c;手机发烫&#xff0c; 包体太大&#xff0c;低端机上跑不起来等, 这些都需要来做优化&#xff0c;不管过去&#xff0c;现在&#xff0c;未来&#xff0c;性能优化都是永恒的话题。 而性能优化首先要掌握的是性…

BIO、NIO、AIO三者的区别及其应用场景(结合生活例子,简单易懂)

再解释三者之前我们需要先了解几个概念&#xff1a; 阻塞、非阻塞&#xff1a;是相较于线程来说的&#xff0c;如果是阻塞则线程无法往下执行&#xff0c;不阻塞&#xff0c;则线程可以继续往下 执行。同步、异步&#xff1a;是相较于IO来说的&#xff0c;同步需要等待IO操作完…

Outlook邮件视图设置怎么修复

故障现象 Outlook邮箱显示不对 故障截图 故障原因 邮箱视图设置不对 解决方案 1、在Outlook上方工具栏找到视图按钮&#xff0c;以此选择视图→视图设置→列&#xff0c;打开选择的列 2、在视图→邮件预览里面&#xff0c;选择1行&#xff0c;在阅读格式选择靠右&#xff…

AI创作系统ChatGPT网站源码+支持最新GPT-Turbo模型+支持DALL-E3文生图/AI绘画源码

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

Nodejs操作缓存数据库-Redis

Hi I’m Shendi Nodejs专栏 Nodejs操作缓存数据库-Redis 在服务端开发中&#xff0c;缓存数据库也是不可或缺的&#xff0c;可以提高程序并发以及方便后续扩展&#xff0c;而目前最常用的莫过于Redis了 安装依赖 和之前的mysql一样&#xff0c;redis的依赖最常用的就是redis …

自学SLAM(8)《第四讲:相机模型与非线性优化》作业

前言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;本篇文章为初学高翔老师课的第四次作业。 文章目录 前言1.图像去畸变2.双目视差的使用3.矩阵微分4.高斯牛顿法的曲线拟合实验 1.图像去畸变 现实⽣活中的图像总存在畸变。原则上来说&#xff0c;针孔透…

51单片机应用从零开始(三)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序-CSDN博客 目录 1. 用单片机控制第一个灯亮 2. 认识单片…

leetcode:476. 数字的补数

一、题目 476. 数字的补数 - 力扣&#xff08;LeetCode&#xff09; 函数原型&#xff1a; int findComplement(int num) 二、思路 将num的每一位取出来&#xff0c;取反后&#xff0c;乘以2的位次方&#xff0c;最终所有结果相加即可得到结果。 如何取出num的每一位&#xff1…

<MySQL> 查询数据进阶操作 -- 联合查询

目录 一、什么是笛卡尔积&#xff1f; 二、什么是联合查询&#xff1f; 三、内连接 3.1 简介 3.2 语法 3.3 更多的表 3.4 操作演示 四、外连接 4.1 简介 4.2 语法 4.3 操作演示 五、自连接 5.1 简介 5.2 自连接非必要不使用 六、子查询(嵌套查询) 6.1 简介 6.…

电源电压范 围宽、功耗小、抗干扰能力强的国产芯片GS069适用于电动工具等产品中,采用SOP8的封装形式封装

GS069电动工具直流调速电路是CMOS专用集成电路&#xff0c;具有电源电压范 围宽、功耗小、抗干扰能力强等特点。通过外接电阻网络&#xff0c;改变与之相接 的VMOS 管的输出&#xff0c;达到控制电动工具转速的作用。该电路输出幅值宽&#xff0c; 频率变化小&#xff0c;占空比…

自己动手实现一个深度学习算法——六、与学习相关的技巧

文章目录 1.参数的更新1&#xff09;SGD2&#xff09;Momentum3&#xff09;AdaGrad4&#xff09;Adam5&#xff09;最优化方法的比较6&#xff09;基于MNIST数据集的更新方法的比较 2.权重的初始值1&#xff09;权重初始值不能为02&#xff09;隐藏层的激活值的分布3&#xff…

04-学成在线之系统管理服务模块之查询数据字典表中的内容,前后端联调测试

前后端联调 配置前端环境 实际开发中先由后端工程师将接口设计好并编写接口文档并交给前端工程师&#xff0c;前后端的工程师就开始并行开发 前端开发人员先自己mock数据即使用假数据进行开发,当后端代码完成后前端工程师尝试请求后端接口获取数据然后渲染到页面 第一步: 首…

计算机网络之物理层

物理层 1. 物理层的基本概念 2.物理层下面的传输媒体 传输媒体可分为两类&#xff0c;一类是导引型传输媒体&#xff0c;另一类是非导引型传输媒体。 3.传输方式 3.1 串行传输和并行传输 串行传输&#xff1a;串行传输是指数据是一个比特依次发送的&#xff0c;因此在发送端…

C/C++轻量级并发TCP服务器框架Zinx-框架开发002: 定义通道抽象类

文章目录 2 类图设计3 时序图数据输入处理&#xff1a;输出数据处理总流程 4 主要实现的功能4.1 kernel类&#xff1a;基于epoll调度所有通道4.2 通道抽象类&#xff1a;4.3 标准输入通道子类4.4 标准输出通道子类4.5 kernel和通道类的调用 5 代码设计5.1 框架头文件5.2 框架实…

wx.canvasToTempFilePath生成图片保存到相册

微信小程序保存当前画布指定区域的内容导出生成指定大小的图片&#xff0c;记录一下 api&#xff1a;wx.canvasToTempFilePath 效果&#xff1a; 代码&#xff1a;wxml <canvas style"width: {{screenWidth}}px; height: {{canvasHeight}}px;" canvas-id"my…