CC2430 RNG改进
来源:互联网 发布:知乎live内容 免费 编辑:程序博客网 时间:2024/04/29 16:42
首先,要产生随机数,必须先给它提供一个名为“种子”的初始值。而且这个值最好是随机的,至少是伪随机的。在这里使用中频ADC采样随机的RF接收信号作为做种子。
注意到,播种的过程中,将16位的种子分两次写入RNDL,高字节将自动移入RNDH,此过程即完成播种。若往RNDH中写值时,会触发计算CRC16,所以在这里不能对RNDH赋值。
所以我认为《Zigbee技术实践教程》上给的程序有问题,其程序如下:
主函数如下:
void main(void){
BYTE randomChar;
UINT8 i,rand; // Random Sequence
initRandom();//初始化相应的组件
lcdUpdate((char*)"Random text:", (char*)"");
LED1 = LED3 = LED_OFF;
halInitRandomGenerator();//播种过程有问题?
while( 1 ){
// Read random register
for(i = 0; i < LINE_SIZE; i++) // line_size=14
{
GET_RANDOM_BYTE(rand);//得到一个随机数的高8位给rand(字节型)
// randChar is equal a random value between 'a' and 'z'
// in the ascii table
//randomChar = 'a' + (rand % ('z' - 'a'));//使用这条语句,随机数会以字母的形式表现
randomChar = rand;//随机数会以rand对应的ASCII码形式表现,由于0~31是控制字符,可能会出现乱码
lcdUpdateChar(LINE2, i, randomChar);
halWait(0x0F);
}
halWait(255);
halWait(255);
}
}
原播种函数:有问题?
void halInitRandomGenerator(void)
{
BYTE i;
// turning on power to analog part of radio
RFPWR = 0x04;//射频模块的模拟部分上电
// waiting for voltage regulator.
while( RFPWR & 0x10 );//等待电压调节
// Turning on 32 MHz crystal oscillator
SET_MAIN_CLOCK_SOURCE(CRYSTAL);//32M晶振
// Turning on receiver to get output from IF-ADC
ISRXON;//打开和校准频率合成器
halWait(1);
ENABLE_RANDOM_GENERATOR();//打开为普通模式,RCTRL[1:0]=00
for(i = 0 ; i < 32 ; i++)
{
RNDH = ADCTSTH;//将RF接收的随机信号采样之后,给RNDH会触发计算CRC16,应该是给RNDL
CLOCK_RANDOM_GENERATOR();//这里为什么要产生一个随机数,而且要进行32次?
}
return;
}
原函数的播种为什么要这么做,不明白,我认为它有问题,如果有高手能解释一下,感激不尽!
所以我将播种过程直接改成这样:
void halInitRandomGenerator(void)
{
BYTE i;
RFPWR = 0x04;
while( RFPWR & 0x10 );
Turning on 32 MHz crystal oscillator
SET_MAIN_CLOCK_SOURCE(CRYSTAL);
ISRXON;
halWait(1);
ENABLE_RANDOM_GENERATOR();
RNDL = ADCTSTH;
RNDL = ADCTSTL;
return;
}
这样RF接收的随机信号的16位采样值,写入到LFSR中,之后通过调用一次get_random_byte()即可获得一个8位随机数。
- CC2430 RNG改进
- CC2430 joystick ok键及方向键改进
- opencv RNG
- rng.uniform
- RNG类
- Zigbee休眠(cc2430)
- CC2430 串口使用详解
- CC2430 Joystick硬件说明
- CC2430 串口通信UART
- CC2430/CC2431/CC2520/CC2530
- cc2430 外部中断
- CC2430 串口使用详解
- ZigBee2006 CC2430 按键流程
- CC2430问题日记
- cc2430的中文资料
- opencv函数之RNG
- Opencv中RNG
- (转)随机数产生器RNG
- 1.XML 简介
- 绍程序中thread.sleep()的作用,作者写的相当的通俗易懂,不得不转
- PHP文件上传ini.php
- 2.XML 的用途
- typedef void (*Fun) (void)
- CC2430 RNG改进
- 二叉树的深度(递归+非递归)
- JQuery实现悬浮层
- 稀疏快速傅里叶变换(SFT)算法
- 利用prototype属性,对JavaScript对象进行功能扩展,比如数组对象Array,String等
- 心理学角度解读魔兽世界
- 后台看job 的运行 情况
- 关于C++ const 的全面总结
- 分析游戏设计中的色彩心理学