2017-11-28 34页 doc 171KB 136阅读
is_062212
暂无简介
void main(void) 2. { 3. uint8 appMode = LIGHT; 4. 5. // Config basicRF 6. basicRfConfig.panId = PAN_ID; //网络地址,0x2007 7. basicRfConfig.channel = RF_CHANNEL; //通道,25 // 2.4 GHz RF channel 8. basicRfConfig.ackRequest = TRUE; //是否应当, 1 9. #ifdef SECURITY_CCM 10. basicRfConfig.securityKey = key; 11. #endif 12. 13. // Initalise board peripherals 14. /* 15. * 一些GPIO口初始化,包括以下LEDs和Buttons初始化 16. * 将LEDs(P0_0、P1_1、P1_4、P0_1)设置为输出、Buttons(P0_1)设置为输入模式且为 三态输入模式 17. */ 18. halBoardInit(); 19. /* 20. * 多方向按键初始化,不用管 21. */ 22. halJoystickInit(); 23. 24. // Initalise hal_rf 硬件抽象层rf初始化 25. if(halRfInit()==FAILED) { 26. HAL_ASSERT(FALSE); 27. } 28. 29. // Indicate that device is powered 将按键1设置为高电平,并将状态设置为1 30. /* 31. switch (id) 32. { 33. case 1: HAL_LED_SET_1(); break; 34. case 2: HAL_LED_SET_2(); break; 35. case 3: HAL_LED_SET_3(); break; 36. case 4: HAL_LED_SET_4(); led4State=1; break; 37. 38. default: break; 39. } 40. 41. #define HAL_LED_SET_1() MCU_IO_SET_HIGH(HAL_BOARD_IO_LED _1_PORT, HAL_BOARD_IO_LED_1_PIN) 42. #define HAL_LED_SET_2() MCU_IO_SET_HIGH(HAL_BOARD_IO_LED _2_PORT, HAL_BOARD_IO_LED_2_PIN) 43. #define HAL_LED_SET_3() MCU_IO_SET_HIGH(HAL_BOARD_IO_LED _3_PORT, HAL_BOARD_IO_LED_3_PIN) 44. #define HAL_LED_SET_4() MCU_IO_SET_HIGH(HAL_BOARD_IO_LED _4_PORT, HAL_BOARD_IO_LED_4_PIN) 45. 46. #define HAL_BOARD_IO_LED_1_PORT 1 // Green 47. #define HAL_BOARD_IO_LED_1_PIN 0 48. #define HAL_BOARD_IO_LED_2_PORT 1 // Red 49. #define HAL_BOARD_IO_LED_2_PIN 1 50. #define HAL_BOARD_IO_LED_3_PORT 1 // Yellow 51. #define HAL_BOARD_IO_LED_3_PIN 4 52. #define HAL_BOARD_IO_LED_4_PORT 0 // Orange 53. #define HAL_BOARD_IO_LED_4_PIN 1 54. */ 55. halLedSet(1); 56. 57. // Print Logo and splash screen on LCD 58. utilPrintLogo("Light Switch"); //有关LCD的函数不管 59. 60. // Wait for user to press S1 to enter menu 61. while (halButtonPushed()!=HAL_BUTTON_1); 62. halMcuWaitMs(350); 63. halLcdClear(); //lcd清屏,不用管 64. 65. // Set application role 66. appMode = appSelectMode(); //模式选择 67. halLcdClear(); 68. 69. // Transmitter application 70. if(appMode == SWITCH) { 71. // No return from here 72. appSwitch(); 73. } 74. // Receiver application 75. else if(appMode == LIGHT) { 76. // No return from here 77. appLight(); 78. } 79. // Role is undefined. This code should not be reached 80. HAL_ASSERT(FALSE); 81. } hal_board.c——halBoardInit()函数实现 [cpp] view plaincopyprint? 1. void halBoardInit(void) 2. { 3. //mcu初始化,设置系统时钟 4. halMcuInit(); 5. 6. // LEDs 7. #ifdef SRF05EB_VERSION_1_3 8. // SmartRF05EB rev 1.3 has only one accessible LED 9. MCU_IO_DIR_OUTPUT(HAL_BOARD_IO_LED_1_PORT, HAL_BOARD_IO_LED_1_PIN); 10. HAL_LED_CLR_1(); 11. #else 12. /* 13. * LEDs(P0_0、P1_1、P1_4、P0_1)设置为输出 14. */ 15. MCU_IO_DIR_OUTPUT(HAL_BOARD_IO_LED_1_PORT, HAL_BOARD_IO_LED_1_PIN); 16. HAL_LED_CLR_1(); 17. MCU_IO_DIR_OUTPUT(HAL_BOARD_IO_LED_2_PORT, HAL_BOARD_IO_LED_2_PIN); 18. HAL_LED_CLR_2(); 19. MCU_IO_DIR_OUTPUT(HAL_BOARD_IO_LED_3_PORT, HAL_BOARD_IO_LED_3_PIN); 20. HAL_LED_CLR_3(); 21. MCU_IO_DIR_OUTPUT(HAL_BOARD_IO_LED_4_PORT, HAL_BOARD_IO_LED_4_PIN); 22. HAL_LED_CLR_4(); 23. #endif 24. 25. // Buttons 26. /* 27. * Buttons(P0_1)设置为输入模式且为三态输入模式 28. */ 29. MCU_IO_INPUT(HAL_BOARD_IO_BTN_1_PORT, HAL_BOARD_IO_BTN_1_PIN, MCU_IO_TRI STATE); 30. 31. // Joystick push input 多方向按键 三态输入模式 32. MCU_IO_INPUT(HAL_BOARD_IO_JOY_MOVE_PORT, HAL_BOARD_IO_JOY_MOVE_PIN, \ 33. MCU_IO_TRISTATE); 34. 35. // Analog input adc模拟,设置对应引脚为外部功能 36. MCU_IO_PERIPHERAL(HAL_BOARD_IO_JOYSTICK_ADC_PORT, HAL_BOARD_IO_JOYSTICK_ ADC_PIN); 37. 38. //lcd初始化 39. halLcdSpiInit(); 40. halLcdInit(); 41. 42. /* 43. * halIntOn:开启全局中断-->HAL_INT_ON-->st( EA = 1; ) 44. */ 45. halIntOn(); 46. } hal_rf.c——halRfInit()函数实现 [cpp] view plaincopyprint? 1. uint8 halRfInit(void) 2. { 3. // Enable auto ack and auto crc 4. /* 5. * #define FRMCTRL0 XREG( 0x6189 ) 6. * #define XREG(addr) ((unsigned char volatile __xdata *) 0)[addr] 7. * 即往寄存器FRMCTRL0(0x6189)写数据 8. * #define AUTO_ACK 0x20 9. * #define AUTO_CRC 0x40 10. */ 11. FRMCTRL0 |= (AUTO_ACK | AUTO_CRC); 12. 13. // Recommended RX settings 14. /* 15. * #define TXFILTCFG XREG( 0x61FA ) 16. * #define AGCCTRL1 XREG( 0x61B2 ) 17. * #define FSCAL1 XREG( 0x61AE ) 18. */ 19. TXFILTCFG = 0x09; //调整AGC目标值 20. AGCCTRL1 = 0x15; //设置 TX 抗混叠过滤器以获得合适的贷款 21. FSCAL1 = 0x00; //和默认设置比较,降低VCO泄露大约3dB。推荐默认设置以 获得最佳 EVM 22. 23. // Enable random generator -> Not implemented yet 24. 25. // Enable CC2591 with High Gain Mode 26. halPaLnaInit();//在CC2530中此函数没有做任何操作 27. 28. // Enable RX interrupt 使能接收中断 29. /* 30. * RFIRQM0 |= BV(6); 31. * IEN2 |= BV(0); 32. * #define BV(n) (1 << (n)) 33. */ 34. halRfEnableRxInterrupt(); 35. 36. return SUCCESS; 37. } light_switch.c——appSwitch()、appLight()函数实现 [cpp] view plaincopyprint? 1. static void appSwitch() 2. { 3. //lcd有关操作不用管 4. halLcdWriteLine(HAL_LCD_LINE_1, "Switch"); 5. halLcdWriteLine(HAL_LCD_LINE_2, "Joystick Push"); 6. halLcdWriteLine(HAL_LCD_LINE_3, "Send Command"); 7. #ifdef ASSY_EXP4618_CC2420 //没有定义 8. halLcdClearLine(1); 9. halLcdWriteSymbol(HAL_LCD_SYMBOL_TX, 1); 10. #endif 11. 12. pTxData[0] = LIGHT_TOGGLE_CMD; // #define LIGHT_TOGGLE_CMD 0 //被传输 的开关命令 13. 14. // Initialize BasicRF 15. basicRfConfig.myAddr = SWITCH_ADDR; //#define SWITCH_ADDR 0x2520 //开关 节点的地址 16. if(basicRfInit(&basicRfConfig)==FAILED) { 17. HAL_ASSERT(FALSE); 18. } 19. 20. // Keep Receiver off when not needed to save power 关闭接收 21. basicRfReceiveOff(); 22. 23. // Main loop 24. while (TRUE) { 25. if( halJoystickPushed() ) { //判断多方向按键是否按下 26. 27. basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);//发送 命令 28. 29. // Put MCU to sleep. It will wake up on joystick interrupt 30. halIntOff(); 31. halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global 32. // interrupt enable 33. halIntOn(); 34. 35. } 36. } 37. } [cpp] view plaincopyprint? 1. static void appLight() 2. { 3. halLcdWriteLine(HAL_LCD_LINE_1, "Light"); 4. halLcdWriteLine(HAL_LCD_LINE_2, "Ready"); 5. 6. #ifdef ASSY_EXP4618_CC2420 7. halLcdClearLine(1); 8. halLcdWriteSymbol(HAL_LCD_SYMBOL_RX, 1); 9. #endif 10. 11. // Initialize BasicRF 12. basicRfConfig.myAddr = LIGHT_ADDR; //#define LIGHT_ADDR 0xBEEF //电灯 节点的地址 13. if(basicRfInit(&basicRfConfig)==FAILED) { 14. HAL_ASSERT(FALSE); 15. } 16. //使能接收 17. basicRfReceiveOn(); 18. 19. // Main loop 20. while (TRUE) { 21. while(!basicRfPacketIsReady());//检查是否收到一个新数据包 22. 23. if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)>0) { //收到的数 据复制到pRxData中 24. if(pRxData[0] == LIGHT_TOGGLE_CMD) { 25. halLedToggle(1); //将其对应的LED1设置相反电平 26. } 27. } 28. } 29. } basic_rf.h——basicRfCfg_t结构体定义 [cpp] view plaincopyprint? 1. typedef struct { 2. uint16 myAddr; //16位短地址(就是节点地址) 3. uint16 panId; //节点的PAN(个人局域网) ID 4. uint8 channel; //RF通道(必须在11-26之间) 5. uint8 ackRequest; //目标确定就置true 6. #ifdef SECURITY_CCM //是否加密 7. uint8* securityKey; 8. uint8* securityNonce; 9. #endif 10. } basicRfCfg_t; basic_rf.c——basicRfPacketIsReady()、basicRfReceive()、basicRfSendPacket() 函数实现 [cpp] view plaincopyprint? 1. uint8 basicRfPacketIsReady(void) 2. { 3. /* 4. * static basicRfRxInfo_t rxi= { 0xFF }; // Make sure sequence numbers are 5. * 确保数据序列号为0xFF 6. */ 7. return rxi.isReady; 8. } [cpp] view plaincopyprint? 1. uint8 basicRfReceive(uint8* pRxData, uint8 len, int16* pRssi) 2. { 3. // Accessing shared variables -> this is a critical region 4. // Critical region start 5. halIntOff(); 6. memcpy(pRxData, rxi.pPayload, min(rxi.length, len)); 7. if(pRssi != NULL) { 8. if(rxi.rssi < 128){ 9. *pRssi = rxi.rssi - halRfGetRssiOffset(); 10. } 11. else{ 12. *pRssi = (rxi.rssi - 256) - halRfGetRssiOffset(); 13. } 14. } 15. rxi.isReady = FALSE; 16. halIntOn(); 17. 18. // Critical region end 19. 20. return min(rxi.length, len); 21. } [cpp] view plaincopyprint? 1. uint8 basicRfSendPacket(uint16 destAddr, uint8* pPayload, uint8 length) 2. { 3. uint8 mpduLength; 4. uint8 status; 5. 6. // Turn on receiver if its not on 7. if(!txState.receiveOn) { 8. halRfReceiveOn(); 9. } 10. 11. // Check packet length 12. length = min(length, BASIC_RF_MAX_PAYLOAD_SIZE); 13. 14. // Wait until the transceiver is idle 15. halRfWaitTransceiverReady(); 16. 17. // Turn off RX frame done interrupt to avoid interference on the SPI int erface 18. halRfDisableRxInterrupt(); 19. 20. mpduLength = basicRfBuildMpdu(destAddr, pPayload, length); 21. 22. #ifdef SECURITY_CCM 23. halRfWriteTxBufSecure(txMpdu, mpduLength, length, BASIC_RF_LEN_AUTH, BAS IC_RF_SECURITY_M); 24. txState.frameCounter++; // Increment frame counter field 25. #else 26. halRfWriteTxBuf(txMpdu, mpduLength); 27. #endif 28. 29. // Turn on RX frame done interrupt for ACK reception 30. halRfEnableRxInterrupt(); 31. 32. // Send frame with CCA. return FAILED if not successful 33. if(halRfTransmit() != SUCCESS) { 34. status = FAILED; 35. } 36. 37. // Wait for the acknowledge to be received, if any 38. if (pConfig->ackRequest) { 39. txState.ackReceived = FALSE; 40. 41. // We'll enter RX automatically, so just wait until we can be sure t hat the ack reception should have finished 42. // The timeout consists of a 12-symbol turnaround time, the ack pack et duration, and a small margin 43. halMcuWaitUs((12 * BASIC_RF_SYMBOL_DURATION) + (BASIC_RF_ACK_DURATIO N) + (2 * BASIC_RF_SYMBOL_DURATION) + 10); 44. 45. // If an acknowledgment has been received (by RxFrmDoneIsr), the ack Received flag should be set 46. status = txState.ackReceived ? SUCCESS : FAILED; 47. 48. } else { 49. status = SUCCESS; 50. } 51. 52. // Turn off the receiver if it should not continue to be enabled 53. if (!txState.receiveOn) { 54. halRfReceiveOff(); 55. } 56. 57. if(status == SUCCESS) { 58. txState.txSeqNumber++; 59. } 60. 61. #ifdef SECURITY_CCM 62. halRfIncNonceTx(); // Increment nonce value 63. #endif 64. 65. return status; 66. 67. } 二、无线控制灯的亮灭 实现:通过按S1键来控制另一个板子上的LED1灯的亮灭 1、电路原理图 2、分析 既然要实现通过按S1键来控制另一个板子上的LED1灯的亮灭,那么首先需要将被控制版上的LED1对应的P1_0设置为输出模式,且当P1_为低电平时LED1等亮,为高电平时LED1等灭。以及将控制板上的S1对应的P0_4设置为输入模式,当检测到P0_4引脚为低电平示按键S1被按下,反之为高电平时表示按键S1没有被按下。由于 CC2530中的无线发送功能是内置的,不是外设,即TI官网下载的CC2530 BasicRF中的无线发送代码仍然适合我的板子,不需要怎么修改。这样,将按键S1端作为无线发送的发送端,而LED1端作为无线发送的接收端。 根据上面的代码分析,来实现自己的无线点灯,代码修改如下: (1)、首先根据上面的分析,可以知道TI官网的CC2530 BasicRF中有4个LED,其分别是P0_0、P1_1、P1_4、P0_1,而我的板子中有个两个LED灯,分别是LED1(P1_0)、LED2(P1_1)。所有需要修改LED1的引脚定义,修改hal_board.h对应LEDs的引脚定义处。 修改前: [cpp] view plaincopyprint? 1. // LEDs 2. #define HAL_BOARD_IO_LED_1_PORT 0 // Green 3. #define HAL_BOARD_IO_LED_1_PIN 0 4. #define HAL_BOARD_IO_LED_2_PORT 1 // Red 5. #define HAL_BOARD_IO_LED_2_PIN 1 6. #define HAL_BOARD_IO_LED_3_PORT 1 // Yellow 7. #define HAL_BOARD_IO_LED_3_PIN 4 8. #define HAL_BOARD_IO_LED_4_PORT 0 // Orange 9. #define HAL_BOARD_IO_LED_4_PIN 1 修改后: [cpp] view plaincopyprint? 1. // LEDs 2. #define HAL_BOARD_IO_LED_1_PORT 1 // Green******************LED1 3. #define HAL_BOARD_IO_LED_1_PIN 0 4. #define HAL_BOARD_IO_LED_2_PORT 1 // Red********************LED2 5. #define HAL_BOARD_IO_LED_2_PIN 1 6. #define HAL_BOARD_IO_LED_3_PORT 1 // Yellow 7. #define HAL_BOARD_IO_LED_3_PIN 4 8. #define HAL_BOARD_IO_LED_4_PORT 0 // Orange 9. #define HAL_BOARD_IO_LED_4_PIN 1 (2)、首先根据上面的分析,可以知道TI官网的CC2530 BasicRF中有1个按键S1,对应的引脚为P0_1,而我板子上的按键S1引脚为P0_4。所有需要修改LED1的引脚定义,修改hal_board.h对应Buttons的引脚定义处。 修改前: [cpp] view plaincopyprint? 1. // Buttons 2. #define HAL_BOARD_IO_BTN_1_PORT 0 // Button S1 3. #define HAL_BOARD_IO_BTN_1_PIN 1 修改后: [cpp] view plaincopyprint? 1. // Buttons 2. #define HAL_BOARD_IO_BTN_1_PORT 0 // Button S1 3. #define HAL_BOARD_IO_BTN_1_PIN 4 (3)、将板子的LED1和LED2灯,设置为关闭状态,修改light_switch.c的main函数,在halLedSet(1)上面添加一行代码:halLesSet(2); [cpp] view plaincopyprint? 1. halLedSet(2); //关闭LED2 2. halLedSet(1); //关闭LED1 (4)、根据上面的light_switch.c中的appSwitch()函数分析,在其函数内死循环中,它是去判断多方向按键是否按下,而实际需要判断自己板子的单方向按键是否按下。 修改前: [cpp] view plaincopyprint? 1. while (TRUE) { 2. if( halJoystickPushed() ) { //判断多方向按键是否按下 3. 4. basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);//发送 命令 5. 6. // Put MCU to sleep. It will wake up on joystick interrupt 7. halIntOff(); 8. halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global 9. // interrupt enable 10. halIntOn(); 11. 12. } 13. } 修改后: [cpp] view plaincopyprint? 1. while (TRUE) { 2. //if( halJoystickPushed() ) { //判断多方向按键是否按下 3. if (halButtonPushed()){ 4. basicRfSendPacket(LIGHT_ADDR, pTxData, APP_PAYLOAD_LENGTH);//发送 命令 5. 6. // Put MCU to sleep. It will wake up on joystick interrupt 7. halIntOff(); 8. halMcuSetLowPowerMode(HAL_MCU_LPM_3); // Will turn on global 9. // interrupt enable 10. halIntOn(); 11. 12. } 13. } (5)、将light_switch.c中的main函数中一些有关lcd屏的操作、模式选择、等待用户按键等代码注释掉,注释如下: [cpp] view plaincopyprint? 1. #if 0 2. // Print Logo and splash screen on LCD 3. utilPrintLogo("Light Switch"); //有关LCD的函数不管 4. 5. // Wait for user to press S1 to enter menu 6. while (halButtonPushed()!=HAL_BUTTON_1); 7. halMcuWaitMs(350); 8. halLcdClear(); //lcd清屏,不用管 9. 10. // Set application role 11. appMode = appSelectMode(); //模式选择 12. halLcdClear(); 13. 14. // Transmitter application 15. if(appMode == SWITCH) { 16. // No return from here 17. appSwitch(); 18. } 19. // Receiver application 20. else if(appMode == LIGHT) { 21. // No return from here 22. appLight(); 23. } 24. #endif (7)、根据是控制端(按键端)还是终端(LED灯端),在main函数添加不同函数。如果是 将程序下载到控制端板子上,在main函数HAL_ASSERT(FLASE)上方添加appSwitch()函 数,而如果是将程序下载到终端板子上,在main函数HAL_ASSERT(FLASE)上方添加 appLight()函数。 控制端: [cpp] view plaincopyprint? 1. appSwitch(); 2. 3. // Role is undefined. This code should not be reached 4. HAL_ASSERT(FALSE); 终端: [cpp] view plaincopyprint? 1. appLight(); 2. 3. // Role is undefined. This code should not be reached 4. HAL_ASSERT(FALSE); 准备就绪 按下S1 , TI CC2530基础实验(串口编程——USART0收发测试总结) , IAR——Unable to open file 'lnk51ew_cc2530b.xcl' 主推荐 代码分析 interface 局域网 路由器 终端 猜你在找 zigbee tools-f8w2530xcl 特征向量 IAR编译出现Errore46 Undefined external "_NOP" referred in main Fatal Errore72 Segment ZIGNV_ADDRESS_SPACE must be defined in a segment definition option -Z -b 1-2 实验2 点对点通信 【精品课程】零基础学Java系列从入门到精通 【精品课程】JavaScript for Qt Quick(QML) 【精品课程】微信公众平台开发入门 【精品课程】C语言及程序设计初步 【精品课程】零基础学HTML 5实战开发(第一季) 准备好了么, 跳吧 ~更多职位尽在 CSDN JOB 高级数据架构师——Hadoop 猎上网络科技(上海)有限公司 | 35-40K/月 我要跳槽 PHP开发工程师——新媒体 成都索贝数码科技股份有限公司 | 6-10K/月 我要跳槽 招募IT猎头顾问——技术人员转行的新出路 上海科锐福克斯人才顾问有限公司 | 0.5-1K/月 我要跳槽 网站及无线产品UI设计师 青岛天胜网络供应链有限公司 | 4-6K/月 我要跳槽 查看评论 暂无评论 您还没有登录,请[登录]或[注册] * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场 核心技术类目 全部主题 Hadoop AWS 移动游戏 Java Android iOS Swift 智能硬 件 Docker OpenStack VPN Spark ERPIE10 Eclipse CRM JavaScript 数据库 Ubuntu NFC WAP jQuery BI HTML5 Spring Apache .NET API HTML SDK IIS Fedora XML LBS Unity S plashtop UML components Windows Mobile Rails QEMU KDE Cassandra CloudStack FTC coremail OPhone CouchBase 云计算 iOS6 Rackspace Web App SpringSide Maemo Compuware 大数 据 aptech Perl Tornado Ruby Hibernate ThinkPHP HBase Pure Solr Angular Cloud Foundry Redis Scala Django Bootstrap 个人资料 Thanksgining o 访问:14717次 o 积分:640 o 等级: o 排名:千里之外 o 原创:51篇 o 转载:5篇 o 译文:0篇 o 评论:3条 文章分类 , 【C】(3) , 【Linux C】(9) , 【Zigbee】(14) , 【knx 协议】(1) , 【CPU】(3) , 【Java】(1) , 【Android】(5) , 【从实践中学习Android】(2) , 【Android UI编程专栏】(9) , 【Android 网络编程专栏】(4) , 【Android 多线程编程专栏】(3) , 【Android 数据存储专栏】(4) , 【Ubuntu】(1) , 【Git】(1) , 【GitHub】(0) 文章搜索 文章存档 , 2015年02月(10) , 2015年01月(16) , 2014年12月(25) , 2014年11月(5) 阅读排行 , 我的Android进阶之旅:经典的大牛博客推荐(665) , ZStack-CC2530-2.5.1a主要代码分析总结——明白ZStack-OSAL的原理和思想(609) , Android UI编程(1)——九宫格(GridView)(447) , git pull——git库版本与本地库版本冲突总结(420) , TI CC2530(DMA编程——手动触发DMA传送,一个数组拷贝到另一个数组里)(416) , TI CC2530基础实验(GPIO通用I/O中断操作——一个中断处理程序处理一个端口的多个中断) (413) , TI CC2530基础实验(普通GPIO操作——点亮led灯)(412) , TI CC2530基础实验(普通GPIO操作——按一下按键亮一下灯)(376) , Android 数据存储——SQLite实例、判断数据库中表是否存在(375) , ZStack-CC2530-2.5.1a协议栈数据传输(371) 评论排行 , Android UI编程(6)——HandlerThread(3) , Android 网络编程(3)——使用URLConnection提交请求(0) , Android UI编程(2)——多级列表(ExpandableListView)(0) , Android UI编程(1)——九宫格(GridView)(0) , 我的Android进阶之旅:经典的大牛博客推荐(0) , Android设备使用网络连接调试(0) , ZStack-CC2530-2.5.1a协议栈数据传输(0) , ZStack-CC2530-2.5.1a主要代码分析总结——明白ZStack-OSAL的原理和思想(0) , ZStack-OSAL中任务初始化中的afRegister函数调用分析总结(0) , 彻底明白Zigbee术语——群集(Cluster)、端点(EndPoint)等(0) 推荐文章 最新评论 , Android UI编程(6)——HandlerThread 砍瓜-切菜: 好的,谢谢指点,有点明白了,本人android新手,许多都不懂,有些问题,感觉稀里糊涂的, 希望博主海... , , Android UI编程(6)——HandlerThread Thanksgining: 只有启动了HandlerThread线程,才能通过handlerThread.getLooper()... , , Android UI编程(6)——HandlerThread 砍瓜-切菜: 请教博主一个问题,在您的示例程序中,这个handlerThread.start(); 的作用是什么... , 公司简介|招贤纳士|广告服务|银行汇款帐号|联系方式|版权声明|法律顾问|问题报告|合作伙 伴|论坛反馈 网站客服杂志客服微博客服webmaster@csdn.net400-600-2320|北京创新乐知信息技术有限公司 版权 所有|江苏乐知网络技术有限公司 提供商务支持 京 ICP 证 070598 号|Copyright ? 1999-2014, CSDN.NET, All Rights Reserved