【杰理AC1082D】开发过程问题记录

调试记录,不常用,避免忘记

没连接开发板,直接用IDE编译会报一个错误:
【杰理AC1082D】开发过程问题记录_第1张图片
开发板必须上电下载程序,掉电程序不保存。

出现下面问题,可能是因为程序路径太深:
【杰理AC1082D】开发过程问题记录_第2张图片
正常下载到开发板!
【杰理AC1082D】开发过程问题记录_第3张图片
开发板时钟选择:
【杰理AC1082D】开发过程问题记录_第4张图片
烧IC时,时钟选择:
【杰理AC1082D】开发过程问题记录_第5张图片
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初始化:
【杰理AC1082D】开发过程问题记录_第6张图片

你可能感兴趣的:(AC109系列问题,程序人生)