- 博客(48)
- 收藏
- 关注
转载 Channel、PANID、发射功率及其它参数
现对z-stack里几个网络参数的设置以及如何获取总结一下。信道配置:Zigbee在3个频段定义了27个物理信道:868MHz频段中定义了1个信道,915MHz频段中定义了2个信道,信道间隔为2MHz,2.4GHz频段上定义了16个信道,信道间隔为5MHz.信道编号中心频率/MHz
2013-04-23 20:34:53 1453
转载 ZStack--临界资源管理
先看一个临界区代码保护的例子: HAL_ENTER_CRITICAL_SECTION(intState); events = activeTask->events; activeTask->events = 0; //清楚任务的事件 HAL_EXIT_CRITICAL_SECTION(intState);其中:中断宏定义如下#def
2013-01-31 23:47:10 1214
转载 ZigBee各版本规范比较
ZigBee各版本规范比较ZigBee是ZigBee联盟建立的技术标准,它是一种工作在900MHZ和2.4GHZ频段的新兴无线网络技术,具有中等通讯距离(10米到数百米),比较灵活经济的通讯速率(40Kbps到250Kbps),并且有星状,网状(MESH),树状等多种网络拓扑,低的功耗等特点,所以在当今无线通讯技术和无线网络技术领域中占有比较重要的地位。第一个ZigBee协议栈规范于200
2013-01-15 13:26:55 908
原创 PAN_ID
ZigBee协议使用一个14位的个域网标志符(PAN ID)来标识一个网络。ZStack允许用两种方式配置PAN ID,当ZDAPP_CONFIG_PAN_ID值不设置为0xFFFF时,那么设备建立或加入网络的PAN ID由ZDAPP_CONFIG_PAN_ID指定;如果设置ZDAPP_CONFIG_PAN_ID为0xFFFF,那么设备就将建立或加入一个“最优”的网络。因此您的PAN ID重启后就
2012-11-24 16:12:05 2484
原创 mmap()函数系统调用
mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。注:实际上,mmap()系统调用并不是完全为了用于共享内存而设计的。它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件的操作。而Posix或系统V的共享内存IPC则纯粹用于共享目的,
2012-11-04 21:25:44 710
原创 request_mem_region() -- I/O内存申请
request_mem_region() -- 将起始地址为[start, start+n-1]的资源插入根资源iomem_resource中。参数start是I/O内存资源的起始物理地址(是CPU的RAM物理地址空间中的物理地址),参数n指定I/O内存资源的大小。#define request_mem_region(start, n, name) \ __request
2012-11-04 21:02:58 1004
原创 传值&传引用&传指针
相关概念c++三种传递参数方式传参数的值(称值传递,简称传值),传参数的地址(称地址传递,简称为传址),和引用传递(称为传引用),相应的函数传值调用,传址调用和传引用调用形参、实参 函数定义时参数表中的参数称为形式参数,简称形参;函数调用时参数表中的参数称为实际参数,简称实参。实参和形参之间的数据传递称为形实结合
2012-11-01 10:21:39 539
原创 线程与进程的区别
线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间;(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源(3)线程是处理器调度的基本单位,但进程不是.4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,
2012-10-28 21:30:09 448
原创 不可剥夺内核和可剥夺内核的比较
不可剥夺型内核:要求每个任务主动放弃cpu。各个任务彼此合作共享一个cpu,异步事件还是由中断服务来处理的。中断服务可使一个高优先级的任务由挂起变为就绪状态,但是中断服务后,使用权就回到了被中断了的那个任务,也就是回到了原来的任务了,直到该任务主动放弃cpu的使用权,此时高优先级的任务才能或得cpu使用权。其优点:1:响应中断快;2:几乎不需要使用信号量来保护共享数据,当前运行着的任务占用着cpu
2012-10-28 21:23:16 3157
原创 C++笔试面试题
1.new 、 delete 、 malloc 、 free 关系delete 会调用对象的析构函数 , 和 new 对应 free 只会释放内存, new 调用构造函数。 malloc 与 free 是 C++/C 语言的标准库函数, new/delete 是 C++ 的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用 maloc/free 无法满足动态对象的要
2012-10-28 20:59:13 847
原创 交换排序(冒泡排序和快速排序)
交换排序主要是根据记录的关键字的大小,将记录交换来进行排序的。交换排序的特点是:将关键字值较大的记录向序列的后部移动,关键字较小的记录向前移动。这里介绍两种交换排序方法,它们是冒泡排序和快速排序。一.冒泡排序 将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其
2012-10-28 17:07:35 653
原创 Thumb指令与ARM指令的时间效率和空间效率关系
与ARM指令集相比较,Thumb指令集中的数据处理指令的操作数仍然是32位,指令地址也为32位,但Thumb指令集为实现16位的指令长度,舍弃了ARM指令集的一些特性,如大多数的Thumb指令是无条件执行的,而几乎所有的ARM指令都是有条件执行的;大多数的Thumb数据处理指令的目的寄存器与其中一个源寄存器相同。由于Thumb指令的长度为16位,即只用ARM指令一半的位数来实现同样的功能,所以
2012-10-28 16:18:02 2982
原创 uC/OS-II内核架构解析(7)---uC/OS-II应用开发
1. 应用开发步骤 (1) 包含uC/OS-II的总头文件includes.h; (2) 定义任务栈的大小和任务栈; (3) 分配任务优先级; (4) 实现任务功能; (5) 调用OSInit()函数初始化uC/OS-II的数据结构; (6) 创建用户任务,启动uC/OS-II;2. 编写任务函数 用户任务函数必须是无限循环
2012-10-27 22:19:32 601
原创 uC/OS-II内核架构解析(6)---uC/OS-II内存管理
1. memPart基本原理 uC/OS-II根据需要将内存空间分成多个内存分区,每个内存分区由具有相同大小的内存块(Block)组成。主要包含在C源文件OS_MEM.C中。OS_EXT OS_MEM OSMemTbl[OS_MAX_MEM_PART];OS_EXT OS_MEM *OSMemFreeList;memPart控制块结构体: typedef struct os
2012-10-27 22:17:23 728
原创 uC/OS-II内核架构解析(5)---uC/OS-II通信与同步
1. 消息邮箱Mbox Mbox用于多任务间单一消息的传递,uC/OS-II使用ECB管理Mbox的基本信息,OSEventPtr指向创建Mbox时指定的内存空间。事件的创建由具体的事件管理程序实现。主要包含在C源文件OS_MBOX.C中。OS_EVENT *OSMboxCreate(void *msg);void *OSMboxPend(OS_EVENT *pevent,
2012-10-27 22:06:42 1740
原创 uC/OS-II内核架构解析(4)---uC/OS-II任务管理
1. C可执行代码结构 (1)代码段.text:存放CPU执行的机器指令,通常.text是可共享且只读的。 (2)数据段.data:.rodata(常量数据)、.rwdata(已初始化全局变量、静态变量)。 (3)未初始化数据段.bss:未初始化的全局变量、静态变量。 (4)栈.stack:存放函数参数、局部变量及任务切换时的上下文。 (5)
2012-10-27 22:05:33 783
原创 uC/OS-II内核架构解析(3)---uC/OS-II系统核心
主要包含在C源文件OS_CORE.C中。1. uC/OS-II任务调度(1) uC/OS-II调度算法 uC/OS-II采用基于优先级的调度算法,总是选择当前处于就绪状态的优先级最高的任务进行调度。uC/OS-II是可抢占性的强实时性OS,在完成中断后允许进行新的任务调度。 uC/OS-II有两种调度方式:任务级任务调度、中断级任务调度。(2) 任务就绪表
2012-10-27 21:59:16 947
原创 uC/OS-II内核架构解析(2)---uC/OS-II基本介绍
1. uC/OS-II文件结构2. uC/OS-II组成部分 uC/OS-II大致可以分成系统核心(包含任务调度)、任务管理、时间管理、多任务同步与通信、内存管理、CPU移植等部分。 (1) 核心部分(OSCore.c) :uC/OS-II处理核心,包括初始化、启动、中断管理、时钟中断、任务调度及事件处理等用于系统基本维持的函数。 (2) 任务管理(OSTas
2012-10-27 21:41:16 1031
原创 uC/OS-II内核架构解析(1)---嵌入式RTOS
1. 嵌入式系统基本模型2. RTOS设计原则 采用各种算法和策略,始终保持系统行为的可预测性。即在任何情况下,在系统运行的任何时刻,OS的资源配置策略都能为争夺资源(包括CPU、内存、网络带宽等)的多个实时任务合理地分配资源,使每个实时任务的实时性要求都能得到满足。3. GPOS与RTOSGPOS:注重每次执行的平均响应时间,而不是某次特定执行的响应时间。RTO
2012-10-27 21:39:48 831
转载 一个五位数字ABCDE*4=EDCBA,这五个数字不重复,求出这个五位数字
main(){for (int i=10001; i100000; i++) { int right= 0;int left = i; while ( left!= 0 )/*求右边的值*/{ right = right* 10+ left % 10;//这个循环的目的是求出与 如果left = ABCDE;则right = EDCBA;
2012-10-08 20:30:54 1714
原创 UDP中使用connect
UDP协议中是否可以使用connect,.整理一下.1:UDP中可以使用connect系统调用2:UDP中connect操作与TCP中connect操作有着本质区别.TCP中调用connect会引起三次握手,client与server建立连结.UDP中调用connect内核仅仅把对端ip&port记录下来.3:UDP中可以多次调用connect,TCP只能调用一次connect.UDP多次调用co
2012-10-04 19:50:23 2194
原创 fread函数和fwrite函数
fread函数和fwrite函数1.函数功能 用来读写一个数据块。2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp);3.说明 (1)buffer:是一个指针,对fread来说,它是读入数据的存放地址。对fwrite来说,是要输出数据的地址。 (2)size:
2012-09-07 17:00:48 2423
原创 如何注释代码
1. Comment each level(每个级别的注释有统一的风格)注释每一个代码块,并且在各个级别的代码块上,要使用统一的注释方法。例如:对于类,应包含简单的描述、作者以及最近的更改日期对于方法,应包含目的的描述、功能、参数以及返回值使用统一的注释规则对于一个团队是非常重要的。当然,更加推荐使用注释的约定和工具(例如,C#的XML或Java的Javadoc),它们会是注释
2012-09-03 10:16:50 762
原创 浅谈C++中内存分配、函数调用和返回值问题
在谈述函数调用和返回值问题之前,先来看看C++中内存分配的问题。C++编译器将计算机内存分为代码区和数据区,很显然,代码区就是存放程序代码,而数据区则是存放程序编译和执行过程出现的变量和常量。数据区又分为静态数据区、动态数据区,动态数据区包括堆区和栈区。以下是各个区的作用:(1)代码区:存放程序代码;(2)数据区 a.静态数据区: 在编译器进行编译的时候就为该变量分配的内存
2012-08-30 14:56:33 742
转载 无状态地址自动配置
IPv6同时定义了无状态和有状态地址自动配置机制。有状态地址自动配置使用DHCPv6来给主机动态分配IPv6地址,无状态地址自动配置通过NDP来实现。在无状态地址自动配置中,主机通过接收链路上的路由器发出的RA消息,结合接口的标识符而生成一个全球单播地址。1.路由器发现路由器发现是指主机定位本地链路上的路由器和确定其配置信息的过程,主要包含以下3方面内容:(1)路由器发现(Router
2012-08-17 14:47:36 15957
转载 c语言字符串函数详解
c语言字符串函数详解 void *memset(void *dest, int c, size_t count); 将dest前面count个字符置为字符c. 返回dest的值. void *memmove(void *dest, const void *src, size_t count); 从src复制count字节的字符到dest. 如果src和dest出现重
2012-08-10 08:46:19 813
转载 typedef函数指针的用法
在网上搜索函数指针,看到一个例子。开始没看懂,想放弃,可是转念一想,这个用法迟早要弄懂的,现在多花点时间看懂它,好过以后碰到了要再花一倍时间来弄懂它。其实很多时候都是这样,如果每次到难一点的内容,总想着下次我再来解决它,那就永远也学不到东西。后面那个例子加了注释,是我对这种用法的理解,希望对新手有所帮助。 进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点
2012-08-06 09:59:13 422
转载 C语言链表的建立、插入和删除
- 链表的建立、插入和删除数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性。但数组也同样存在一些弊病。如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一。我们只能够根据可能的最大需求来定义数组,经常会造成一定存储空间的浪费。我们希望构造动态的数组,随时可以调整
2012-07-31 09:37:22 1565
转载 container_of 理解
问题:如何通过结构中的某个变量获取结构本身的指针???关于container_of见kernel.h中:/*** container_of - cast a member of a structure out to the containing structure* @ptr: the pointer to the member.* @type: the t
2012-07-28 15:27:37 372
转载 C指针进阶-函数指针、函数名做形参
函数名与函数指针一 通常的函数调用 一个通常的函数调用的例子://自行包含头文件void MyFun(int x); //此处的申明也可写成:void MyFun( int );int main(int argc, char* argv[]){ MyFun(10); //这里是调用MyFun(10);函数 return
2012-07-20 17:57:22 1113
原创 memcmp函数
原型:extern int memcmp(void *buf1, void *buf2, unsigned int count); 用法:#include 功能:比较内存区域buf1和buf2的前count个字节。 说明: 当buf1buf2时,返回值>0 举例: // memcmp.c #include #include main() { char *s1=
2012-07-18 17:23:08 623
原创 union的用法
联合(union)在C/C++里面见得并不多,但是在一些对内存要求特别严格的地方,联合又是频繁出现,那么究竟什么是联合、怎么去用、有什么需要注意的地方呢?就这些问题,我试着做一些简单的回答,里面肯定还有不当的地方,欢迎指出!1、什么是联合? “联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入
2012-07-18 10:22:12 745
原创 几种开放源码的TCPIP协议栈概述--LwIP,uIP,TinyTcp和uC/IP
1、BSD TCP/IP协议栈 BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP 栈)是BSD栈派生的。这是因为BSD栈在BSD许可协议下提供了这些专业栈的雏形,BSD许用证允许BSD栈以修改或未修改的形式结合这些专业栈的代码而无须向创建者付版税。同时,BSD也是许多TCP/IP协议中的创新(如广域网中饿拥塞控制和避免)的开始点。2、uC
2012-07-05 09:17:53 2741
原创 uip协议栈分析(2)
uip的内存管理方法: 内存管理的实现在memb.c/memb.h里。 这两个文件负责uip的内存块的管理,内存块是由MEMB()宏声明。内存从声明的内存块里用memb_alloc()分配,用memb_free()释放。因为命名空间的冲突,每个C模块只能有一个MEMB()宏声明。先看memb.h文件:#define MEMB_CONCAT2(s1, s2) s1##s2
2012-07-04 18:33:34 3300
原创 uip协议栈分析(1)
Uip源代码可以从http://www.sics.se/~adam/uip/index.php/Main_Page上下载得到。 Uip的源码目录结构: D:.├─apps│ ├─dhcpc│ ├─hello-world│ ├─resolv│ ├─smtp│ ├─telnetd│ ├─webclient│ └─webserver│
2012-07-04 18:32:36 8740 4
原创 Zigbee协议规范--数据传输原语流图及说明
网络层数据流程原语说明1.数据发送部分原语APSDE-DATA.request(DstAddrMode, //目的地址寻址模式,0x01=16位短地址DstAddress, //ASDU目的实体设备地址DstEndPoint, //ASDU目的实体的断点地址ProfiledId, //该帧应配置的文件标识ClusterId, //间接寻址时绑定操作中所用对象的标识S
2012-07-03 18:16:13 2497
转载 函数传值 传地址 传引用的区别
传值, 是把实参的值赋值给行参 那么对行参的修改,不会影响实参的值 传地址 是传值的一种特殊方式,只是他传递的是地址,不是普通的如int 那么传地址以后,实参和行参都指向同一个对象 传引用 真正的以地址的方式传递参数 传递以后,行参和实参都是同一个对象,只是他们名字不同而已
2012-06-28 23:02:42 1561
原创 TCP协议三次握手/四次分手过程分析
TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急
2012-06-24 22:26:45 1020
原创 linux如何进入单用户模式
linux进入单用户模式的方法是有很多的。进入单用户模式的前提是系统引导器能正常工作。下面以GRUB启动为例说明进入单用户模式的方法。在GRUB启动菜单里有''a”, “e ”, “c” 三个操作按键,使用这三个按键均可以进入单用户模式。 1、使用 "a" 操作按键进入单用户模式。 这是进入单用户模式最快速的方法。 在GRUB启动菜单里使用 a 操作按键编辑kernel
2012-06-23 15:49:10 17522 1
原创 linux system()函数
system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码:#include #include #include #include int system(const char * cmdstring){ pid_t pid; int status; if(cmdstring == NULL)
2012-06-19 09:42:32 602
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人