gn编译
1. 求教关于树莓派刷安卓2.3的问题
树莓派的 官方系统rasbian默认安装了python2和python3 但是版本都很旧了,可能与部分包不兼容,有两种解决方案,但都需要花费较长的时间 自行编译Python的安装包/infopi/p/update_python_raspbian.html 更改发行版本为最新的Jessie,执行以下三步 1234sed -i 's/wheezy/jessie/g' /etc/apt/sources.listsudo <a href="https:///s?wd=apt-get&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">apt-get</a> updatesudo <a href="https:///s?wd=apt-get&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">apt-get</a> upgradesudo <a href="https:///s?wd=apt-get&tn=44039180_cpr&fenlei=-bIi4WUvYETgN-" target="_blank" class="-highlight">apt-get</a> dist-upgrade第二种方案还有可能出现无法正常进入系统的情况
2. iappv5免费到底是什么
控件。
软件名称:iApp裕语言V5.0公测版
软件更新轨迹:
6.3更新内容:修复V3的nsz指定数组类型返回null异常
修复编辑框网络输入法华为版无法删除异常
修复部分BUG
6.2更新内容:修复V3的V7列表设置瀑布流滚动事件闪退
修复V5由模块错误导致的打包或编译闪退
5.31更新内容:新增V5系统功能的传感器xt.gn().cgq()
修复V5类模块无错误时任然提示错误的异常
修复部分BUG
5.30更新内容:修复V5快速点击进入代码编辑界面多次打开异常
修复V5类模块异常列表无法点击跳转异常位置异常
修复V5对象子成员赋值类型转换异常
修复部分输入法编程代码编辑框异常
修复部分BUG
5.28更新内容:更新v3支持多文件上传huf代码
更新v5完善的代码详细提示以及代码用法举例
重做v5导入的SDK资源整合
重做v5代码错异常反馈
修复v5自定义SDK代码提示无ID异常
修复v5自定义控件属性闪退异常
修复v5多SDK整合可能导致的资源属性重复异常
调整互动内容显示
修复部分BUG
5.22更新内容:新增V5加速编译打包,在管理里开启
新增V5的自定义控件,在添加控件的底部
修复部分BUG
5.16更新内容:新增界面皮肤主题,在管理里选择设置
新增V5创建界面输入中文转备注
新增V5的SDK管理支持ilib,aar,jar导入
修复部分BUG
5.13更新内容:新增V5的SDK管理支持ilib,aar,jar导入
修复部分BUG
5.7更新内容:新增V5支持中文编程
新增V5中文编程手册,根目录/iApp/iyu-中文编程V5.0.txt
新增V5编辑框右侧符号导航条
新增V3导航条代码格式化功能
新增编辑框代码块{}之间的竖线
优化编辑框输入成对的符号时自动完善
优化编辑框代码块{}的换行自动格式化
优化编程时中文符号自动转英文符号
优化导航条编辑框光标移动上下左右
修复编辑框部分输入法删除字符与回车的异常状况
重命名V5外边距、内边距相关统一用上下左右
3. gn的语言是允许0开头的非负数
(1)S->a || aS
a->0 || 2 || 4 || 6 || 8
(2)
S->2S || 4S || 6S || 8S || B || 空
B->a || aB
a->0 || 2 || 4 || 6 || 8
4. c语言 gcc编译器下 time()报错如何解决
time_t.TOxxx();//改变时间格式,然后应用新的时间格式打印就可以了,如printf("%s",time().ToString);
5. 单片机 按键秒表
你好!我这有份资料,希望对你有用!99秒马表设计1. 实验任务
(1. 开始时,显示“00”,第1次按下SP1后就开始计时。
(2. 第2次按SP1后,计时停止。
(3. 第3次按SP1后,计时归零。2. 电路原理图
图4.17.13. 系统板上硬件连线(1. 把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。 (2. 把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。 (3. 把“单片机系统“区域中的P3.5/T1用导线连接到”独立式键盘“区域中的SP1端口上; 4. 程序框图
主程序框图T0中断服务程序框图 图4.17.2 5. 汇编源程序
TCNTA EQU 30H
TCNTB EQU 31H
SEC EQU 32H
KEYCNT EQU 33H
SP1 BIT P3.5
ORG 00H
LJMP START
ORG 0BH
LJMP INT_T0
START: MOV KEYCNT,#00H
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV TMOD,#02H
SETB ET0
SETB EA
WT: JB SP1,WT
LCALL DELY10MS
JB SP1,WT
INC KEYCNT
MOV A,KEYCNT
CJNE A,#01H,KN1
SETB TR0
MOV TH0,#06H
MOV TL0,#06H
MOV TCNTA,#00H
MOV TCNTB,#00H
LJMP DKN
KN1: CJNE A,#02H,KN2
CLR TR0
LJMP DKN
KN2: CJNE A,#03H,DKN
MOV SEC,#00H
MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
MOV KEYCNT,#00H
DKN: JNB SP1,$
LJMP WT
DELY10MS:
MOV R6,#20
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0:
INC TCNTA
MOV A,TCNTA
CJNE A,#100,NEXT
MOV TCNTA,#00H
INC TCNTB
MOV A,TCNTB
CJNE A,#4,NEXT
MOV TCNTB,#00H
INC SEC
MOV A,SEC
CJNE A,#100,DONE
MOV SEC,#00H
DONE: MOV A,SEC
MOV B,#10
DIV AB
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P2,A
NEXT: RETI
TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
6. 国税开发票系统打不开怎么办“注册gregn50.dll失败”
一、如果在运行某软件或编译程序时提示缺少、找不到gregn50.dll等类似提示,可将从网站上下载来的gregn50.dll拷贝到指定目录即可(一般是system系统目录或放到软件同级目录里面),或者重新添加文件引用。
二、从网站上下载下来文件之后,先将其解压(一般都是rar压缩包),
然后根据系统的情况选择X86/X64,X86为32位电脑,X64为64位电脑。
三、根据软件情况选择文件版本。此步骤比较复杂,如果是Windows的dll文件,
版本号以5.0开头的或含有 nt
一般是windows2000的文件。
版本号以5.1开头的或含有 xp、xpsp1、xpsp2、xpsp3
信息的一般是windowsXP的文件。
版本号以6.0开头的或含有 longhorn、vista 信息的一般是windowsVista的文件。
版本号以6.1开头的或含有 win7 信息的一般是windows7的文件。
如果不是windows的dll文件,则需要灵活查看版本号、描述、网友提供的信息、以及相关dll的版本号去判断。
四、直接拷贝该文件到系统目录里:
1、Windows
95/98/Me系统,将gregn50.dll复制到C:\Windows\System目录下。
2、Windows
NT/2000系统,将gregn50.dll复制到C:\WINNT\System32目录下。
3、Windows
XP/WIN7/Vista系统,将gregn50.dll复制到C:\Windows\System32目录下。
4、如果系统是64位的请将文件复制到C:\Windows\SysWOW64目录
五、打开"开始-运行-输入regsvr32 gregn50.dll",回车即可解决。
7. 怎样用命令行在TC中编译程序
Turbo C++ Version 3.00 Copyright (c) 1992 Borland International
Syntax is:
TCC [options] file[s]
[ * = default; -x- = turn switch x off ]
[options]
-1 80186/286 Instructions
-2 80286 Protected Mode Inst.
-Ax Disable extensions
-B Compile via assembly
-C Allow nested comments
-Dxxx Define macro
-Exxx Alternate Assembler name
-G Generate for speed
-Ixxx Include files directory
-K Default char is unsigned
-Lxxx Libraries directory
-M Generate link map
-N Check stack overflow
-O Optimize jumps
-P Force C++ compile
-Qxxx Memory usage control
-S Proce assembly output
-Txxx Set assembler option
-Uxxx Undefine macro
-Vx Virtual table control
-X Suppress autodep. output
-Yx Overlay control
-Z Suppress register reloads
-a Generate word alignment
-b * Treat enums as integers
-c Compile only
-d Merge plicate strings
-exxx Executable file name
-fxx Floating point options
-gN Stop after N warnings
-iN Max. identifier length
-jN Stop after N errors
-k Standard stack frame
-lx Set linker option
-mx Set Memory Model
-nxxx Output file directory
-oxxx Object file name
-p Pascal calls
-r * Register variables
-u * Underscores on externs
-v Source level debugging
-wxxx Warning control
-y Proce line number info
-zxxx Set segment names
8. 通达信手机软件公式出现编译错误怎样解决
这个指标在电脑上用应该是正常的,
因为手机上不支持跨周期引用数据所以,会有错误提示.
所以这个指标在手机上用不了.
9. 上位机应用程序,原理图和PCB的设计。
/*测试的时候是在idleapp.c中测试的,在函数IdleSetLRKey中通过SetKeyHandler(start_uart_echo, KEY_LEFT_ARROW,KEY_EVENT_UP);来启动串口,然后就可以在上位机中通过串口调试助手发送指令操作MTK手机了*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include "stdC.h"
#include "MMI_Features.h" /* 编译开关会出现在这个由make update生成的文件里面 */
#include "L4Dr.h"
#include "L4Dr1.h"
#include "AllAppGprot.h"
#include "FrameworkStruct.h"
#include "GlobalConstants.h"
#include "EventsGprot.h"
#include "mmiappfnptrs.h"
#include "HistoryGprot.h"
#include "MainMenuDef.h"
#include "wgui_categories.h"
#include "Unicodexdcl.h"
#include "gui_data_types.h"
#include "Uart_sw.h"
#include "SettingProfile.h"
// 我们要用到的串口, uart_port1是枚举型数值,usb串口的编号
#define HELLO_WORLD_UART_PORT uart_port1 // 手机接USB下载线的地方
// 定义我们的应用所属系统的哪一个模块
// 这里是MMI模块,实际上我更愿意称MMI为一个子系统,将我们的应用称为模块
#define MOD_HELLO_WORLD MOD_MMI
// 数据接收Buffer大小
#define MAX_ECHO_PACKET_LEN 128
// 外部函数申明,没有对应头文件,手动加吧
extern mole_type UART_GetOwnerID(UART_PORT port);
extern void UART_ClrTxBuffer(UART_PORT port, mole_type ownerid);
extern void UART_ClrRxBuffer(UART_PORT port, mole_type ownerid);
extern void playRequestedTone(ALL_TONE_ENUM playtone);
// 本程序内部使用的函数申明
static void init_uart(void);
static void mmi_HelloWorld_uart_readyToRead_ind_handler(void *msg);
static U16 read_from_uart(U8 *pbyBuf, U16 wLenMax, UART_PORT hPort, mole_type hOwner);
static U8 write_to_uart(U8 *pbyBuf, U16 wLenBuf, UART_PORT hPort, mole_type hOwner);
static void exit_uart();
static void start_uart_echo(void);
static void uart_echo_process(void);
static void stop_uart_echo(void);
// 睡眠模式句柄
static kal_uint8 ghSleepMode;
// 我们要用到的串口之前的占用者
static mole_type gnOrigUartOwner;
static kal_bool gbUartInitialized = KAL_FALSE;
static kal_bool gbUartEchoStarted = KAL_FALSE;
static U16 gwLenUartBuffer = 0;
static U8 gabyUartBuffer[MAX_ECHO_PACKET_LEN];
static void init_uart(void)
{
if(gbUartInitialized)
{
return;
}
ghSleepMode = L1SM_GetHandle();
// 禁止休眠,休眠后串口收发会有问题
// 问题:如何做到串口唤醒? FIXME
L1SM_SleepDisable(ghSleepMode);
// 记录我们要用的串口的当前占有者
gnOrigUartOwner = UART_GetOwnerID(HELLO_WORLD_UART_PORT);
// 下面我们申明要占用这个串口了
UART_SetOwner(HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
// 以上对串口占用的申明,我理解更多是一种编程者之间的约定
// 当发现串口的占用者不是本程序所属模块时,说明我们申明占用之后
// 又有其他模块申明占用同一个串口,此时如果收到数据应不予处理
// 当然,也有可能同一模块的其他程序申明占用同一串口
// 这需要在设计应用时统一协调,避免数据发生混乱
// 设置波特率,缺省的起停位和校验为:8,n,1,即8个数据位,1个停止位,无校验
UART_SetBaudRate(HELLO_WORLD_UART_PORT, UART_BAUD_115200, MOD_HELLO_WORLD);
// 其他串口设定(如起停位、校验等)使用函数 UART_ReadDCBConfig 和 UART_SetDCBConfig
// 详细参数见结构体 UARTDCBStruct
// 注册一个事件钩子函数,当串口(任何)有数据到达时,我们的钩子函数将被调用
// 注意,同一种事件同时只能注册一个钩子函数,因此:
// 如果在我们的程序处理串口的同时还有其他程序要读取和处理(任何)串口数据,
// 就必须由当前的钩子函数代为处理
// 实际上我觉得系统底层可以改一下,改成Windows钩子的方式,可以挂多个,能够依次调用或跳过
SetProtocolEventHandler(mmi_HelloWorld_uart_readyToRead_ind_handler, MSG_ID_UART_READY_TO_READ_IND);
gbUartInitialized = KAL_TRUE;
}
static U16 read_from_uart(U8 *pbyBuf, U16 wLenMax, UART_PORT hPort, mole_type hOwner)
{
U16 wLenAvail;
U16 wLenRead;
U16 wLenRet = 0;
U8 byStatus = 0;
// 收取数据,超出最大包长的数据将简单丢弃,这一层需要具体的应用协议做相应处理
while( (wLenAvail = UART_GetBytesAvail(hPort) > 0 && wLenRet < wLenMax) )
{
if (wLenAvail + wLenRet > wLenMax)
{
wLenAvail = wLenMax - wLenRet;
}
wLenRead = UART_GetBytes(hPort, (kal_uint8 *)(pbyBuf + wLenRet), (kal_uint16)wLenAvail, &byStatus, hOwner);
wLenRet += wLenRead;
}
// 读完之后,清除接收Buffer
UART_ClrRxBuffer(hPort, hOwner);
return wLenRet;
}
static U8 write_to_uart(U8 *pbyBuf, U16 wLenBuf, UART_PORT hPort, mole_type hOwner)
{
U16 wSent= 0;
U8 bRet = FALSE;
// 发送前清FIFO和Buffer,注意:这一步必须做,否则收发会有问题
UART_Purge(hPort, RX_BUF, hOwner); // 清除设备输入FIFO
UART_Purge(hPort, TX_BUF, hOwner); // 清除设备输出FIFO
UART_ClrTxBuffer(hPort, hOwner); // 清除发送Buffer
UART_ClrRxBuffer(hPort, hOwner); // 清除接收Buffer
wSent = UART_PutBytes(hPort, (kal_uint8 *)pbyBuf, (kal_uint16)wLenBuf, hOwner);
if (wSent == wLenBuf)
{
bRet = TRUE;
}
return bRet ;
}
static void exit_uart()
{
if(gbUartInitialized)
{
// 恢复成原有的端口占用者
UART_SetOwner(HELLO_WORLD_UART_PORT, (kal_uint8) gnOrigUartOwner);
// 允许休眠
L1SM_SleepEnable(ghSleepMode);
gbUartInitialized = KAL_FALSE;
}
}
static void mmi_HelloWorld_uart_readyToRead_ind_handler(void *msg)
{
uart_ready_to_read_ind_struct* uart_rtr_ind = (uart_ready_to_read_ind_struct*)msg;
// 检查一下端口以及所有者信息,不匹配的数据略过
// 注意,作为例子程序,我们只是查看和处理我们关心的数据
// 其他与此同时需要监听和处理串口数据的程序,须由相关的代码完成代理的工作
if( KAL_FALSE == gbUartEchoStarted ||
HELLO_WORLD_UART_PORT != uart_rtr_ind->port ||
MOD_HELLO_WORLD != UART_GetOwnerID(uart_rtr_ind->port) )
{
// 如果底层能做成钩子链,这里就可以调用钩子链的下一个钩子了
return;
}
gwLenUartBuffer = read_from_uart(gabyUartBuffer, sizeof(gabyUartBuffer), HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
// 呼叫数据处理部分
uart_echo_process();
}
static void start_uart_echo(void)
{
S8 strHello[] = "Hello World Uart Echo Example Started!\r\n";
if(gbUartEchoStarted)
{
return;
}
init_uart();
write_to_uart((kal_uint8*)strHello, (kal_uint16)strlen(strHello), HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
gbUartEchoStarted = KAL_TRUE;
SetKeyHandler(stop_uart_echo, KEY_LSK, KEY_EVENT_UP);
}
void mmi_sndrec_send_record_req(void);
void mmi_sndrec_stop_record(void);
void mmi_sndrec_entry_edit_name(void);
void mmi_sndrec_entry_rename_option(void);
void mmi_sndrec_entry_save(void);
extern void MakeCall(PS8 strNumber);
extern void EntryScrNotifyCallAborted(void);
void make_call_test(void)
{
S8 numb[6]="10086";
U16 newnumb[6];
memset(newnumb,0,sizeof(newnumb));
AnsiiToUnicodeString((S8*)newnumb,(S8*)numb);
MakeCall((char *)newnumb);
}
#include "F:\HUAYU\P1300\New\P1300_V1.7_Release\custom\drv\misc_drv\NEOTEL25_06B_BB\codegen\Gpio_drv.h"
#include "Gpio_sw.h"
extern void HangupAllCalls(void);
extern void ChargingPwnOnThanPwnOn();
extern void ShutdownSystemOperation(void);
static void uart_echo_process(void)
{
U8 i;
char my_data_buffer[256];
// 稍稍处理一下,这样就能看出是否确实是我们的程序在处理数据
for(i = 0; i < gwLenUartBuffer; i++)
{
AnsiiToUnicodeString((S8 *)my_data_buffer, (S8 *)gabyUartBuffer);
GPIO_ModeSetup((kal_uint16)GPIO_PORT_43, (kal_uint16)0);
GPIO_InitIO((char)1, (char)GPIO_PORT_43);
if(my_data_buffer[0]=='p'&&my_data_buffer[2]=='t')
{
S8 strByte[] = "Play tone successfully\r\n";
playRequestedTone(ALARM_TONE);
write_to_uart((kal_uint8*)strByte, (kal_uint16)strlen(strByte), HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
}
else if(my_data_buffer[0]=='s'&&my_data_buffer[2]=='t')
{
stopRequestedTone(ALARM_TONE);
}
else if(my_data_buffer[0]=='d'&&my_data_buffer[2]=='h')
{
S8 numb[30];
memset(numb,0,sizeof(numb));
numb[0]=my_data_buffer[4];
numb[2]=my_data_buffer[6];
numb[4]=my_data_buffer[8];
numb[6]=my_data_buffer[10];
numb[8]=my_data_buffer[12];
numb[10]=my_data_buffer[14];
numb[12]=my_data_buffer[16];
numb[14]=my_data_buffer[18];
numb[16]=my_data_buffer[20];
numb[18]=my_data_buffer[22];
numb[20]=my_data_buffer[24];
MakeCall((char *)numb);
}
else if(my_data_buffer[0]=='h'&&my_data_buffer[2]=='a'&&my_data_buffer[4]=='n'&&my_data_buffer[6]=='g')
{
EntryScrNotifyCallAborted();
}
else if(my_data_buffer[0]=='y'&&my_data_buffer[2]=='d'&&gwLenUartBuffer==2)
{
make_call_test();
}
else if(my_data_buffer[0]=='i'&&my_data_buffer[2]=='o')
{
GPIO_WriteIO((char)1, (char)GPIO_PORT_43);
}
else if(my_data_buffer[0]=='o'&&my_data_buffer[2]=='d')
{
GPIO_WriteIO((char)0, (char)GPIO_PORT_43);
}
else if(my_data_buffer[0]=='x'&&my_data_buffer[2]=='f')
{
ChargingPwnOnThanPwnOn();
}
else if(my_data_buffer[0]=='c'&&my_data_buffer[2]=='d')
{
HangupAllCalls();
}
else
{
//if(gabyUartBuffer[i] >= 'a' && gabyUartBuffer[i] <= 'z')
gabyUartBuffer[i] -= 0x20;
}
}
// 回显
write_to_uart(gabyUartBuffer, gwLenUartBuffer, HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
}
static void stop_uart_echo(void)
{
S8 strBye[] = "Hello World Uart Echo Example Stop!\r\n";
if(gbUartEchoStarted)
{
write_to_uart((kal_uint8*)strBye, (kal_uint16)strlen(strBye), HELLO_WORLD_UART_PORT, MOD_HELLO_WORLD);
gbUartEchoStarted = KAL_FALSE;
SetKeyHandler(start_uart_echo, KEY_LSK, KEY_EVENT_UP);
}
exit_uart();
}
#include "OrganizerDef.h"
extern void mmi_HelloWorld_exit(void);
/* 模块入口 */
void mmi_HelloWorld_entry(void)
{
S32 x,y;
x=30;y=0;
/* 强制退出当前屏幕,之后进入到我们的模块了 */
/* 上电缺省是idle屏幕,现进入MAIN_MENU_SCREENID屏 */
/* 注意看第二个参数,这个是当我们模块被强制退出时执行的一些操作 */
EntryNewScreen(ORGANIZER_SCREENID, mmi_HelloWorld_exit, NULL, NULL);
gui_lock_double_buffer();
/* 关掉屏幕顶部的状态条,我们要用整个屏幕 */
entry_full_screen();
/* 擦除当前背景 */
clear_screen();
y+=50;
gui_set_text_color(UI_COLOR_RED);
gui_move_text_cursor(x,y);
gui_print_text(L"Uart Test");
gui_unlock_double_buffer();
/* 刷新屏幕显示,MMI用的是双缓冲绘图方式,而且需要显式刷新 */
gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1);
/* 注册一个按键处理,右软键弹起时返回到之前被我们强制退出的模块 */
SetKeyHandler(GoBackHistory, KEY_RSK, KEY_EVENT_UP);
// SetKeyHandler(stop_play_anim, KEY_LSK, KEY_EVENT_UP);
SetKeyHandler(start_uart_echo, KEY_LSK, KEY_EVENT_UP);
}
/* 模块出口
* 当我们的模块被其他模块强制退出时会执行这个函数,
* 这个函数的常见写法,包括:
* 1、模块已申请资源的释放(如果需要的话),这一步可选
* 2、手动把自己压栈到窗口(实际是整个屏)堆栈里面,
* 便于强制我们退出的模块执行完后重新把我们叫出来
* 不像Window的窗口管理是自动压栈的,Pluto MMI需要手动压栈
* 3、其他一些清理动作
*/
void mmi_HelloWorld_exit(void)
{
history currHistory;
S16 nHistory = 0;
currHistory.scrnID = MAIN_MENU_SCREENID;
currHistory.entryFuncPtr = mmi_HelloWorld_entry;
pfnUnicodeStrcpy( (S8*)currHistory.inputBuffer, (S8*)&nHistory);
AddHistory(currHistory);
stop_uart_echo();
}
//////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////