江西理工大学应用科学学院毕业设计
收发的处理。 { ??
void PHYSetTRXState(PHY_TRX_STATE state) {
PHYBegin();
if ( state == PHY_TRX_RX_ON ) {
PHYPut(STROBE_SRXON); }
else if ( state == PHY_TRX_OFF || state == PHY_TRX_FORCE_OFF ) {
PHYPut(STROBE_SRFOFF); }
else if ( state == PHY_TRX_TX_ON ) {
PHYPut(STROBE_STXON); }
PHYEnd(); } ?? }
4.2.1 信号采集软件设计 系统初始化代码 Void Init(void) {
Stm32_Clock_Init(15); delay_init(120); uart_init(120,9600); KEY_Init(); LED_Init(); LCD_Init(0); While(1)
{
MAIN_task(); ?? }
}
void MAIN_task(void *pdata) {
u8 res,t; RETURN:
ICO_Cheak();
LCD_Clear(WHITE);
20
江西理工大学应用科学学院毕业设计
LCD_DisplayOff();
Windows(0,0,320,480,\ for(res=0;res<16;res++) {
ShowMainUi(res,WHITE,(u8*)names[res]); }
LCD_ShowString(100,0,80,16,16,1,\ LCD_ShowString(254,0,254,16,16,1,\ LCD_DisplayOn(); while(1) {
RTC_TimeShow(); LED1=!LED1; t=0;
t=TOUCH_Scan(); if(t!=0) {
GUI_HuaKuangKuang(t,BLUE); delay_ms(300); RecdiveData(); switch(t) {
case 1: GetClum();MAIN_task(pdata);goto RETURN;
case 2: dipslay_remain();MAIN_task(pdata);goto RETURN;
case 3:
AI_LoadPicFile(\ case 4: UI_ShowHelp(20,20);
MAIN_task(pdata);
goto RETURN;
case 5: Temp_Show();break;
case 6: break; } }
delay_ms(50); } }
4.2.1 串口通讯软件设计 u8 usmart_sys_cmd_exe(u8 *str) {
21
江西理工大学应用科学学院毕业设计
u8 i;
u8 sfname[MAX_FNAME_LEN]; u8 pnum; u8 rval; u32 res;
res=usmart_get_cmdname(str,sfname,&i,MAX_FNAME_LEN); if(res)return USMART_FUNCERR;
str+=i; for(i=0;i<8;i++) {
if(usmart_strcmp(sfname,sys_cmd_tab[i])==0)break; }
switch(i)
{ case 0: case 1:
printf(\#if USMART_USE_HELP #else
#endif
break; case 2:
printf(\
for(i=0;i for(i=0;i usmart_get_fname((u8*)usmart_dev.funs[i].name,sfname,&pnum,&rval); printf(\// } printf(\ break; case 4://hex??á? printf(\ usmart_get_aparm(str,sfname,&i); if(i==0)//2?êy?y3£ { 22 江西理工大学应用科学学院毕业设计 i=usmart_str2num(sfname,&res); if(i==0) { printf(\ }else if(i!=4)return USMART_PARMERR; else { printf(\\\r\\n\ usmart_dev.sptype=SP_TYPE_HEX; } }else return USMART_PARMERR; printf(\ break; case 5: printf(\ usmart_get_aparm(str,sfname,&i); if(i==0) { i=usmart_str2num(sfname,&res); if(i==0) { printf(\ }else if(i!=4)return USMART_PARMERR; else { printf(\\\r\\n\ usmart_dev.sptype=SP_TYPE_DEC; } }else return USMART_PARMERR; printf(\ break; case 6: printf(\ usmart_get_aparm(str,sfname,&i); if(i==0) { i=usmart_str2num(sfname,&res); if(i==0) { if(usmart_dev.sptype==SP_TYPE_HEX)printf(\); 23 江西理工大学应用科学学院毕业设计 } else printf(\ }else return USMART_PARMERR; }else return USMART_PARMERR; printf(\ break; default: return USMART_FUNCERR; } return 0; 采用流行的嵌入式实时操作系统uC/OS-II。uC/OS-II是一种基于优先级的可抢先的硬实时内核。自从92年发布以来,在世界各地都获得了广泛的应用,它是一种专门为嵌入式设备设计的内核,目前已经被移植到40多种不同结构的CPU上,运行在从8位到64位的各种系统之上。尤其值得一提的是,该系统自从2.51版本之后,就通过了美国FAA认证,可以运行在诸如航天器等对安全要求极为苛刻的系统之上。鉴于uC/OS-II可以免费获得代码,对于嵌入式RTOS而言,选择uC/OS无疑是最经济的选择。 软件设计中采用操作系统会使工作进行的非常安全稳定。uC/OS-II有具有很大的优势,占用内存也很小,所以选择它作为操作系统。uC/OS-II 采用的是可剥夺型实时多任务内核。可剥夺型的实时内核在任何时候都运行就绪了的最高优先级的任务。uC/os-II的任务调度是完全基于任务优先级的抢占式调度,也就是最高优先级的任务一旦处于就绪状态,则立即抢占正在运行的低优先级任务的处理器资源。为了简化系统设计,uC/OS-II规定所有任务的优先级不同,因为任务的优先级也同时唯一标志了该任务本身。对于作品中所有的功能可以分成几个模块,形成单个任务。每个任务规定不同的优先级,当受到请求信号之后执行相应的任务,不仅实时性好,而且工作非常的稳定。 为了方便用户操作及合理利用资源减少消耗,根据微处理器提供的各种模式,可以在特定的时间和场合将微处理器设定为不同的状态。 根据作平的功能需求及其他方面的安全性考虑,操作系统任务调度中可以划分为以下几个任务: 1.开关机及复位 2.数据采集分析处理 3.甲烷气体浓度超标报警控制 4.键盘检测及LCD显示 各任务具有不同的优先级,这里需要说明任务3的优先级是最高的,任务2其次。其他任务的优先级低。 4.3 本章小结 本章详细地介绍了ZigBee网络系统软件开发平台Cortex-M3,简单介绍了Cortex-M3内核结构及其内核机制和通信机制的研究,详述了相关的程序设计。 24