<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Alan_Walker_One的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Alan_Walker_One</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Alan_Walker_One]]></copyright><item><title><![CDATA[STM32F103C8T6的SPI收发数据错误的问题]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124910223</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124910223</guid><author>Alan_Walker_One</author><pubDate>Sun, 22 May 2022 14:46:42 +0800</pubDate><description><![CDATA[项目场景：

本人最近在做一个STM32F103C8T6的两个SPI模块自通信实验，旨在验证SPI收发数据的正确性。即事先设定好两个SPI模块发送的值，通过ST-LINK单步调试观察单片机内部寄存器的值。待发送的数据如下：



同时定义两个SPI的接收数组：



问题描述

单片机全速运行时，发现传输结果中出现了数据错误：
下图为单步调试中，两个SPI模块数组的接收内容：

很明显和发送数据不匹配。


原因分析：

参考了网上的一些解决方案，有人说是因为在watch窗口中观察了SPIx-&gt;DR或]]></description><category></category></item><item><title><![CDATA[STM32F103C6T6的两个SPI模块自通信实验中SPI2无法工作的问题]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124907175</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124907175</guid><author>Alan_Walker_One</author><pubDate>Sun, 22 May 2022 12:15:34 +0800</pubDate><description><![CDATA[项目场景：
最近打算用STM32的最小系统版进行SPI通信实验，想首先验证SPI工作是否正常及观察收发数据是否正确，便进行STM32F103上SPI1和SPI2自通信。

问题描述
利用单步调试观察SPI1和SPI2寄存器的值，发现SPI1中各个寄存器的值符合预先设定，SPI2中寄存器的值都为零。
（0x40013000是SPI1的存储器映像地址，0x40003800是SPI2的存储器映像地址）


原因分析：

首先检查了SPI1和SPI2时钟及所在管脚的时钟是否开启，代码如下：

	/* 打开GPIOA]]></description><category></category></item><item><title><![CDATA[STM32用ST-LINK无法单步调试的解决方案]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124499029</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/124499029</guid><author>Alan_Walker_One</author><pubDate>Fri, 29 Apr 2022 17:17:01 +0800</pubDate><description><![CDATA[项目场景：
本人在刚接触STM32F103C6T6时，用USB转TTL转换器，通过串口下载程序，运行LED灯点亮程序，可以正常运行。

问题描述
但是用ST-LINK在Keil5软件上进行单步调试的时候，程序执行不到断点处，无法正常进行单步调试。


原因分析：
通过串口下载程序，和通过ST-LINK单步调试，单片机的启动方式是不同的。


解决方案：
之前通过串口下载程序时，BOOT0选择1引脚，BOOT1选择0管脚；那么要通过ST-LINK单步调试时，需要把启动方式改成：BOOT0选择0引脚，BOOT1]]></description><category></category></item><item><title><![CDATA[关于model-＞removeRow(i)无法删除数据库指定行的问题]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/117335256</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/117335256</guid><author>Alan_Walker_One</author><pubDate>Thu, 27 May 2021 19:09:42 +0800</pubDate><description><![CDATA[项目场景：
Qt中我新建了一个类型为QSqlTableModel，名称为model的指针;用来实现对数据库的添加、删除等操作。有用到以下语句拟对数据库中第i行进行删除：
model-&gt;removeRow(i)



问题描述：
目前的问题是当我调用一次model-&gt;removeRow(i)时，不能实现删除，当我再调用一次model-&gt;removeRow(i)后才能正确删除。其中用到了以下调试语句：
qDebug() &lt;&lt; "remove states: " &lt;&lt; m]]></description><category></category></item><item><title><![CDATA[C3872:“0xe1e4“:此字符不允许在标识符中使用]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/116599545</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/116599545</guid><author>Alan_Walker_One</author><pubDate>Mon, 10 May 2021 16:25:35 +0800</pubDate><description><![CDATA[C3872:"0xe1e4":此字符不允许在标识符中使用
Qt中QMessageBox的问题
最近再用Qt设计一个登录窗口，当密码输入错误时弹出消息提示窗。源代码如下：
                             //标题              内容                OK按钮
 QMessageBox::warning(this, tr("警告！"),tr("用户名或密码错误"),QMessageBox::Yes);

可是这样编译器会报错：

可是当我把标题中“警告！”中的]]></description><category></category></item><item><title><![CDATA[Unix中access和open函数的区别]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115555628</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115555628</guid><author>Alan_Walker_One</author><pubDate>Fri, 09 Apr 2021 23:48:43 +0800</pubDate><description><![CDATA[Unix中access和open函数的区别
《Unix环境高级编程》学习笔记

学习内容：
在书中图4-8提供了access函数运行实例，自己加了些简单的错误检查机制。程序如下：
#include"apue.h"
#include&lt;fcntl.h&gt;//O_RDONLY

int main(int argc, char* argv[])
{
	if(argc!=2)
		err_quit("usage: ./a.out filename\n");
		
	if(access(argv[1],F_O]]></description><category></category></item><item><title><![CDATA[Unix/Linux中＜和＞的用法]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115477290</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115477290</guid><author>Alan_Walker_One</author><pubDate>Wed, 07 Apr 2021 09:29:30 +0800</pubDate><description><![CDATA[Unix/Linux中&lt;和&gt;的用法
《Unix环境高级编程》学习笔记

&lt;表示输入重定向，&gt;表示输出重定向，&gt;&gt;表示将输出追加到设备末尾。
例如运行以下语句：
./a.out 0 &lt; /dev/tty

其中./a.out可执行文件的功能是，返回文件描述符对应的文件标志说明，具体见书中3-11所示程序。

表示将标准输入（STDIN_FILENO，对应值是0）重定向为/dev/tty文件。该命令等效于以下命令：
./a.out 0 0&lt; /dev/tty

程]]></description><category></category></item><item><title><![CDATA[关于Linux中ls命令的简单实现：]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115138461</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115138461</guid><author>Alan_Walker_One</author><pubDate>Tue, 23 Mar 2021 19:32:13 +0800</pubDate><description><![CDATA[关于Linux中ls命令的简单实现：
在学习《UNIX环境高级编程》这本书中，对图1-3程序进行了简单解释，欢迎大家留言讨论~

#include"apue.h"//是作者自定义的头文件
#include&lt;dirent.h&gt;//系统头文件

int main(int argc, char* argv[])
{
	DIR * dp;//DIR是一个内部结构，通常用来保存当前被读取的目录有关的信息.(typedef)
	struct dirent * dirp; 
	
	if(argc!=2)//如]]></description><category></category></item><item><title><![CDATA[Ubuntu中cp: cannot create regular file ‘...‘: Permission denied的解决方案]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115080528</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115080528</guid><author>Alan_Walker_One</author><pubDate>Mon, 22 Mar 2021 15:56:06 +0800</pubDate><description><![CDATA[Ubuntu中cp: cannot create regular file ‘…’: Permission denied的解决方案
在学习《Unix环境高级编程》过程中，为了将下载的 “apue.h” 头文件导入到环境变量中的 /usr/include 目录下，在终端中输入以下命令:

cp apue.3e/include/apue.h /usr/include/

终端报错：
cp: cannot create regular file '/usr/include/apue.h': Permission ]]></description><category></category></item><item><title><![CDATA[main函数中argc和argv[]的含义]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115031872</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115031872</guid><author>Alan_Walker_One</author><pubDate>Sat, 20 Mar 2021 18:21:25 +0800</pubDate><description><![CDATA[Linux系统中argc和argv[]的含义
一般我们在查看Linux系统中命令文件时，通常会看到

int main(int argc, char* argv[])

首先解释下含义：
argc 是 argument count的缩写，表示输入的参数个数；
argv 是 argument vector的缩写，表示传入main函数的参数序列或指针，并且第一个参数argv[0]一定是执行程序的名称，并且包含了程序所在的完整路径，所以确切的说需要我们输入的main函数的参数个数应该是argc-1个；
参考链接：]]></description><category></category></item><item><title><![CDATA[关于list iterator not incrementable的解决方法]]></title><link>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115025441</link><guid>https://blog.youkuaiyun.com/Alan_Walker_One/article/details/115025441</guid><author>Alan_Walker_One</author><pubDate>Sat, 20 Mar 2021 13:18:49 +0800</pubDate><description><![CDATA[关于list iterator not incrementable的解决方法1.错误源码2.错误分析3.修正
编译环境：VS2015
语言：C++
参考博客：https://blog.youkuaiyun.com/qingtianweichong/article/details/9531919

话休絮烦，直接贴上报错图片：

看到list字样，应该是list容器部分出现了问题。下面贴出使用list容器的代码块:
1.错误源码
双向链表list及迭代器声明部分：
list&lt;Bullet*&gt; m_bullet]]></description><category></category></item></channel></rss>