Android AVD SD card 管理使用方式

1.首先開啟SDK Manager.exe

2.選擇你所要編輯sdcard的AVD按下start

3.等待AVD開啟完成

4.開啟tools裡的ddms.bat
要是有開啟AVD就會出現在上面

5.選擇AVD按下Device的File Explorer

6.在mnt中的sdcard就是虛擬機中的sdcard

7.接下來可以用上面第二個圖示上傳檔案到虛擬的sdcard

8.但是這個工具只能上傳檔案不能新增資料夾
所以要開啟另一個工具
開啟命令提示字元到tools底下

9.輸入adb -s [AVD的名子](在ddms上面會顯示) shell
例如:
adb -s emulator-5554 shell

10.就進入編輯模式
指令為linux的指令
例如:ls mkdir cd rmdir

11.進入sdcard
cd sdcard


12.使用mkdir就可以新增資料夾
mkdir test


13.使用rmdir可以刪除資料夾
rmdir test


14.輸入exit就會離開

java5下載及安裝

下載網址
http://java.sun.com/javase/downloads/5u21/jdk

選擇Linux

contiune後
下載
jdk-1_5_0_21-linux-i586.bin

放到linux裡面
輸入
./jdk-1_5_0_21-linux-i586.bin
等到解壓縮完成

加入PATH
export PATH=~/jdk1.5.0_21/bin

永久加入PATH
vi .bashrc
最後一行加入
PATH=${PATH}:~/jdk1.5.0_21/bin

更改Ubuntu中apt-get的下載點

ubuntu 的 sources.list
是主機是系統更新時的下載位址
一開始安裝 Ubuntu 時
更新的 sources.list 主機預設為國外的主機
這樣對我們來說
在下載更新套件時會因為網路的關係而比較慢
因此改為台灣的主機會很快

使用 vi 編輯器來開啟 sources.list
 sudo vi /etc/apt/sources.list
在 vi 環境下,下一次更換字串的命令
 :%s/us.archive.ubuntu.com/tw.archive.ubuntu.com/g

mirror.nttu.edu.tw

Qt撰寫UART(RS232)

1.首先到官網去下載QextSerialPort 1.1
按此連結

2.解壓縮後
將裡面的
posix_qextserialport.cpp
posix_qextserialport.h
win_qextserialport.cpp 
win_qextserialport.h
qextserialbase.cpp
qextserialbase.h
qextserialport.cpp
qextserialport.h
複製到你的專案資夾底下

3.開啟pro輸入
HEADERS += qextserialbase.h /
qextserialport.h
SOURCES += qextserialbase.cpp /
qextserialport.cpp
unix:HEADERS += posix_qextserialport.h
unix:SOURCES += posix_qextserialport.cpp
win32:HEADERS += win_qextserialport.h
win32:SOURCES += win_qextserialport.cpp
unix:DEFINES = _TTY_POSIX_
win32:DEFINES = _TTY_WIN_

4.接下來就可以在程式裡面開始使用qextserial
首先先include qextserialport.h
宣告一個
QextSerialPort port = new QextSerialPort;
開始使用
port.setPortName("COM1");  //port的位置
port.setBaudRate(BAUD38400);  //包率
port.setFlowControl(FLOW_OFF);  //滿載控制
port.setParity(PAR_NONE);  //同位元
port.setDataBits(DATA_8);  //資料大小
port.setStopBits(STOP_1);  //停止bit
port.open(QIODevice::ReadWrite);  //開啟UART的port
這樣久就設定完成並且開啟

常用函數:
isOpen()
此函數用來檢查使否開啟
a = read(array, 10)
此函數用來接收值
array為放資料的地方
10為接收的值
a為所接收到的值
write(array, 10)
array為放傳送的地方
10為傳送的值

因為此程式沒有接收後自動中斷的機制
所以需要隔一段時間接收資料

QT編譯成靜態還是出現"找不到mingwm10.dll"解決辦法

程式編譯成靜態還是出現
找不到mingwm10.dll

是因為你的Make有將mtheard
編譯進去
所以要將Makefile.Release
中找到
-mthreads
刪除
存檔重新編譯即可
但是注意
你的.pro
有修改過Qt Creator會自動產生新的Makefile.Release
因此要編譯完
再做修改
再編譯一次即可

要是想要一勞永逸
就開啟
Qt底下的\qt\mkspecs\win32-g++\qmake.conf

-mthreads
全部刪除
這樣之後生成的Makefile都不會出現了

QT編譯成靜態還是出現"找不到libgcc_s_dw2-1.dll"解決辦法

程式編譯成靜態還是出現
找不到libgcc_s_dw2-1.dll

是因為你的minGW 4.4以上
所以有關GCC的函數
都用動態來連接
所以需要下命令
將有關GCC的函數編譯成靜態
打開你的專案的副檔名為pro的檔案
加入
CONFIG += staticlib


儲存後編譯即可

QT編譯成靜態(static)

為什麼要編譯成靜態的
因為時常把程式寫好編譯後
要將程式去別台執行
就會出現缺少XXXXX.dll
這就是編譯器是用動態連結
除非把所有需要的dll都一起複製帶著走
要不然程式是無法動作的
因此要將程式所用到的函數都包在一個執行檔裡面
所以要編譯成靜態的

要是沒編譯成靜態 開啟檔案會出現下面的警告
找不到QtCored4.dll

所以接下來就要將QT編譯成靜態
複製你安裝QT的資料夾
預設路徑為C:\qt\發布的版本
例如我的是C:\qt\2010.02.1
複製一份命名為C:\qt\2010.02.1-static
接下來開啟QT的Qt Command Prompt
預設路徑為
開始→程式集→Qt SDK by Nokia v2010.02.1 (open source)→Qt Command Prompt
開啟後將目錄轉到你複製完成的資料夾底下的qt
cd C:\qt\2010.02.1-ststic\qt


接下來所要下的命令為
configure -static -release -fast -no-phonon -no-opengl

會出現
Which edition of Qt do you want to use ?
Type 'c' if you want to use the Commercial Edition.
Type 'o' if you want to use the Open Source Edition.

這時候就要打
o
然後按Enter
因為通常安裝的都是開放原始碼的授權程式
除非你有去購買授權版的

接下來就是會出現
This is the Qt for Windows Open Source Edition.

You are licensed to use this software under the terms of
the GNU Lesser General Public License (LGPL) version 2.1
or the GNU General Public License (GPL) version 3.

Type '3' to view the GNU General Public License version 3 (GPLv3).
Type 'L' to view the Lesser GNU General Public License version 2.1 (LGPLv2.1).
Type 'y' to accept this license offer.
Type 'n' to decline this license offer.

Do you accept the terms of the license?

輸入3或L是看那些開放原始碼的法律條文
要看的可以自己進去看
所以在這裡輸入
y
案Enter

像上面出現
Qt is now configured for building. Just run mingw32-make.
To reconfigure, run mingw32-make confclean and configure.
就成功了

接下來就會開始自動設定檔案
設定完成就輸入
mingw32-make
輸入完後要等大約2-3小時
出現類似以下的訊息
就代表編譯完成
mingw32-make[4]:
mingw32-make[3]:
mingw32-make[2]:
mingw32-make[1]:

編完後此Qt的檔案就會變成靜態的模式
接下來就是去Qt Creator設定
將編譯器指向此靜態的函式庫
開啟Qt Creator
功能表的Tools→Options→Qt4
按下新增按鈕
version name  填入你知道的名子
QMake Location  填入你編好的靜態Qt函式庫裡的bin的qmake.exe檔案
MinGW Directory  填入MinG編譯器的位置
不管是靜態的那個資料夾或是動態的都可以
所以可以將靜態的MinGW刪除然後指向動態的
OK就可以了
接下來就是將你所寫好的Qt程式用靜態編譯
先開啟你的專案
點到Project
新增你剛剛設定好的環境
它會要你輸入新的Configuration的名子
輸入完後選到你剛剛設定完後的debug
將它刪除
因為Qt的靜態版本不能用來編譯debug
所以將它刪除以免選錯
接下來就可以將上面的編譯模式設定為靜態
 編譯後就可以了


Apache運行asp.net

1.先確認你的apache的版本
Apache 2.2 按此連結
Apache 2.X 按此連結
Apache 2.0 按此連結
在上面的網站
找到相對映的網站下載
不知道apache的版本??
到開始→設定→控制台→系統管理工具→服務
找到apache
後面會有跟數字就是apache的版本

2.把檔案安裝起來
特別注意安裝檔通常會指到apache的安裝位子
但是有可能跑掉
請指到對的位子

3.確認是否有安裝Mircosoft .NET Framework 3.5以上
可以在開始→設定→控制台→新增移除程式
找是否有安裝
沒有的話請按此連結
下載並安裝

4.開啟apache的config
通常是放在
apache底下的conf
名子為httpd.conf
在最後面貼上
LoadModule aspdotnet_module modules/mod_aspdotnet.so 

AddHandler asp.net asax ascx ashx asmx aspx axd config cs csproj licx rem resources resx soap vb vbproj vsdisco webinfo
 
AliasMatch "^/(?i)aspnet_client/system_web/(\d+)_(\d+)_(\d+)_(\d+)/(.*)" "C:/Windows/Microsoft.NET/Framework/v$1.$2.$3/ASP.NETClientFiles/$4"
 
<Directory "C:/Windows/Microsoft.NET/Framework/v*/ASP.NETClientFiles">
    Options FollowSymlinks
    Order allow,deny
    Allow from all
</Directory>

AspNetMount /aspx "C:/AppServ/www/aspx"
Alias /aspx "C:/AppServ/www/aspx"
<Directory "C:/AppServ/www/aspx">
    Options FollowSymlinks Indexes
    AspNet files
    Order allow,deny
    Allow from all
    DirectoryIndex default.htm default.aspx
</Directory>

 C:/AppServ/www/aspx是你的在本機網頁路徑
 /aspx是你想要在網址後面的
這樣設定網址打http://127.0.0.1/aspx就回連到你上面設定的地方
default.htm default.aspx可以打你想要初始的檔案名稱
存檔後請到
開始→設定→控制台→系統管理工具→服務
將apache的服務停止

再開啟
然後在apache上點兩下開啟內容
成功會看到mod_aspdotnet/2.2
2.2為apache的版本

5.在網頁資料夾建立default.aspx
在裡面打
<html>
<body>
現在時間:
<%
Dim T As Date
T = Now
Response.Write(T)
%>
</body>
</html>
然後開啟網頁看看是否有成功

6.要是出現
目前的識別 (NT AUTHORITY\SYSTEM) 沒

有 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files' 的寫入權限。
就自己跑到
C:\Windows\Microsoft.NET\Framework\v2.0.50727\
下建立 Temporary ASP.NET Files 資料夾
通常只會出現在vista或是windows 7

zstack的ZDP的使用方式

其實TI的zstack裡面有很多很好用的API
不需要自己在花時間去撰寫
只是需要稍微去修改才能使用
接下來我開始說ZDP的使用方式
ZDP的code都放在
C:\Texas Instruments\ZStack-1.4.3\Components\stack\zdo\ZDProfile.c
裡面
接下來就是來看裡面有什麼東西
裡面已經寫好任何一個zigbee接受到指令後所需要得反應
例如在Z-stack的API手冊裡也到ZDP_NwkAddrReq()的函式
它是用來得知某個已知的IEEE address位址想要知道
它在zigbee的short address
在這個code裡面已經寫好反應的方式
也就是說不必寫傳送和回覆的程式碼
都已經寫好給你了
但是它沒寫好的就是我接收到要做什麼事
因為他已經將傳送的資料交給zdo的程序來處理
沒辦法交給使用者自訂的程序來處理
所以需要修改一部分來交給自訂的程序處理
所以要找到
CONST zdpMsgProcItem_t zdpMsgProcs[] =  
這是zdp接受到訊息的指令所對應到的函式
裡面並沒有NWK_addr_rsp
也就是回應過來所對應的函式
所以在
 {0xFFFF, NULL}
前面加上
 { NWK_addr_rsp,            ProcessAddrRsq },
ProcessAddrRsq可以自己命名
不過最好寫個前置判斷
因為不是每個device都需要用到
所以我都寫成這樣
#if defined (addr_rsp)
  { NWK_addr_rsp,            ProcessAddrRsq },
#endif
這樣編譯的時候只會編譯有define addr_rsp的device
然後還要在上面加上
#if defined (addr_rsp)
  extern void ProcessAddrRsq( zdoIncomingMsg_t *inMsg );
#endif
因為我想要把它寫在自訂程序同一個地方
接下來就到自訂程序的地方寫code
也就是sampleapp.c
當然要宣告
void ProcessAddrRsq( zdoIncomingMsg_t *inMsg );
然後開始寫處理的方式
不過要先知道他傳過來的格式是什麼
先找到
void zdpProcessAddrReq( zdoIncomingMsg_t *inMsg )
的函式
它是用來回覆有關address的函數
在裡面的程式看來
在資料的第2個位子就是IEEE address
佔8個位子
也就是inMsg->asdu+1到inMsg->asdu+8
接下來就是short address
佔2個位子
也就是inMsg->asdu+9到inMsg->asdu+10
當然也可以由接收到的資料裡面找來源位子
inMsg->srcAddr.addr.shortAddr
這樣就可以設計成下面這樣子
void ProcessAddrRsq( zdoIncomingMsg_t *inMsg )
{
    if (osal_ExtAddrEqual(end_addr.extAddr, inMsg->asdu+1)) {
        end_addr.shortAddr = inMsg->srcAddr.addr.shortAddr;
    }
}
osal_ExtAddrEqual是內建函數用來比較IEEE address是否一樣

接下來就是如何呼叫ZDP_NwkAddrReq()的函式
在ZDP_NwkAddrReq的函式外圍有前置判斷
所以要先設定#define ZDO_NWKADDR_REQUEST
接下來就可以直接用了
ZDP_NwkAddrReq(end_addr.extAddr, ZDP_ADDR_REQTYPE_SINGLE, 0, 0);
第一個參數是IEEE address
第二個參數是要如何回傳
ZDP_ADDR_REQTYPE_SINGLE//只回傳需求端
ZDP_ADDR_REQTYPE_EXTENDED//用廣播的方式回傳
第三個參數是startindex
第四個參數是securitysuite


其他的也就照這樣寫就可以了

Uboot設定

1.在開機的時候先進入uboot
在此畫面要快速按下任何鍵就可以進入uboot模式

2.接下來就是開始設定uboot
uboot有很多參數必須被設定如下
bootcmd    - see CONFIG_BOOTCOMMAND
bootargs    - Boot arguments when booting an RTOS image
ipaddr    - IP address; needed for tftpboot command
serverip    - TFTP server IP address; needed for tftpboot command
ethact    - When CONFIG_NET_MULTI is enabled controls which interface is currently active.
gatewayip    - IP address of the Gateway (Router) to use
netmask    - Subnet Mask
ethaddr    - Ethernet address
那要如何設定
打set的指令加上你要設定的參數名稱和參數(有些舊版本要打setenv)
參數名稱除了上面的之外
也可以自己命名其他的名子
例如要設定這台機器的ip
set ipaddr 192.168.0.99
那設定完要如何看??
就打print(有些舊版本要打printenv)
print
但是這些設定完後
重新開機會回歸原始狀態
那要如何儲存??
就打save(有些舊版本要打saveenv)
save
基本設定如下:
set ipaddr 192.168.0.99
set serverip 192.168.0.101
save
print 
如下圖所示


接下來就是從遠端下載kernel的image的設定
通常都是用tftp來下載
在server的安裝教學按此
接下來就是下令
tftp的指令就是tftp
後面要跟的參數是
tftp loadAddress bootfilename
loadaddress就是你要將image下載到硬體的哪裡(通常以16進位來表示)
bootfilename就是在你主機上的檔名
設定如下:
tftp 22000000 uImage
成功如下圖

要是出現
*** ERROR: `ethaddr' not set
請設定ethaddr
ethaddr只能設定一次
也就是設定MAC address
輸入32位元的數值
set ethaddr 11:22:33:44:55:66
save
要是出現Loading: T T T T
如下圖
可以按下ctrl+c強制中斷
並且檢查是否server的ip設錯
或是硬體的ip設錯網段
是否可以連到server

接下來就是如何讓uboot利用nfs掛載root-file-system
就要設定以下參數
set bootargs console=fb0 console=ttyS0,115200 androidboot.console=ttyS0 root=/dev/nfs rw init=/init nfsroot=192.168.0.101:/root/rootfs ip=192.168.0.99:192.168.0.101:192.168.0.254:255.255.255.0::eth0 off rootwait
save 
裡面比較重要的是
console為用什麼輸出訊息
上面設定是讓uart輸出包率為115200
init為一開始掛載完root-file-system之後先開啟的檔案
nfsroot為設定server的IP和資料夾的位子
ip為設定機器的ip server的ip 網路閘道 遮罩 使用哪個網路口

接下來就可以開啟kernel
下的指令是
bootm
後面的參數是16進位
bootm 22000000
就等掛載好了就會出現一個#
如下圖
就可以用linux的指令去玩了

CC2430 Zstack的基本網路傳輸和架構

1.開啟SampleApp
預設路徑:
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\Location\CC2430DB\SampleApp.eww

2.首先要先找到程式最先執行的地方
Zmain→Zmain.c裡面有main
所以程式執行的開端就在這裡
它裡面就是init一些zstack所寫好的函數
不過最重要的就是它有init OSAL
什麼是OSAL??
它是IT在Zstack下所開發的小型OS
它會自己分配時間
所以有很多內部事件可以不需要再另外寫程式處理
所以去OSAL裡面看就可以知道有什麼事件
App→OSAL_SampleApp.c
在這個tasksArr的變數
裡面可以發現好幾個事件的函數
也就是說可以在這裡加入自己想要新增的事件
在這個osalInitTasks的函式裡面
你可以輸入自己想要Init事件的函數

3.接下來知道程式裡面有執行到App→SampleApp.c
這裡是Zstack預設用來給開發者開發的區域
所以先看
SampleApp_Init的函數
SampleApp_TaskID是用來記錄這個事件在OSAL裡面的編號
是可以用來註冊其他中斷發生需要啟動事件的編號

SampleApp_NwkState是用來記錄發生什麼事件
zStack有內涵這些事件
typedef enum
{
  DEV_HOLD,               // Initialized - not started automatically
  DEV_INIT,               // Initialized - not connected to anything
  DEV_NWK_DISC,           // Discovering PAN's to join
  DEV_NWK_JOINING,        // Joining a PAN
  DEV_NWK_REJOIN,         // ReJoining a PAN, only for end devices
  DEV_END_DEVICE_UNAUTH,  // Joined but not yet authenticated by trust center
  DEV_END_DEVICE,         // Started as device after authentication
  DEV_ROUTER,             // Device joined, authenticated and is a router
  DEV_COORD_STARTING,     // Started as Zigbee Coordinator
  DEV_ZB_COORD,           // Started as Zigbee Coordinator
  DEV_NWK_ORPHAN          // Device has lost information about its parent..
} devStates_t;
不過我也不太懂裡面的所有狀態

SampleApp_TransID我也不知道宣告來幹麻的後面會有用到
但是我看過有沒有都可以執行

SampleApp_Periodic_DstAddr
SampleApp_Flash_DstAddr
是用來記錄要zigbee傳送的方式
裡面的變數有
typedef struct {
  union {
    uint16  shortAddr;
  } addr;
  afAddrMode_t addrMode;
  byte endPoint;
} afAddrType_t;

typedef enum {
  afAddrNotPresent = AddrNotPresent,
  afAddr16Bit      = Addr16Bit,
  afAddrGroup      = AddrGroup,
  afAddrBroadcast  = AddrBroadcast
} afAddrMode_t; 

在addrMode的表示下
也就是說在Zstack的zigbee傳送方式有4種
AddrNotPresent→沒動作
Addr16Bit→用指定位置傳送
AddrGroup→用指定群組傳送
AddrBroadcast→廣播
endPoint是zigbee用來認領的ID
所以SampleApp_Periodic_DstAddr是設定為廣播的狀態
SampleApp_Flash_DstAddr是設定為對群組傳送

SampleApp_epDesc
就是設定接收的ID和事件的編號
typedef struct {
  byte endPoint;
  byte *task_id;
  SimpleDescriptionFormat_t *simpleDesc;
  afNetworkLatencyReq_t latencyReq;
} endPointDesc_t;
也就是說要輸入要接收的ID
和事件的編號
其他我就不太知道了....

afRegister( &SampleApp_epDesc );
這是將上面設定的註冊到另一個專門用來接收zigbee的事件

RegisterForKeys( SampleApp_TaskID );
是將按鍵的硬體事件註冊到自訂的事件
 
SampleApp_Group.ID = 0x0001;
osal_memcpy( SampleApp_Group.name, "Group 1", 7  );
aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group );
是將ID再劃分其他的區域


SampleApp_ProcessEvent的函數
afIncomingMSGPacket_t *MSGpkt
是用來取回OSAL傳來的信號
typedef struct {
  osal_event_hdr_t hdr;
  uint16 groupId;
  uint16 clusterId;
  afAddrType_t srcAddr;
  byte endPoint;
  byte wasBroadcast;
  byte LinkQuality;
  byte SecurityUse;
  uint32 timestamp;
  afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;

typedef struct {
  byte   TransSeqNumber;
  uint16 DataLength;
  byte  *Data;
} afMSGCommandFormat_t;

typedef struct {
  uint8  event;
  uint8  status;
} osal_event_hdr_t;
裡面有很多設定就用原來的來修改
比較快
KEY_CHANGE
就是有按鍵動作所要做的事
AF_INCOMING_MSG_CMD
就是有接收到zigbee的訊息所要做的事
ZDO_STATE_CHANGE
有接上zigbee的連接時所要做的事

osal_start_timerEx( SampleApp_TaskID, SAMPLEAPP_SEND_INFO_EVT, 30000 );
這是設定時間到就會執行這個事件
也就是會有SAMPLEAPP_SEND_INFO_EVT的訊號出來

SampleApp_HandleKeys的函數
SampleApp_SendFlashMessage( SAMPLEAPP_FLASH_DURATION )
這是用來傳送閃燈的訊號出去

aps_FindGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP )
找有沒有這個GROUP

aps_RemoveGroup( SAMPLEAPP_ENDPOINT, SAMPLEAPP_FLASH_GROUP )
移除這個GROUP

aps_AddGroup( SAMPLEAPP_ENDPOINT, &SampleApp_Group )
增加這個GROUP

SampleApp_MessageMSGCB的函數
這是用來處理從zigbee接收過來的訊息
HalLedBlink( HAL_LED_4, 4, 50, (flashTime / 4) )
這是用來閃燈用的
也就是說有訊號接收到LED就會閃

SampleApp_SendPeriodicMessage( void ) 的函數
SampleApp_SendFlashMessage( uint16 flashTime ) 的函數
就是傳送zigbee的訊號

CC2430 ZStack的Uart使用方法

1.首先要知道CC2430Uart的接腳在哪裡
在CC2430的datasheet裡有一張表有寫(p. 80)
這樣看起來Uart有兩個
且都有兩種接腳的方式
Uart0分別是P0.3 P0.2或是P1.5 P1.4
Uart1分別是P0.5 P0.4或是P1.7 P1.6

2.要如何設定
在datasheet有寫(p.83)
將PERCFG(reg中的0xF1)中的bit0設為0就是Uart0腳位為P0.3 P0.2
將PERCFG(reg中的0xF1)中的bit0設為1就是Uart0腳位為P1.5 P1.4
將PERCFG(reg中的0xF1)中的bit1設為0就是Uart1腳位為P0.5 P0.4
將PERCFG(reg中的0xF1)中的bit1設為1就是Uart1腳位為P1.7 P1.6

3.接下來就要將I/O的Port設定
在datasheet有寫(p.83)
也就是說假設你需要使用Uart0中的Alt.1
就要這樣寫
PERCFG &= 0xFE;
P0SEL |= 0x0C;
這樣P0.3 P0.2就會變成Uart0的Tx Rx

4.接下來就要找ZStack的程式如何啟動
ZStack將一些硬體部分寫在以下的預設路徑
C:\Texas Instruments\ZStack-1.4.3\Components\hal\target\
我所要使用的是CC2430EB所以就看CC2430EB裡面的東西
裡面有hal_uart.c這個檔案
裡面寫的很完整所以幾乎不需要修改它
不過要知道裡面的函數名稱
因為要使用Uart就要使用裡面的函數
在開頭的define有寫到開啟Uart的參數HAL_UART
可以自行開啟
或是在hal_board_cfg.h有寫到(hal_board_cfg.h第239行)
沒設定的話它會先看ZAPP_P1、ZAPP_P2、ZTOOL_P1或是ZTOOL_P2有沒有設定
有的話就開啟
在hal_board_cfg.h第247行寫到要開啟那個Uart
預設只有開啟Uart0
而且在hal_uart.c寫到他Uart0預設是用P0.3 P0.2(hal_uart.c第451行)
Uart1預設是用P1.7 P1.6(hal_uart.c第468行)

5.接下來就開始使用它
開啟預設的IAR
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\SampleApp\CC2430DB\SampleApp.eww
在Project→Options→C/C++ Compiler→Preprocessor→Defined symbols
可以下達設定
裡面預設有ZTOOL_P1所以因該有開啟Uart
但是他不會去執行到ISR的UART
而且它會顯示出它內部有寫好的一些字串
所以需要修改
刪除
ZTOOL_P1
加上
HAL_UART

HAL_UART_ISR
接下來開啟
SampleAppHw.c
將第92行刪除或是註解
#error The UART will not work with this configuration. The RX & TX pins are used.
上面這一行是說
因為之前設定ZTOOL_P1 所以RX TX已經被用了
但是我將它取消所以是不會被抵觸的

6.接下來就開始寫程式
開啟SampleApp.c裡面
就是已經寫好的程式
SampleApp_Init->程式初始值
SampleApp_ProcessEvent ->程式的事件(程式撰寫的地方)
所以在SampleApp.c前面加上
hal_uart.c
void rx_function (uint8 port,uint8 event); 
在SampleApp_Init裡面加上
halUARTCfg_t uartConfig;

uartConfig.configured           = TRUE;  // 2430 don't care.
uartConfig.baudRate             = HAL_UART_BR_38400;
uartConfig.flowControl          = TRUE;
uartConfig.flowControlThreshold = 48;  //接收緩衝區
uartConfig.rx.maxBufSize        = 64;
uartConfig.tx.maxBufSize        = 64;
uartConfig.idleTimeout          = 6;  // 2430 don't care.
uartConfig.intEnable            = TRUE;  // 2430 don't care.
uartConfig.callBackFunc         = rx_function; //接收的function名稱

HalUARTInit();

HalUARTOpen(HAL_UART_PORT_0, &uartConfig);

在最後面加上
void rx_function(uint8 port,uint8 event)
{
  uint8 temp[8];
  HalUARTRead(HAL_UART_PORT_0,temp,8);
  HalUARTWrite(HAL_UART_PORT_0,temp, 8);
} 


7.baudRate
不知道原因
在CC2430的Zstack
它只支援34800和115200這兩種baudRate
所以就只設定這兩種
接下來可以去看它是設定
是否有同位檢查
是否為8bit或是9bi
Endbit是1個還是2個
需不需要硬體控置流量
在cc2430的datasheet裡面有寫
可以控制的方式和bits
在zstack裡的hal_uart.c的第641行
它預設是8bit,沒有同位檢查,1bit停止碼,有硬體控制流量

8.接下來就可以編輯且開啟超級終端機來測試

TI Zigbee 環境建置 CC2430

1.首先先到TI官網下載ZStack的安裝套件
按此連結
找到CC2430的ZStack
我撰寫此文章時檔案名稱是
swrc072c.zip
內附ZStack和範例程式

2.安裝IAR for 8051
一定是要8051的
而且要7.30B以上的版本才行
但是我安裝7.51A編譯不過
也不知道是什麼原因
也許是因為用謎之方法沒過
因為網路上說7.50A的產生器可以用在7.51A
可以安裝但是不知道有沒有破解完成
所以我灌7.50A
編譯有成功

3.接下來接上CC2430的版子
會顯示要安裝驅動程式
驅動程式放在IAR裡面
預設存放路徑為
C:\Proram Files\IAR Systems\Embedded Workbench 5.0\8051\drivers\Chipcon


4.開啟Sample的專案
預設路徑為
C:\Texas Instruments\ZStack-1.4.3\Projects\zstack\Samples\Location\CC2430DB\SampleApp.eww

應該會出現This project file'SampleApp.eww' is in an old format......
這是正常的吧!!
因為當初TI在開發的時候因該是用IAR for 8051 v7.30B
所以按是

5.將專案選擇CoordinatorDB
點取Make
成功的話
因該會出現errors為0
按下Debug的按鈕
它就會自動燒入
再按下GO就會跑程式