调试记录,不常用,避免忘记
没连接开发板,直接用IDE编译会报一个错误:
开发板必须上电下载程序,掉电程序不保存。
出现下面问题,可能是因为程序路径太深:
正常下载到开发板!
开发板时钟选择:
烧IC时,时钟选择:
SD卡检测方式:
实现按键多击消息(移植AC695X的按键处理):
cur_key = key_filter(cur_key); //过滤按键,相当于去抖
if (cur_key != last_key) {
if (cur_key == NO_KEY) { //cur_key = NO_KEY; last_key = valid_key -> 按键被抬起
if (key_press_counter >= KEY_LONG_CNT) { //长按/HOLD状态之后被按键抬起;
key_status = KEY_LONG_UP;
back_last_key = last_key;
goto _notify; //发送抬起消息
}
click_delay_cnt = 1; //按键等待下次连击延时开始
} else { //cur_key = valid_key, last_key = NO_KEY -> 按键被按下
key_press_counter = 1; //用于判断long和hold事件的计数器重新开始计时;
if (cur_key != notify_value) { //第一次单击/连击时按下的是不同按键, 单击次数重新开始计数
click_cnt = 1;
notify_value = cur_key;
} else {
click_cnt++; //单击次数累加
}
}
goto _scan_end; //返回, 等待延时时间到
} else { //cur_key = last_key -> 没有按键按下/按键长按(HOLD)
if (cur_key == NO_KEY) { //last_key = NO_KEY; cur_key = NO_KEY -> 没有按键按下
if (click_cnt > 0) { //有按键需要消息需要处理
if (click_delay_cnt > 20) { //按键被抬起后延时到
//TODO: 在此可以添加任意多击事件
if (click_cnt >= 3) {
key_status = KEY_EVENT_TRIPLE_CLICK; //三击
} else if (click_cnt >= 2) {
key_status = KEY_EVENT_DOUBLE_CLICK; //双击
} else {
key_status = KEY_SHORT_UP; //单击
}
back_last_key = notify_value;
goto _notify;
} else { //按键抬起后等待下次延时时间未到
click_delay_cnt++;
goto _scan_end; //按键抬起后延时时间未到, 返回
}
} else {
goto _scan_end; //没有按键需要处理
}
} else { //last_key = valid_key; cur_key = valid_key, press_cnt累加用于判断long和hold
key_press_counter++;
//my_printf("key_press_counter: %d\n",key_press_counter);
if (key_press_counter == KEY_LONG_CNT) {
key_status = KEY_LONG;
} else if (key_press_counter == (KEY_LONG_CNT + KEY_HOLD_CNT)) {
key_status = KEY_HOLD;
key_press_counter = KEY_LONG_CNT;
} else {
goto _scan_end; //press_cnt没到长按和HOLD次数, 返回
}
//press_cnt没到长按和HOLD次数, 发消息
back_last_key = cur_key;
goto _notify;
}
}
_notify:
click_cnt = 0; //单击次数清0
notify_value = NO_KEY;
LED_FADE_ON();
if(key_status!=NO_KEY){
//my_printf("back_last_key: %d key_status: %d\n",back_last_key,key_status);
msg_filter(key_status, back_last_key);
}
_scan_end:
last_key = cur_key;
使用IOkey发现按键释放很慢,要在检测时加上IO初始化: