实习日记(5-13)

小记

在交叉编译时报错:

test.c: In function 'set_speed':
test.c:20:2: error: 'for' loop initial declarations are only allowed in C99 mode
test.c:20:2: note: use option -std=c99 or -std=gnu99 to compile your code

在这里插入图片描述
解决:
我在源代码中 for 循环是这样写的:

for(int i=0;i<sizeof(name_arr)/sizeof(int);i++)

在gcc编译中不会报错,但是交叉编译报错了,修改了写法

	int i;
	for(i=0;i<sizeof(name_arr)/sizeof(int);i++)

这样交叉编译就可以了

########################分割线############################

交叉编译后,需要从虚拟机中将可执行文件复制到本机下。
然后在将可执行文件复制到ARM中,不能直接从Linux中复制到ARM下。

########################分割线############################

笔记

交叉编译在使用read时报:
使用perror函数打印的(perror函数是打印上一个函数的错误原因)

Resource temporarily unavailable

在这里插入图片描述搜罗了一下
在这里插入图片描述
问题来了,阻塞和非阻塞模式是干嘛的?

阻塞是进程的一种状态,由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行.该事件发生前即使把处理机分配给该进程,也无法运行。

这里有一篇讲串口的阻塞和非阻塞模式的博客,挺好:
https://blog.csdn.net/sweetfather/article/details/84938701

整理一下:
########################分割线############################

阻塞操作

是指在执行设备操作时,若不能获得资源则挂起进程,直到满足可操作的条件后进行操作,

被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足.

非阻塞操作:

进程不能进行设备操作时并不挂起,他或者放弃,或者不停的查询,直到可以进行操作为止.

########################分割线############################

阻塞方式是文件读写操作的默认方式,但是应用程序员可通过使用O_NONBLOCK 标志来人为

的设置读写操作为非阻塞方式 .( 该标志定义在 < linux/fcntl.h > 中,在打开文件时指定 ) .

########################分割线############################

原因:可能是非阻塞模式下使用了阻塞操作;
调用open函数时,使用了非阻塞模式(O_NONBLOCK),却直接用read函数读取;
而read默认为阻塞操作,所以导致报错

解决:可将非阻塞去除,改为阻塞模式;
或者使用select函数给读取加一个超时处理;

	//初始化文件指针	这里的argv[1]是 运行./ope   /dev/ttyS0   传递的 /dev/ttyS0  打开模式加上O_NDELAY可以以非阻塞方式打开串口
	//fd = open(argv[1],O_RDWR | O_NOCTTY| O_SYNC|O_NDELAY);修改前
	fd = open(argv[1],O_RDWR | O_NOCTTY| O_SYNC);

########################分割线############################

到这read函数调用正常,下面将read到的内容输出。

		nread = read(fd, buff, 32);
		if(nread > 0 )
		{
			printf("\nLen: %d\n",nread);
			buff[nread+1] = '\0';
			for(i = 0;i<nread; i++)
			{
				printf(" 0x%02X ",buff[i]);
			}
			printf("\n");
			break;
		}

%02x与%2x 之间的区别:
输出最小宽度
用十进制整数来表示输出的最少位数。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格或0(当最小宽度数值以0开头时)。

X 表示以十六进制形式输出
02 表示不足两位,前面补0输出;如果超过两位,则实际输出
举例:
printf("%02X", 0x345); //打印出:345
printf("%02X", 0x6); //打印出:06

而如果直接写为 %2x,数据不足两位时,实际输出,即不额外补0输出; 如果超过两位,则实际输出。
printf("%2X", 0x345); //打印出:345
printf("%2X", 0x6); //打印出:6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我很高兴看到你对软件开发感兴趣,并且已经开始学习编程。根据你提供的引用内容,你目前正在实习,计划每天学习1小时左右的编程,周末学习3-4小时。这是一个很好的计划,通过持续的学习和实践,你将逐渐培养出编程的技能和兴趣。 在软件开发中,数据库是一个非常重要的组成部分。你提到了MySQL,它是一个关系型数据库管理系统,由MySQL AB开发,目前属于Oracle旗下的产品。MySQL是目前最流行的关系型数据库管理系统之一,在WEB方面,MySQL是最好的RDBMS(关系数据库管理系统)。关系数据库将数据保存在不同的表中,这样可以提高速度和灵活性。 另外,你还提供了一段Python代码,这段代码展示了如何打开和读取文件的内容,并最后关闭文件。这是一个基本的文件操作示例,你可以通过这种方式读取和处理文件中的数据。 关于你的问题,如果你想记录你的Python软件开发实习日记,你可以创建一个文本文件,然后使用Python的文件操作功能来写入你的日记内容。你可以使用类似下面的代码来实现: ```python # 打开文件,如果文件不存在则创建新文件 file = open("实习日记.txt", "a") # 写入日记内容 file.write("今天我学习了如何使用Python编写函数。\n") file.write("我解决了一个bug,并优化了代码的性能。\n") # 继续写入其他日记内容 # 关闭文件 file.close() ``` 这样,你就可以通过运行这段代码来将你的实习日记内容写入到名为"实习日记.txt"的文件中。每次运行代码,新的日记内容都会被追加到文件的末尾。 希望这些信息对你有帮助,祝你在软件开发实习中取得成功! #### 引用[.reference_title] - *1* [0基础学习python日记-第1天](https://blog.csdn.net/weixin_44705811/article/details/124206978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Python学习日记(三十三) Mysql数据库篇 一](https://blog.csdn.net/weixin_33669473/article/details/113949960)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Python学习日记-第二十天- 文件](https://blog.csdn.net/arizia/article/details/127308155)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值