技嘉主板 AB350m Gaming 3
BIOS version: F7a
开启Ryzen CPU 虚拟化支持(如果未开启,则无法安装64位的windows or linux 操作系统)
开机F2 进入BIOS 依次选择 M.I.T -> Advanced Frequency Settings -> Advanced Cpu Core Settings -> SVM Mode = Enable
1 2 2
最近在做一款单片机系统,使用的是AVR128单片机作为上位机,其中使用ESP8266接入互联网,大体的想法是,上位机通过串口向esp8266发送AT指令,来达到请求服务器接口的目的,服务器上的接口是使用PHP写的简单的HTTP接口。
最初的方法 esp8266的AT指令返回的信息非常的不规范,没有统一的格式,所以对回传的判断是有一定的困难的。刚开始使用的是最简单的方法通过充足的延时和指令的重复发送来确保每一个AT指令的正确执行。
上位机在初始化的时候会重启esp8266,这时候延时5秒的时间(用来esp8266的重启和自动连接好已连接过的热点) 发送TCP连接指令(AT+CIPSTART=“TCP”,“www.icharm.me”,80),这时候延时2秒(可以缩短为一秒,视服务器情况) 发送进入透传模式指令(AT+CIPMODE=1),延时500ms 发送进入透传发送模式指令(AT+CIPSEND),延时500ms 然后发送请求接口的数据(GET http://www.icharm.me/index.php?ac=100002)延时1s等待服务器的返回 如果上面的每一条指令都能正确的执行的话,肯定是可以触发服务器的接口的。但是经过测试发现,这种方法并不靠谱,经常会出现问题。
有关ESP8266怎么连接服务器的可以参考:
检查回传 因为上面的方法稳定性太差,所以哀差闷开始分析esp8266回传信息,试图找到一种通用的规则来判断AT指令的成功执行。
哀差闷的设想是保证每次开机后都顺利的进入透传发送模式,所以怎么保证进入了透传发送的模式,只有检查每一条AT指令的回传。确保每一条指令的成功执行。
首先需要知道的是:每发送一个AT指令,ESP8266会返回一下你发送的指令,接着紧接回车换行(0x0D 0x0A),再返回指令执行的信息,再紧接回车换行(0x0D 0x0A),最后返回指令执行的情况(OK或者ERROR),最后再紧接一个回车换行。
接下来分析下AT+CIPSTART=“TCP”,“www.icharm.me”,80 这条AT指令的回传信息。发送这条指令的时候esp8266有四种回传情况:(/n/r 代表回车换行)
未连接wifi,这时候会返回:no ip /n/r ERROR /n/r 等信息 已连接wifi,但没有网络访问权限 ,这时候会返回 CONNECT CLOSE /n/r ERROR /n/r 已经和服务器建立连接,这时候会返回 ALREADY CONNECTED /n/r ERROR /n/r 成功和服务器建立连接, 返回OK 再来分析下AT+CIPMODE=1 指令的回传情况,这个比较简单,成功返回OK, 失败返回ERROR,重复设置也会返回OK,所以这条指令可以通过判断是否为OK或ERROR。
指令AT+CIPSEND 的返回信息比较简单,成功返回 > 失败返回ERROR。
从上面可以知道,判断返回是否为OK或者ERROR并不能达到预期的目标,而且在单片机程序中,串口接受缓冲数组长度有限,会出现覆盖掉前面的一部分信息的情况,甚至出现ERROR这单词的前一部分在数组的末端,后一部分在数组的前端的情况。
所以哀差闷想了一个办法,先从串口中断接收函数入手,弄两个接收缓冲数组A,B,首先对接收到的字符进行判断如果为0x0d(即回车)时,则舍弃,同时从A数组中取出0x0d前面的一个字符存入B,如果为0x0a则直接放弃, 否则将存入数组A。
这样数组B中存放即为每一个回车的前一个字符。后面将通过判断数组B中的字符来判断,从面上面的情况中,可以总结出成功的情况有三种:
数组B最后一个字符为K (即OK) 数组B最后一个字符为R (即ERROR),但数组B倒数第二个字符为D,这种情况代表ALREADY CONNECTED /n/r ERROR 数组B最后一个字符为 > 除了上面的三种情况,其他的都视为失败。
代码分析 可能经过上面的说明,还是不太明白,可以参考一下哀差闷的代码。但因为单片机的不同,代码会不同,请参考着看:
中断接收函数:
//*********************************************************************** // USART1中断接收字符串 //*********************************************************************** #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(void) { uchar temp = UDR1; //从数据缓冲器中接收数据 放入temp中 if(temp == 0x0d ){ //将每一个回车符前面的一个字符串记录下来,用作判断的标志 if(RxBufWr_wifi == 0){ //RxCharBuf_wifi即为数组A, wifi_flag即为数组B, RxBufWr_wifi为数组A的写入指针, flagWr为数组B的写入指针 wifi_flag[flagWr] = RxCharBuf_wifi[15]; }else{ wifi_flag[flagWr] = RxCharBuf_wifi[RxBufWr_wifi-1]; } flagWr++; flagWr &= 0x0f; //数组长度为16,当写入指针为达到16时 自动归零 if(flagWr !
git菜鸟应该会经常遇到的问题, 就像博主这样。服务器上pull更新时遇到冲突。主要是环境配置文件冲突,由于从SVN转到git,所以保留了SVN那种部署代码的方式,git有更好的部署方法flow,可惜还不会使用。配置文件分为本地和线上。有时候为了方便直接上服务器上修改配置文件,然后在本地完成一个新功能的时候,push到仓库里。再在服务器上拉取更新。就会爆冲突。这时候,索引的版本号会变为最新。但是更新的代码并没有实际合并到当前分支,再次尝试拉取的时候会提示已是最新版本。类似如下:
[root@smsms]$ git pull origin master:master remote: Counting objects: 680, done. remote: Compressing objects: 100% (517/517), done. remote: Total 680 (delta 166), reused 664 (delta 156) Receiving objects: 100% (680/680), 11.17 MiB | 22.13 MiB/s, done. Resolving deltas: 100% (166/166), completed with 7 local objects. From https://gitlab.oneit.com/mei/smsms d1cfc68..9e7ba97 master -> master Warning: fetch updated the current branch head. Warning: fast-forwarding your working tree from Warning: commit d1cfc689545cdf70a9e29254d4473fcb7fe66efc. error: Entry 'inc/global.
618促销,博主没有忍住,买了台显示器。想着买回来配合黑苹果使用的,结果黑苹果无法输出HDMI,一插上HDMI就黑屏,死机。开机的时候读条一半重启!
HDMI输出 联想Y50-70安装OS X EI Caption(10.11.3)成功驱动HD4600
上面是博主安装黑苹果的记录。先要交代的是:
HD4600驱动的方式是:DSDT注入ig-platform-id 0600260a
HDMI输出是由核显负责(特意在BIOS中禁止了独显,在windows下尝试的,HDMI正常输出)
无法输出的原因: 采用0600260A这个id驱动的HD4600只能输出EDP、DP,不具备HDMI的输出功能,但是很多的笔记本只有使用0600260a的ID才能正常驱动HD4600
0700260D这个ID可以输出HDMI。于是首先将DSDT里的ig-platform-id改为0700260D试试
1 OK,保存,重建缓存!重启!
内屏花屏 经过上面的修改后,插上HDMI重启顺利的进入系统了,但是内屏全花了,惨不忍睹。还好显示器可以用了,HDMI可以输出了。不过内屏花掉始终不方便。于是远景爬楼爬楼,找到了解决方法:在0600260A的hd4600上实现hdmi输出。lz写的比较简单,小白估计看不懂,所以这里博主从新总结一下。
1.复制一份/System/Library/Extensions/AppleIntelFramebufferAzul.kext出来
2.右键AppleIntelFramebufferAzul.kext —— 显示包内容
3.将/contents/MacOS/AppleIntelFramebufferAzul用utraEdit打开
4.搜索06 00 26 0A找到下面的地方:
2 上面蓝色选中的部分即为06 00 26 0A的相关内容,第三行的02 00 00 00定义EDP输出,第四行00 04 00 00定义DP输出, 第五行00 04 00 00定义DP的输出
5.搜索07 00 26 0D找到下面的位置:
3 上面蓝色选中部分即为07 00 26 0D的相关内容,第三行的02 00 00 00定义了EDP输出、第四行和第五行的00 04 00 00定义了DP的输出、第六行00 08 00 00定义了HDMI输出
6.所以现在要做的是保留07 00 26 0D中的输出定义的相关内容,其他的内容替换为06 00 26 0A中相对应的内容。有一点要注意的是,定义输出的后面8个字节和前面四个字节的内容不要更改。
比如说,第二行没有定义输出,所以全部替换为06 00 26 0A的第二行、第六行00 08 00 00后面的8个字节(06 00 00 00 1E 03 00 00)不要动,再后面的05 05 09 00替换为06 00 26 0A相对应位置的内容(01 01 00 00)
一年之前也曾尝试在神舟K350C上安装黑苹果。但是显卡驱动弄了好长时间一直都没有解决。如今win10经常磁盘100%也让我有了换系统的想法,于是想尝试下win7+Mac+kali的三系统组合。加上远景论坛上有联想Y50-70的成功案例。更加加大了信心。
配置信息 联想Y50-70:
处理器 Intel(R) Core(TM) i5-4210H CPU @ 2.90GHz
硬盘: WDC WD10SPCX-24HWST1 (1.0TB)
网卡 :1、Intel(R) Dual Band Wireless-AC 3160 \2、Realtek RTL8168/8111
声卡 :Realtek ALC283
显卡 :1、Intel(R) HD4600 \ 2、NVIDA GTX860M
显示器 :CMN:c415 分辨率:1920x1080
1 分区 说干就干,刚好手头上有两台笔记本。装起来更加的方便。把一些重要的文件备份好后,就开始了折腾之旅。
做了一个PE启动盘。进入PE后全盘格式化。然后开始分区。
ESP 200m ----------EFI分区,尽量大一点因为后期要放clover进来,还有一些主题,驱动啥的。 本地磁盘C(NTFS) 150G----Win10吸取的经验100G的C盘真的不够用,特别是装了很多的编程环境,还有一大堆的类库,框架都得放在C盘。 本地磁盘D(NTFS) 本地磁盘E(NTFS) Swap 2G ----------linux系统的swap分区,分区的时候没注意其实1G的大小就行了。 kali系统分区(ext4) 70G Install Mac os (Fat32,未格式化)10G--用来写入懒人版的MAC Os镜像的,需要注意的是不能格式化。 Mac Os (Fat32)------------苹果的系统盘,先弄成fat32的格式。等进入安装苹果安装程序的时候重新格式化一下。 下图是所有系统安装好之后的磁盘分区情况:
2 BIOS设置 以联想Y50-70BIOS为例:
UEFI boot is Enable Secure boot is Disable Legacy boot is Enable(But UEFI First) OS Optimized Defaults = Other OS 安装Win7 安装原版的win7,注意必须是64位的,因为博主是采用GPT+UEFI的引导方式,32位的win7是不支持的。
博主这几天在做实践周的项目,一个餐馆点餐系统,需要使用到数据库,遇到了很多的问题,百度了很久也没什么头绪。主要还是关于VS自带的数据库操作的问题。这里我来总结一下吧。
首先需要说明的是博主在装VS2013的时候是全选了所有组件安装的。所以默认会自动安装一个SQL Server Express LocalDB。
SQL Server Express LocalDB简介 首先来说一下这个SQL Server Express LocalDB吧,大家应该都知道Express版是一个精简版,而LocalDB呢是SQL Server Express的一种运行模式,比较适合在开发环境使用。所以被内置在VS2013中。
在下文中我们使用SSEL来代替SQL Server Express LocalDB。
在VS中使用SSEL 1.使用SSEL新建一个数据库
视图——打开SQL Server对象资源管理器
1 2.展开其中一个数据库实例——右键点击数据库,选择添加新数据库
2 博主添加一个Test数据库作为演示,位置可以更改。
3 3.给新建的Test数据库添加一个Users表
4 5 4.给新建的Users表添加内容
右键新建的表名,点击查看数据:
6 7 新建数据库实例 可以看到博主是在已有的数据库实例上新建数据库的,那么怎样创建一个新的实例呢,博主没有在VS中找到方法,所以下面会介绍SSEL的命令行工具SqlLocalDB.exe
这个工具默认在 C:\Program Files\Microsoft SQL Server\110\Tools\Binn(博主是64为系统,如果是32位的话应该是在C:\Program Files(x86)下)。SqlLocalDB.exe不能直接运行,需要使用cmd打开。
下面是cmd命令:
C:\Users\Myl-Cloud>cd C:\Program Files\Microsoft SQL Server\110\Tools\Binn C:\Program Files\Microsoft SQL Server\110\Tools\Binn>SqlLocalDB.exe 下面是SqlLocalDB.exe运行后的提示信息。
Microsoft (R) SQL Server Express LocalDB 命令行工具 版本 11.0.2100.60 版权所有 (c) Microsoft Corporation。保留所有权利。 用法: SqlLocalDB 操作 [参数.