蓝牙4.0 ble协议栈难吗

蓝牙4.0 ble协议栈难吗,第1张

蓝牙40并不比10辐射大。因为辐射的大小,取决于发射功率的大校和版本的关系不大。比如,40的采用了1mw的功率,辐射就比10的采用了100mw的辐射校 同样的蓝牙标准,制造产品的时候,可以采用不同的功率。功率越大,距离越远。但一般的本身就是9977

//=================================[说明]=======================================/

//学生成绩管理

//文件名:maincpp

//------!!!!!!---------BOF-[程序代码开始]-------------------

#include<iostream>

#include<string>

using namespace std;

//=============<开始定义结构体>===================================================

struct combox

{

int num;

int mark;

string name;

combox next;

};

//=============<结束定义结构体>===================================================

//=============<开始定义Commonbox类>==============================================

//-----类体开始------------------------

class Commonbox

{

private:

combox head;

void Swap(combox ,combox ); //交换两个combox变量的数据域

void Print(combox ); //输出一combox指定的记录

combox Find(int); //查找条例条件的记录,并返回该记录的指针

public:

Commonbox()

{

head=NULL;

}

int ListCount(); //统计当前链表的记录总数,返回一个整数

void AddItem(int num, string name, int mark); //添加一条记录到表尾

void RemoveItem(int); //删除一条指定的记录

void List(); //列出当前链表中的所有记录

void Sort(); //对当前链表进行排序

void Search(int); //在当前链表查找指定记录并输出

float Average(); //计算平均成绩

};

//-----类体结束------------------------

//-----类成员函数开始----------------------------------

int Commonbox::ListCount() //统计当前链表的记录总数,返回一个整数

{

if (! head)return 0;

combox p=head;

int n=0;

while (p)

{

n++;

p=p->next;

}

return n;

}

void Commonbox::AddItem(int num, string name, int mark) //添加一条记录到表尾

{

if (! head)

{

head=new combox;

head->mark=mark;

head->num=num;

head->name=name;

head->next=NULL;

return;

}

combox t=head;

while (t && t->num!=num)

t=t->next;

if (t)

{

cout<<" *** 作失败:学号为"<<num<<"的记录已经存在!"<<endl;

return;

}

combox p=head;

while (p->next)p=p->next;

combox p1=new combox;

p1->num=num;

p1->mark=mark;

p1->name=name;

p1->next=NULL;

p->next=p1;

return;

}

void Commonbox::RemoveItem(int num) //删除一条指定的记录

{

combox t=Find(num);

if (! t)return;

combox p=head;

//如果要删除的记录位于表头

if (head==t)

{

head=head->next;

delete p;

cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;

return;

}

while (p->next!=t)p=p->next;

combox p1=p->next;

p->next=p1->next;

delete p1;

cout <<"成功删除学号为 "<<num<<" 的记录!"<<endl<<endl;

return;

}

void Commonbox::Print(combox p) //输出一combox指定的记录

{

cout<<p->num<<"\t\t";

cout<<p->name<<"\t\t";

cout<<p->mark<<endl;

return;

}

void Commonbox::List() //列出当前链表中的所有记录

{

if (ListCount()==0)

{

cout <<"错误:当前的列表为空!"<<endl;

return;

}

combox p=head;

cout<<"共有记录:"<<ListCount()<<endl;

cout<<"学号\t\t姓名\t\t分数"<<endl;

while (p)

{

Print(p);

p=p->next;

}

cout <<endl;

return;

}

void Commonbox::Search(int num) //在当前链表查找指定记录并输出

{

cout <<"Searching"<<endl;

combox p=Find(num);

if (p)

{

cout<<"学号\t\t姓名\t\t分数"<<endl;

Print(p);

}

cout <<endl;

}

combox Commonbox::Find(int num)

{

if (ListCount()==0)

{

cout <<"错误:当前的列表为空!"<<endl;

return NULL;

}

combox p=head;

while (p)

{

if (p->num==num)break;

p=p->next;

}

if (! p)

{

cout <<"错误:找不到该记录!\n";

return NULL;

}

return p;

}

void Commonbox::Swap(combox p1, combox p2) //交换两个combox变量的数据域

{

combox temp=new combox;

temp->num=p1->num;

temp->mark=p1->mark;

temp->name=p1->name;

p1->num=p2->num;

p1->mark=p2->mark;

p1->name=p2->name;

p2->num=temp->num;

p2->mark=temp->mark;

p2->name=temp->name;

}

void Commonbox::Sort() //对当前链表进行排序

{

cout <<"Sorting"<<endl;

if (ListCount()<2) return;

combox temp=NULL,p=NULL,p1=NULL,p2=NULL,k=NULL;

int n=ListCount(),i,j;

p=head;

for (i=1;i<n;i++)

{

k=p;

p1=p->next;

for (j=0;j<n-i;j++)

{

if (k->num > p1->num)

{

k=p1;

}

p1=p1->next;

}

if (p!=k)Swap(k,p);

p=p->next;

}

cout <<"Complete successfully!"<<endl<<endl;

return;

}

float Commonbox::Average() //计算平均成绩

{

if (ListCount()==0)

{

cout <<"错误:当前的列表为空!"<<endl;

return -1;

}

int sum=0,n=0;

combox p=head;

while (p)

{

sum += p->mark;

p=p->next;

n++;

}

return float(sum)/n;

}

//-----类成员函数结束----------------------------------

//=============<结束定义Commonbox类>==============================================

Commonbox student; //定义全局变量

int Menu()

{

cout <<"===========[主选单:]==========="<<endl;

int n=1,select=-1;

cout <<n++<<"输入学生成绩;"<<endl<<endl;

cout <<n++<<"按学号排序;"<<endl<<endl;

cout <<n++<<"按学号查找记录;"<<endl<<endl;

cout <<n++<<"删除由学号指定的记录;"<<endl<<endl;

cout <<n++<<"列出所有记录;"<<endl<<endl;

cout <<n++<<"计算平均成绩;"<<endl<<endl;

cout <<"0退出;"<<endl<<endl;

cout <<"[请选择(输入相应数字)]:";

cin >>select;

return select;

}

char Exit() //返回一个字符患,用于确认退出

{

char s;

cout<<"确定要退出程序吗[Y/N]:";

cin >>s;

return s;

}

void Input(int num, string name, int mark) //输入学生信息

{

cout <<"请输入 学号 姓名 分数:";

cin >>num;

if (num==-1)return;

cin >>name>>mark;

return;

}

void AddNew() //增加记录

{

int num=0,mark=0;

string name="";

cout<<endl<<"当输入的学号为-1时表示结束输入"<<endl;

Input(&num, &name, &mark);

while (num!=-1)

{

studentAddItem(num,name,mark);

Input(&num, &name, &mark);

}

return;

}

void DoFind() //按学号查找

{

int num;

cout<<endl<<"当输入的学号为-1时表示结束输入"<<endl;

do

{

cout <<"请输入要查找的学生的学号: ";

cin>>num;

if (num==-1)continue;

studentSearch(num);

}

while (num!=-1);

return;

}

void DoDelete() //删除记录

{

cout<<endl<<"当输入的学号为-1时表示结束输入"<<endl;

int num;

do

{

cout <<"请输入要删除的学生的学号:";

cin>>num;

if (num==-1)continue;

studentRemoveItem(num);

}

while (num!=-1);

return;

}

void ShowAverage() //输出平均数

{

float avr=studentAverage();

if (avr>0)

{

cout<<"共有记录:\t"<<studentListCount()<<endl<<endl;

cout<<"平均成绩:\t"<<avr<<endl<<endl;

}

return;

}

//-------<主函数开始>-------

int main()

{

cout<<"Welcome!\n学生成绩管理系统\nVer 101\nBy FondBoy\n\n";

int select;

char s;

while (1)

{

select=Menu();

switch (select)

{

case 0: //退出程序

s=Exit();

if (s=='y' || s=='Y')return 0;

break;

case 1: //输入学生成绩

AddNew();

break;

case 2: //按学号排序

studentSort();

break;

case 3: //按学号查找记录

DoFind();

break;

case 4: //删除由学号指定的记录

DoDelete();

break;

case 5: //列出所有记录

studentList();

break;

case 6: //输出平均成绩

ShowAverage();

break;

default:

cout<<"无效输入!"<<endl;

}

}

return 0;

}

//-------<主函数结束>-------

//------!!!!!!---------EOF-[程序代码结束]-------------------

因为有一些需要由客户自己指定的数据,如WIFI的网络名、密码等,不能固定在下载程序中,所以可以使用NV,由用户自己确定。

NV *** 作主要实际下面三个函数:osal_nv_item_init、osal_nv_write、osal_nv_read

关于cc2530NV读取的简单代码例子:

需要注意的是,虽然NV可写入地址范围从 0x0401 – 0x0FFF,但是一定要注意,地址应该是 %4=1,如:0x401为十进制1025,1025%4=1;不能是%4=0,至于为什么是%4,可以参照cc2530手册。

另外在某地址第一次读写时,结果可以使用!=SUCCESS来判断,但如果这个地址已经被初始化过并写入过数据,再一次被初始化过,如果还是用!=SUCCESS是不行的,因为此时即使没数据,但读取也是SUCCESS!

#define PATHS_ID 0x0601

#define WIFI_NAME 0x0A01

#define WIFI_PWD 0x0A29

void writeNV(){

osal_nv_item_init(PATHS_ID ,1,NULL);//每次写入前必须先初始化

uint8 sfcsh=0;

uint8 su_b=osal_nv_write(PATHS_ID ,0,1,&sfcsh);//写入标志

uint8 su_n= osal_nv_item_init(WIFI_NAME,40,NULL);

uint8 su_p= osal_nv_item_init(WIFI_PWD,40,NULL);

if((su_b==SUCCESS)&&(su_n==SUCCESS)&&(su_p==SUCCESS)){

HalLcdWriteString("init _ok", HAL_LCD_LINE_1 );

}

}

uint8 readNV(){

uint8 pshuju;

uint8 yuu =osal_nv_read(PATHS_ID,0,sizeof(pshuju),pshuju);

if(yuu==SUCCESS){

if( pshuju==0)

{

return 0;

}else

{

return 1;

}

}

以上就是关于蓝牙4.0 ble协议栈难吗全部的内容,包括:蓝牙4.0 ble协议栈难吗、求一个c++小程序源代码,要求200行以上,给100分,能用再加100、关于cc2530NV *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9747619.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存