从拿到开发板到现在已经过去十来天了,经过一堆杂事、数番折腾和各种挫折,经历了肉体的劳苦奔波和精神的打击折磨,终于解决了前一阶段的大部
分问题,可以开始正是实验和学习开发板了!现在我的心情是十分的冲动,今夜阳光明媚,今夜鸟语花香···
首先我要代表我姥爷及我个人感谢论坛里关注我的帖子或者提出了友好建议的热心坛友们,尤其是管理员soso姐的热忱相助!正式开始学习后,肯定还
会有更多的问题要请教大家,还望各位能继续关注,不吝赐教!
之前也发过两篇帖子,但都是表达拿到板子后的喜悦心情,并未涉及技术和知识,略有滥竽充数之嫌,还望诸位谅解!现在,解决了驱动问题后,板子
可以正常运行程序了,后面的心得体会帖子都会是本人的学习经过和体验,而且会写的尽量详细、易懂。但本人也先坦白,自己真正接触单片机也才月把时间,连
C语言都没看完,是一个标准的菜鸟(而且是一个入门过程十分坎坷、处处碰壁、祸不单行、好事多磨的菜鸟),学习的过程可能会因为比较吃力,以及课程、考
试等原因而有些慢,甚至错漏百出,还望大家多多包涵并给予指教。但我觉得,也许自己作为新手,一切从头学起,这个过程正好可以为同是对此感兴趣的入门
者提供一个借鉴和参考(但愿不要是误导···)。我也会尽量详细、全面的写出自己的思考和体会,以便和大家交流讨论。
虽然可以实验了,心情很激动,但是却有些迷茫,不知道从何学起。在论坛里看了一些上期和本期试用者们发表的心得体会,发现自己基础实在太薄弱
,根本写不出那样有见解的分析和扩展研究。想来想去,只好从光盘里附带的Sensor Monitor例程入手,仔仔细细的把这个历程研究透了再说。这样虽然有些操
之过急,但也不失为一种快刀斩乱麻的办法吗,况且,后面的事情还很多,也不允许我按部就班、步步为营的进行实验了。
主意既定,在下就闲话少说,先上几张例程的实际效果图片:
下面就是我花了两天时间对例程源代码demo_AP.c的主程序main的解读,和大家分享一下。本来打算一次性详细解释的,但开始没多久就发现此非一日
之寒也,因此只能先解释这一部分,更详细的解释必须要另开篇幅了。里面也提出了一些疑问,希望各位阅读后能帮忙解释一下,多谢!
在经过几段代码的分析后,我发现首先应该弄懂它的数据格式定义,因为这是整个代码的基础,不搞清楚的话对各种常量、变量、参数的理解都会有障
碍。数据格式的定义在BSP_MSP430_DEFS_H文件中(抱歉,应该是bsp_msp430_def.h文件,为省去切换输入法打字的麻烦,就直接从头文件里复制了,下面都是
这么做的,呵呵):
typedef signed char __bsp_int8_t__;
typedef signed short __bsp_int16_t__;
typedef signed long __bsp_int32_t__;
typedef unsigned char __bsp_uint8_t__;
typedef unsigned short __bsp_uint16_t__;
typedef unsigned long __bsp_uint32_t__;
其它的格式定义头文件也很重要,解读的过程中需要经常查阅,但这里先只列出这些最基本的,以后要用到其它定义的话会再说明。
#include "bsp.h"
#include "mrfi.h"
#include "bsp_leds.h"
#include "bsp_buttons.h"
#include "nwk_types.h"
#include "nwk_api.h"
#include "nwk_frame.h"
#include "nwk.h"
#include "msp430x22x4.h"
#include "vlo_rand.h"
//这些是主函数中调用的头文件,下面的解读经常需要在这些文件里翻来找去,当然,其实这些文件还要涉及到其他的头文件,就更麻烦了···
//以下是本文件中的宏定义和函数声明,等遇到了再解释
#define MESSAGE_LENGTH 3
void TXString( char* string, int length );
void MCU_Init(void);
void transmitData(int addr, signed char rssi, char msg[MESSAGE_LENGTH] );
void transmitDataString(char addr[4],char rssi[3], char msg[MESSAGE_LENGTH]);
void createRandomAddress();
//终端输出信息
const char splash[] = {"\r\n--------------------------------------------------\r\n ****\r\n **** eZ430-RF2500\r\n
******o**** Temperature Sensor Network\r\n********_///_**** Copyright 2007\r\n ******/_//_/***** Texas Instruments
Incorporated\r\n ** ***(__/***** All rights reserved.\r\n ********* Version 1.02\r\n *****\r\n ***\r\n------
--------------------------------------------\r\n"};
__no_init volatile int tempOffset @ 0x10F4; // 请高手指点,这一句什么意思?我知道是后面用语文读数据转换计算的偏差值,但为什么要设置成@ 0x10F4这个数值呢?
__no_init volatile char Flash_Addr[4] @ 0x10F0; // 为什么可以随机设置Flash地址?
// 为连接数量的最大可能值保留空间
static linkID_t sLID[NUM_CONNECTIONS];
static uint8_t sNumCurrentPeers;
// 回调处理函数
static uint8_t sCB(linkID_t);
// 主工作循环信息
static uint8_t sPeerFrameSem;
static uint8_t sJoinSem;
static uint8_t sSelfMeasureSem;
// 温度数据模式默认设置,默认为华氏温度数值
char verboseMode = 1;
char degCMode = 0;
[
本帖最后由 wwh19910609 于 2011-5-31 11:54 编辑 ]