《智能家居》培训第二天------2019-01-06

目录:

  一)write和read函数

  二)lseek:文件光标重置函数

  三)在linux上编译程序

  四)使用SecureCRT连接开发板

  五)SecureCRT上进行开发板操作

  六)主界面制作过程

  七)所想

  八)总结

 

一)write和read函数

  1)所在头文件:#include<unistd.h>

  2)原型:

  ①ssize_t write(int fd, const void *buf, size_t count);

  ②ssize_t read(int fd, void *buf, size_t count);

  3)参数解释

  ①int fd:open函数的返回值,比如语句“fd=open("filename",O_WRONLY)”

  ②void*buf:要从文件写入write\读出read的数据,void*是通用类型,可以接受任何类型的数据,接受的参数为地址(比如放一个数组名,因为数组名代表这个数组的首地址)

  ③size_t count:size_t是typedef定义的一个类型,单位为字节,字节啊,就是读取的时候是一个一个字节读的,是一个一个字节,是字节哦!

  4)作用通俗解释

  write:buf中的前count位数据写入文件fd

  read:fd文件的前count位数据写入到buf

  5)read函数当fd文件中没有数据时就会截断,意思就是在read函数往后的程序不再执行

 

二)lseek:文件光标重置函数

  1)为何要学习这个函数

  我们希望把一张图片显示到开发板屏幕上,那么就需要读取图片每个像素点的信息,然而对于一张图片,其前54B不是像素信息,而是图片本身的信息,比如图片大小之类的信息,不是像素信息,这些是我们不需要的,我们要的是像素点的信息,所以读取的时候不需要读取图片前54个字节的数据

  这里我们采用文件光标重置的方法,使得文件读取时从某一固定位置开始读取,因此需要使用到lseek函数

  2)所在头文件:#include<sys/types.h>#include<unistd.h>

  3)函数原型:off_t lseek(int fd, off_t offset, int whence);

  4)参数解释

  ①fd和write那些一样都是open文件时的返回值

  ②offset:光标偏移量

  ③whence:以何种方法进行偏移

   SEEK_SET---以文件开头为起始点,设置offset字节的偏移量

   SEEK_CUR---以当前文件光标为起始点,往后设置offset字节的偏移量

   SEEK_END---以文件末尾为起始点,设置offset字节的偏移量

  5)例子

  lseek(fd,54,SEEK_SET);

  以文件fd开头为起点,进行54个字节的偏移,也就是把读取起始位置向后移动54个字节

 


三)在linux上编译程序

  1)上一篇文章中的方法是:gcc filename.c -o filename,但其实这是不行的,这样编译产生的文件是Intel处理器的,而我们的开发板的是ARM处理器,所以这样产生的文件是没办法在这个开发板上执行的

  2)正确方法:arm-linux-gcc filename.c -o filename 这样产生的就是ARM处理器的文件,演示如下:

四)使用SecureCRT连接开发板

  开发板用usb接上电脑,打开SecureCRT,根据以下进行操作,然后点击连接就行啦

  端口选择:插入usb后,右键桌面的“我的电脑”→属性→设备管理器→在设备管理器这里查看插入的是哪个com口

五)SecureCRT上进行开发板操作

  1)一些命令(和linux一样的我觉得是):

  ①mkdir filename------创建一个新文件夹filename

  ②cd filename------切换到filename目录

  ③rm filename------移除文件filename

  ④rx filename------上传文件某个文件,将该文件命名为filename,如下图:

  ⑤chmod 777 filename------修改filename文件的权限(一般上传以后,需要修改该文件的权限才可以执行)

  ⑥./ filename------执行filename文件

  第④~⑥点是主要的把文件传入开发板的操作,rx先上传文件到开发板→chmod修改该文件的权限→./执行该文件使开发板作出相应反应

六)主界面制作过程  

  1)任务:把一张图片(主界面图)在开发板显示屏上显示

  2)实现思路步骤如下图:

  3)关键是字节转换和图片屏幕坐标转换,总之整个过程搞了很久,下午吃完饭6点不到一直搞到晚上9点多,最后其实是可以了,是因为开发板接口有问题,导致上传的图片信息出现错误,字节转换写错了,虽然也是使用位运算写的,但是我那个方案不对,得到的图片有问题,背景色不知道为啥变了,不过图片坐标转换屏幕坐标就写对了,也就是说辛苦了一晚上,除了字节转换其他都写出来了哈哈哈,还是蛮开心的!

  4)图片坐标与屏幕坐标

  ①图片坐标是以左下角为原点,屏幕坐标是以左上角为原点,所以要进行坐标转换,也就是信息转换

  ②以左上角为原点的坐标,y轴往下是正值,不是负值

  ③后来听老师讲了个投机取巧的方法:不需要进行转换,只需要把原来的图片垂直旋转然后直接导入到屏幕就行了!这样一来就不用敲代码转换了,图片是反的屏幕显示出来的就是正的!这都行!真是太聪明了吧!

  5)小问题:必须把要的那个图片(图片使用bmp格式)上传到开发板上,不然无法open图片,就无法显示到屏幕上

  6)以下是制作过程,可以看到在慢慢变好!最后两张是通过U盘来传文件的,因为开发板接口有问题通过传输线传输的话图片信息会丢失

七)所想

   最开心的莫过于最后发现自己晚上的辛苦没有白费,至少都写出来了,除了字节转换,但是方法都是位运算,我觉得再给点时间我也可以想出来的!

  那个狮子与小女孩的界面是我中午的时候做的,感觉还挺好看的哈哈哈

  嗯第二天学的东西大概就这么多,主要任务就是写好自己的主界面,已经成功嘻嘻,噢对了,还有个小任务,写个彩虹屏幕,emmm我大概写了一下应该就是这样把?

八)总结

  1)总结一下从写代码到传入开发板的整个流程

  ①在windows上写好自己的.c程序(不要在CodeBlocks上写,不然写好的c文件没法在linux上编译,不知道为啥,在notepad++上写就行)

  ②在linux上编译写好的.c程序

  ③将编译产生的文件通过SecureCRT传入到开发板上

  2)总结下把图片在屏幕上显示的实现逻辑

  ①打开开发板上的屏幕文件和图片文件(屏幕文件在“dev/fb0/”,图片文件必须必须先上传到开发板,不然无法打开)

  ②偏移掉图片的文件信息(lseek)

  ③读取图片数据,存放到一个数组里(read

  ④通过位操作把3字节数据转换为4字节数据(在第三天培训的博客中有代码示例)

  ⑤图片坐标转屏幕坐标(这一步跳过吧,直接把图片垂直反转以后再上传到开发板就行

  ⑥把数据写入到屏幕文件中(write

  ⑦关闭文件(close

 

2019-01-07-20:12:55

转载于:https://www.cnblogs.com/lzemian-n/p/10235437.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值