void send_data( long data)
{
SBUF=data;
while (TI== 0 );
TI= 0 ;
}
data是一个16位数,这个程序发送有问题吗?
这样怎么行啊。SBUF是8位的你发16位的。。。建议你分两次发,首先发高8位,然后发低八位,接收到后吧高8位向左移8位即A<<8。。。B是低8位这样就出来了DATA=A<<8|B.
有问题 SBUF寄存器是8位的 分2次才可以
一般来说你何必要这么发送呢,采用一个char型的8位数不是更好吗?
但是不一定出错,很多单片机都提供了促发传送的功能,也就是说,有一个FIFO队列,你可以一次写入2个或4个字节,这样的话就可以提高传送的效率和速度了,现在的单片机一般都带这个功能,所以说对于错很麻烦,光看这点东西是不行的
相当有问题,这么一来data的高8位被自动截掉了,确实得要分两次 ,如:对于1000,0XE8---低8位,0X03---高8位!
U8 a,b;
U16 c;
a = c|0x00ff;
c >>= 8;
b = c|0x00ff;
00000011 :高位 十六进制:3 十进制:3
11111101 :地位 十六进制:FD 十进制:253
十六进制的高位+十六进制的低位 = 3FD ===》转为:十进制等于:1021
1021/2047*70-10 = 24.91450903度
temp_value_height = ((temp_value >> 8) & 0xff) &0x7;
解释:
回忆未来(372647693) 19:09:29
我学php的。哈哈
石涛(47957728) 19:09:36
temp_value >> 8, 将高八位移位到低八位
回忆未来(372647693) 19:09:50
那低八位到哪儿去了?
石涛(47957728) 19:09:59
那个你就不用管了
石涛(47957728) 19:10:03
因为你不需要
回忆未来(372647693) 19:10:10
嗯,然后呢?
回忆未来(372647693) 19:10:30
& 0xff ??
石涛(47957728) 19:10:31
& 0xff是将现在的数值的高8位清0
石涛(47957728) 19:11:01
& 0x7,就是取现在的数的低3位
回忆未来(372647693) 19:11:03
也就是刚才高八位移到低8位后高还是有东西的?
石涛(47957728) 19:11:56
因为移位之后是将原来的24~16位的移位到8~15了
石涛(47957728) 19:12:18
如果你的temp_value是个32位数的话
http://zhidao.baidu.com/question/110038192.html
{
SBUF=data;
while (TI== 0 );
TI= 0 ;
}
data是一个16位数,这个程序发送有问题吗?
这样怎么行啊。SBUF是8位的你发16位的。。。建议你分两次发,首先发高8位,然后发低八位,接收到后吧高8位向左移8位即A<<8。。。B是低8位这样就出来了DATA=A<<8|B.
有问题 SBUF寄存器是8位的 分2次才可以
一般来说你何必要这么发送呢,采用一个char型的8位数不是更好吗?
但是不一定出错,很多单片机都提供了促发传送的功能,也就是说,有一个FIFO队列,你可以一次写入2个或4个字节,这样的话就可以提高传送的效率和速度了,现在的单片机一般都带这个功能,所以说对于错很麻烦,光看这点东西是不行的
相当有问题,这么一来data的高8位被自动截掉了,确实得要分两次 ,如:对于1000,0XE8---低8位,0X03---高8位!
U8 a,b;
U16 c;
a = c|0x00ff;
c >>= 8;
b = c|0x00ff;
00000011 :高位 十六进制:3 十进制:3
11111101 :地位 十六进制:FD 十进制:253
十六进制的高位+十六进制的低位 = 3FD ===》转为:十进制等于:1021
1021/2047*70-10 = 24.91450903度
temp_value_height = ((temp_value >> 8) & 0xff) &0x7;
解释:
回忆未来(372647693) 19:09:29
我学php的。哈哈
石涛(47957728) 19:09:36
temp_value >> 8, 将高八位移位到低八位
回忆未来(372647693) 19:09:50
那低八位到哪儿去了?
石涛(47957728) 19:09:59
那个你就不用管了
石涛(47957728) 19:10:03
因为你不需要
回忆未来(372647693) 19:10:10
嗯,然后呢?
回忆未来(372647693) 19:10:30
& 0xff ??
石涛(47957728) 19:10:31
& 0xff是将现在的数值的高8位清0
石涛(47957728) 19:11:01
& 0x7,就是取现在的数的低3位
回忆未来(372647693) 19:11:03
也就是刚才高八位移到低8位后高还是有东西的?
石涛(47957728) 19:11:56
因为移位之后是将原来的24~16位的移位到8~15了
石涛(47957728) 19:12:18
如果你的temp_value是个32位数的话
http://zhidao.baidu.com/question/110038192.html
36转十六进制是多少?
验算怎么验?全要过程?
36 除以 16 等于 2 余 4
故 24H
验算过程
2乘以16的一次方 加上 4乘以16的0次方 等于 36.
验算怎么验?全要过程?
36 除以 16 等于 2 余 4
故 24H
验算过程
2乘以16的一次方 加上 4乘以16的0次方 等于 36.
当我们提到时钟周期时,我们就是指波特率例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。通常电话线的波特率为14400,28800和36600。波特率可以远远大于这些值,但是波特率和距离成反比。高波特率常常用于放置的很近的仪器间的通信,典型的例子就是GPIB设备的通信
一、串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
一、串口通信原理 串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
提示某个位置的xml文件有问题,到目录下一看:
C:\Documents and Settings\jackxiang\Application Data\Adobe\Dreamweaver CS4\zh_CN\Configuration\Workspace
重新命名:
Designer Compact.xml
新名字:
Designer Compact.xml.bak
然后,重新绿化了下,相当于把那个文件给重新生成了一次,再打开,O了!
C:\Documents and Settings\jackxiang\Application Data\Adobe\Dreamweaver CS4\zh_CN\Configuration\Workspace
重新命名:
Designer Compact.xml
新名字:
Designer Compact.xml.bak
然后,重新绿化了下,相当于把那个文件给重新生成了一次,再打开,O了!
#ZendStudio# 太重, #Editplus# 太丑, #Notepad++# 不支持sftp, #sublime# 没有PHP代码补全; #Textmate# 不能正常显示中文, #Espresso# 远程写文件错误没有反馈, #coda# 不能折叠代码.这个世界就不能有一个完美点的编辑器么 ..
语法:
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
比如:最好不要这样:
char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:
char c[20];
string s="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
再举个例子
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = "Hello World!";
printf("%s", s.c_str()); //输出 "Hello World!"
const char *c_str();
c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
比如:最好不要这样:
char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:
char c[20];
string s="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
再举个例子
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = "Hello World!";
printf("%s", s.c_str()); //输出 "Hello World!"
linux 串口读取数据被截断,怎样一次全部接收?阅读全文
原创 端口扫描程序实现原理 收藏
以前看过很多网络相关方面的程式源码, 但时间长了都忘了怎么实现的了, 因此,想将以后看过的源码实现方式记录下来, 以免下次再得找资源!
其实端口扫描程式的原理很简单, 利用socket连接指定IP的端口, 根据其返回值就可以得知目标机器是否开启了这个端口,
实现步骤如下:
1. 创建socket
c_socket = socket ( AF_INET, SOCK_STREAM, 0 );
if ( c_socket == SOCKET_ERROR )
{
printf (" create socket fault!\n ");
return -1;
}
2. 连接目示机器
struct sockaddr_in remoteaddr;
struct hostent* remotehost;
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr = inet_addr ( Address );
remoteaddr.sin_port = htons ( cPort );
//连接
if ( connect ( c_socket, (SOCKADDR*) &remoteaddr, sizeof ( struct sockaddr_in ) ) == SOCKET_ERROR )
{
printf ("< %3d > connect port %5d ...\n",ThreadID,cPort ) ;
closesocket( c_socket);
return -1;
}
closesocket( c_socket);
printf ("< %3d > connect port %5d succeed\n",ThreadID,cPort ) ;
也可以利用多线程技术实现, 只要给每个线程分配好指定的扫描端口段就可以了
来源:
http://blog.csdn.net/study_live/archive/2009/09/28/4604673.aspx
以前看过很多网络相关方面的程式源码, 但时间长了都忘了怎么实现的了, 因此,想将以后看过的源码实现方式记录下来, 以免下次再得找资源!
其实端口扫描程式的原理很简单, 利用socket连接指定IP的端口, 根据其返回值就可以得知目标机器是否开启了这个端口,
实现步骤如下:
1. 创建socket
c_socket = socket ( AF_INET, SOCK_STREAM, 0 );
if ( c_socket == SOCKET_ERROR )
{
printf (" create socket fault!\n ");
return -1;
}
2. 连接目示机器
struct sockaddr_in remoteaddr;
struct hostent* remotehost;
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr = inet_addr ( Address );
remoteaddr.sin_port = htons ( cPort );
//连接
if ( connect ( c_socket, (SOCKADDR*) &remoteaddr, sizeof ( struct sockaddr_in ) ) == SOCKET_ERROR )
{
printf ("< %3d > connect port %5d ...\n",ThreadID,cPort ) ;
closesocket( c_socket);
return -1;
}
closesocket( c_socket);
printf ("< %3d > connect port %5d succeed\n",ThreadID,cPort ) ;
也可以利用多线程技术实现, 只要给每个线程分配好指定的扫描端口段就可以了
来源:
http://blog.csdn.net/study_live/archive/2009/09/28/4604673.aspx
RSA算法是一种基于公钥和私钥的加密算法, 是由Ronald Rivest, Adi Shamir和Len Adleman三人在Diffie-Helman指数密钥交换算法的
基础上于1977年设计出来的,Rivest设计的加密系统利用了数学领域的一个事实,那就是虽然把两个大素数相乘生成一个合数是件很容易
的事, 但要把一个合数分解为两个素数却十分困难。
RSA的安全性依赖于大数分解,公钥和密钥都是两个大素数(大于100个十进制位)的函数。据猜测,从一个密钥和密文推断出明文的难度
等同于分解两个大素数之积。
密钥对的产生,选对两个大素数p和q,计算
n=p*q
然后随机选择加密密钥e, 要求e和(p-1)*(q-1)互质,最后,利用Euclid算法计算解密密钥d,满足
(e*d) mod ((p-1)*(q-1))=1
其中n和d也要互质, 数e和n是公钥,d是私钥.现在两个素数p和q可以丢弃不再需要,不要让任何人知道.
加密信息m(二进制表示)时,首先把m分成等长数据块m1,m2....mi,块长s,其中2^s<=n, s尽可能地大.对应的密文是:
ci=mi^e (mod n) (a)
解密时作如下计算:
mi=ci^d (mod n) (b)
RSA可用于数字签名,方案是用(a)式签名,(b)式验证.具体操作时考虑到安全性和m信息量较大等因素,一般先作hash运算.
RSA算法示例:
(1) 选择两个素数:p=7, q=17
(2) 计算n=p*q=7*17=119
(3) 计算φ(n)=(p-1)*(q-1)=96
(4) 选择e,e为φ(n)=96的相对素数,要比φ(n)小,本例中e=5
(5) 决定d,使(d*e) mod 96=1,且d<96,正确值为d=77,因为77*5=385=4*96+1.
结果密钥为公钥KU={5, 119}和私钥KR={77, 119}
如输入明文M=19,使用以上密钥加密:
ci=M^e (mod n)
=19^5 mod 119
=2476099 mod 119
=66
解密由66^77 mod 119=19决定.
《黑客防线---口令破解与加密技术》笔记
来源:http://blog.csdn.net/study_live/archive/2009/12/19/5038828.aspx
i386,i586,i686几个概念之区分
这几个数据希望能结合rpm包名称考虑,不然会失去有些文字的表达意义。
i386—几乎所有的x86平台,不论是旧的pentium或者是新的pentium-iv与k7系统cpu,都可以正常工作,i指得是intel兼容的cpu,至于386就是cpu的等级。
i586—就是586等级的计算机,包括pentium第一代mmx cpu,amd的k5,k6系统cpu(socket7插脚)等cpu都是这个等级。
i686—pentium 2 以后的intel系统cpu及k7以后等级的cpu都属于这个686等级。
noarch—代表跟硬件体系结构无关。不管是 x86、powerpc,sparc 或者 alpha 系统。
本贴来自天极网群乐社区--http://q.yesky.com/group/review-17826846.html
这几个数据希望能结合rpm包名称考虑,不然会失去有些文字的表达意义。
i386—几乎所有的x86平台,不论是旧的pentium或者是新的pentium-iv与k7系统cpu,都可以正常工作,i指得是intel兼容的cpu,至于386就是cpu的等级。
i586—就是586等级的计算机,包括pentium第一代mmx cpu,amd的k5,k6系统cpu(socket7插脚)等cpu都是这个等级。
i686—pentium 2 以后的intel系统cpu及k7以后等级的cpu都属于这个686等级。
noarch—代表跟硬件体系结构无关。不管是 x86、powerpc,sparc 或者 alpha 系统。
本贴来自天极网群乐社区--http://q.yesky.com/group/review-17826846.html
/usr/ports/misc/cpuid下:
sudo make install clean
后,安装成功后,如何删除此软件呢?因为并没有看到温度。
cd /usr/ports/misc/cpuid
sudo make deinstall
安装Ports成功步骤:
portsnap fetch update. #https://blog.csdn.net/richardfjf/article/details/106961150
You must run 'portsnap extract' before running 'portsnap update'.
/usr/ports/x11/yeahconsole/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/yeahconsole/'
1、如何只抓取 tarball?阅读全文
sudo make install clean
后,安装成功后,如何删除此软件呢?因为并没有看到温度。
cd /usr/ports/misc/cpuid
sudo make deinstall
安装Ports成功步骤:
portsnap fetch update. #https://blog.csdn.net/richardfjf/article/details/106961150
You must run 'portsnap extract' before running 'portsnap update'.
/usr/ports/x11/yeahconsole/
mkdir: /usr/ports/x11: No space left on device
tar: could not chdir to '/usr/ports/x11/yeahconsole/'
1、如何只抓取 tarball?阅读全文
Google是与众不同的。它的独特不仅仅表现于革新的思维和充满创意的应用 (比如那个大堂里的地球模型),更在于其有别常规的IT策略……
加利福尼亚州山景城(Mountain View)Google公司(Google,下称Google)总部有一个43号大楼,该建筑的中央大屏幕上显示着一个与Google地球(Google Earth)相仿的世界地图,一个转动的地球上不停地闪动着五颜六色的光点,恍如罗马宫廷的千万烛灯,每一次闪动标志着地球的这个角落一名Google用户发起了一次新的搜索。
这同时意味着Google又一次满足了人们对未知信息的好奇与渴望。阅读全文
加利福尼亚州山景城(Mountain View)Google公司(Google,下称Google)总部有一个43号大楼,该建筑的中央大屏幕上显示着一个与Google地球(Google Earth)相仿的世界地图,一个转动的地球上不停地闪动着五颜六色的光点,恍如罗马宫廷的千万烛灯,每一次闪动标志着地球的这个角落一名Google用户发起了一次新的搜索。
这同时意味着Google又一次满足了人们对未知信息的好奇与渴望。阅读全文
这个框架看似有自己的独到的地方,譬如:Symfony的路由系统是比较不错的!
这个路由在对搜索引擎来说是有很多的好处,而结构和层次上要分明和清楚一些,我们完全可以借鉴它的精华
书籍:http://youa.baidu.com/item/a20ceb130b33b2eada61c10f
symfony
目录[隐藏]
概况
什么是框架(framework)?
什么是symfony?
symfony适合我吗?
阅读全文
这个路由在对搜索引擎来说是有很多的好处,而结构和层次上要分明和清楚一些,我们完全可以借鉴它的精华
书籍:http://youa.baidu.com/item/a20ceb130b33b2eada61c10f
symfony
目录[隐藏]
概况
什么是框架(framework)?
什么是symfony?
symfony适合我吗?
阅读全文