<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/wugxnet</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; wugxnet]]></copyright><item><title><![CDATA[linux编译jsoncpp]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/135559339</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/135559339</guid><author>wugxnet</author><pubDate>Fri, 12 Jan 2024 18:07:52 +0800</pubDate><description><![CDATA[jsoncpp是一个 C++ 库，用于实现json格式的序列化和反序列化，完成多个数据对象组织成为json格式字符串，以及将json格式字符串解析成得到多个数据对象的数据。判断某个键是否存在，bool Json::Value::isMember(const char *key) const;判断某个键的类型，bool Json::Value::isString(const char *key) const;得到Value中的所有键,Json::Value::getMemberBames() const;]]></description><category></category></item><item><title><![CDATA[【dbus-cxx】libsigc++ 和 dbus-cxx 在 Ubuntu 中的编译和配置]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/135559313</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/135559313</guid><author>wugxnet</author><pubDate>Fri, 12 Jan 2024 18:05:38 +0800</pubDate><description><![CDATA[编译需要添加指令pkg-config --cflags --libs dbus-cxx-2.0 , 并添加shell 环境变量指定libsig++ 和 dbus-cxx的lib位置。解压之后执行./configure --prefix=$PWD/__install,如果是交叉编译，需要加上--host=xxxx。下载源码 git clone https://github.com/dbus-cxx/dbus-cxx.git。DBUS-CXX也是建议看官方文档，各个配置环境也先仔细看对应的文档再操作。]]></description><category></category></item><item><title><![CDATA[嵌入式Linux：Qt5+触摸屏+点灯（使用sysfs控制gpio）]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129755202</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129755202</guid><author>wugxnet</author><pubDate>Fri, 24 Mar 2023 17:27:58 +0800</pubDate><description><![CDATA[通过 sysfs 方式控制 GPIO，先访问 /sys/class/gpio 目录，向 export 文件写入 GPIO 编号，使得该 GPIO 的操作接口从内核空间暴露到用户空间，GPIO 的操作接口包括 direction 和 value 等，direction 控制 GPIO 方向，而 value 可控制 GPIO 输出或获得 GPIO 输入。//设置端口方向/sys/class/gpio/gpio36 # echo out > direction。]]></description><category></category></item><item><title><![CDATA[嵌入式Linux点灯-pinctrl和gpio子系统]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129729299</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129729299</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 13:52:34 +0800</pubDate><description><![CDATA[和没用pinctrl、gpio子系统相比，此处更加简洁，没用pinctrl和gpio子系统时，还需在入口函数中读取设备树中gpioled的寄存器，然后重映射、初始化，对gpioled的操作也是要基于寄存器的，十分低效（和裸机开发没什么区别）。/* 申请设备号 */第25行：使led_gpio（这是在入口函数中获取的gpioled设备管脚的管脚号）这个管脚输出为低，对gpioled进行操作都是基于led_gpio这个管脚号。if (gpioled.major) {        /*  定义了设备号 */]]></description><category></category></item><item><title><![CDATA[ARM裸机开发——Linux环境搭建和LED灯闪烁实验]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129727764</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129727764</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 11:44:39 +0800</pubDate><description><![CDATA[但是转换到单片机上，需要进一步地转换为二进制文件，为此需要将多个文件合并，在文件数量不多，文件关系清晰的情况，可以按照图中第7行的方式顺序排列，进行合并。C语言通过两个赋值语句完成了上述的步骤，与汇编语言中的部分寄存器不同，C语言中的寄存器名称如GPFCON，代表只是对应寄存器的物理地址，其只是软件名称，提高可读性，换句话说如果，将寄存器名称更改，或者无需寄存器名称，也可以实现上述操作，如下图4.3将GPFCON和GPFDAT更改位FCON和FDAT，以验证实验效果，效果图如图4.4.]]></description><category></category></item><item><title><![CDATA[嵌入式Linux开发|点亮那颗LED灯]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129727483</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129727483</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 11:32:20 +0800</pubDate><description><![CDATA[第1、2中都是通过直接控制GPIO来达到控制LED，这比较适合较简单的应用场景，比如仅仅控制LED的打开、关闭。如果想实现LED的呼吸、闪烁，并且是以不阻塞主程序的方式运行，那么，LED的控制就相对来说比较困难了。如果是单片机开发，控制一颗LED的步骤比较的简单、直接，直接配置GPIO功能，输出高、底电平就可以控制LED了。brightness：表示LED的亮度，对于普通发光二极管LED，只有两个状态：>0，LED亮，=0，LED灭；gpios：定义LED关联的GPIO，并说明了gpio的有效状态。]]></description><category></category></item><item><title><![CDATA[最简单的GPIO点灯驱动]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129726931</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129726931</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 11:11:30 +0800</pubDate><description><![CDATA[Volatile：这个关键字的意思就是禁止编译器的优化，我们知道计算机在存储的时候为了存储的速度快，会把某些地址的值拷贝到寄存器中，这样以后直接读取寄存器的值速度会加快，但是有时候我们需要的值变化特别快，或者会在我们不知道的情况下改变它的值，而寄存器的值和内存地址的值可能不同步，那时我们就希望编译器不要优化，直接去读取内存地址的值，这时我们就用到了这个关键字。在open函数中我们就是配置了gpio的配置引脚让他们具有对应的功能，具体应该参照原理图来写，这里我们用的是三星的s3c2440的芯片，]]></description><category></category></item><item><title><![CDATA[_IO, _IOR, _IOW, _IOWR 宏的用法与解析]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129726904</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129726904</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 11:10:41 +0800</pubDate><description><![CDATA[这里的_IOW/_IOWR显得很突触，以前没有接触过这个东西，一下子就被搞蒙了，但是我不会轻易放弃每个学习中的问题，我查了很多资料，现在我就来详细说明一下我的自学成果，如果有错误的地方，还请各位高手指点。变量型使用 arg 变量指定传送的数据大小，但是不直接代入输入，而是代入变量或者是变量的类型，原因是在使用宏创建命令，已经包含了 sizeof() 编译命令。用于创建设备上读写数据的命令。使用该命令时，应用程序的 ioctl() 的 arg 变量值指定设备驱动程序上读取数据时的缓存(结构体)地址。]]></description><category></category></item><item><title><![CDATA[【嵌入式 Linux 驱动开发基础知识】按键驱动]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129726822</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129726822</guid><author>wugxnet</author><pubDate>Thu, 23 Mar 2023 11:07:20 +0800</pubDate><description><![CDATA[2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin。.init  = board_xxx_button_init_gpio,//初始化引脚，初始化为输入引脚。.read  = board_xxx_button_read_gpio,//读取引脚的电平状态。]]></description><category></category></item><item><title><![CDATA[Linux 驱动之按键驱动编写（中断方式）]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/129716046</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/129716046</guid><author>wugxnet</author><pubDate>Wed, 22 Mar 2023 18:19:04 +0800</pubDate><description><![CDATA[2、查看芯片手册，确定 IO 端口的寄存器地址，可以看到因为用了两组 GPIO 端口，所以它的基地址分别为 0x56000050、0x56000060。5）、./third_test 测试程序，按下按键，成功打印按键值，用 top 命令查看应用程序发现 third_test 程序占用了 0% 的 CPU 资源，驱动程序相比查询方式的驱动改善了。2）、 添加 file_operations 结构体，这个是字符设备驱动的核心结构，所有的应用层调用的函数最终都会调用这个结构下面定义的函数。]]></description><category></category></item><item><title><![CDATA[函数调用堆栈变化分析]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/122091429</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/122091429</guid><author>wugxnet</author><pubDate>Wed, 22 Dec 2021 17:42:54 +0800</pubDate><description><![CDATA[比如我们有这样一个C函数
#include&lt;stdio.h&gt;
longtest(inta,intb)
{
a=a+1;
b=b+100;
returna+b;
}
voidmain()
{
printf("%d",test(1000,2000));
}
写成32位汇编就是这样
;//////////////////////////////////////////////////////////////////////////////...]]></description><category></category></item><item><title><![CDATA[为什么要下断bpSend，原理分析。]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/122091317</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/122091317</guid><author>wugxnet</author><pubDate>Wed, 22 Dec 2021 17:38:38 +0800</pubDate><description><![CDATA[看过这里有的大大是断下send后，去找调用send的CALL，找到这个CALL再找上一次的CALL，这样去找关键CALL，但是，有的游戏这样是找不来的，所以，如果有的游戏不能这样找回去，那怎么办呢，这就要先说说原理了。
　　要说找CALL的原理，我们应该想想游戏的运行机制。也就是说游戏的控制方式是怎么样的。
　　不说费话，其实大多数的游戏都是这样的，来个买药的例子吧：
　　点击买药后：
　　1、客户端产生一个买药行为 并调用买物品的过程，如：BuyGoods(s:string,n:integer);　/..]]></description><category></category></item><item><title><![CDATA[做挂第一步:如何找基址(以热血传奇为例)]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/122091301</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/122091301</guid><author>wugxnet</author><pubDate>Wed, 22 Dec 2021 17:37:55 +0800</pubDate><description><![CDATA[如何找热血传奇基址？

一．首先打开游戏并使用CE加载游戏进度。

二．在数值中输入血量值207,点击新的扫描，扫描类型选择精确数值，如图所示：



为什么要输入207呢？这是指游戏中人物的当前血量，游戏中的任何数据都对应一个内存地址，所以此处我们可以找到血量207的内存地址。可以发现搜索出了一大堆，但是到底哪一个是我们需要的血值呢？所以我们还得构造一个条件，以方便准备的搜出血值。请看第三步

3.进入游戏，打打怪，然后故意让怪物打几下，这样自身的血量会减少，然后在CE中，扫描类型选择：减少的数值，当然在]]></description><category></category></item><item><title><![CDATA[一步步学外挂(二).CALL的原理。]]></title><link>https://blog.youkuaiyun.com/wugxnet/article/details/122091191</link><guid>https://blog.youkuaiyun.com/wugxnet/article/details/122091191</guid><author>wugxnet</author><pubDate>Wed, 22 Dec 2021 17:35:56 +0800</pubDate><description><![CDATA[看过这里有的大大是断下send后，去找调用send的CALL，找到这个CALL再找上一次的CALL，这样去找关键CALL，但是，有的游戏这样是找不来的，所以，如果有的游戏不能这样找回去，那怎么办呢，这就要先说说原理了。
　　要说找CALL的原理，我们应该想想游戏的运行机制。也就是说游戏的控制方式是怎么样的。
　　不说费话，其实大多数的游戏都是这样的，来个买药的例子吧：
　　点击买药后：
　　1、客户端产生一个买药行为 并调用买物品的过程，如：BuyGoods(s:string,n:integer);　//.]]></description><category></category></item></channel></rss>