From c1f70d8d172aee52fcdaef3ae37ba4f0d35c2b97 Mon Sep 17 00:00:00 2001 From: n2232 Date: Fri, 4 Feb 2011 06:53:26 +0000 Subject: [PATCH] =?UTF-8?q?zeroNUP=20=E3=81=8C=E6=B5=81=E3=82=8C=E3=80=811?= =?UTF-8?q?NUP=E3=81=AB=E5=85=A5=E3=82=8C=E3=82=8B=E3=81=B9=E3=81=8F?= =?UTF-8?q?=E4=BD=9C=E6=A5=AD=E4=B8=AD=20=E3=83=BBTWL=E3=81=AB=E9=9F=B3?= =?UTF-8?q?=E9=87=8F=E5=A4=89=E5=8C=96=E5=89=B2=E3=82=8A=E8=BE=BC=E3=81=BF?= =?UTF-8?q?=E3=82=92=E5=85=A5=E3=82=8C=E3=81=BE=E3=81=8F=E3=82=89=E3=81=AA?= =?UTF-8?q?=E3=81=84=E3=80=82=20=E3=80=80ACK=E3=81=A8=E3=81=97=E3=81=A6?= =?UTF-8?q?=E3=81=AEREAD=E3=82=92=E6=9C=9F=E5=BE=85=E3=81=9B=E3=81=9A?= =?UTF-8?q?=E3=80=81=E5=A4=89=E5=8C=96=E3=81=97=E3=81=9F=E5=88=86=E3=81=A0?= =?UTF-8?q?=E3=81=91=E5=85=A5=E3=82=8C=E3=82=8B=20=E3=83=BB=E6=AD=A9?= =?UTF-8?q?=E6=95=B0=E8=A8=88=E3=83=AD=E3=82=B0=E3=82=92=E3=82=AF=E3=83=AA?= =?UTF-8?q?=E3=82=A2=E5=BE=8C=E3=80=811=E6=AD=A9=E7=9B=AE=E3=82=92?= =?UTF-8?q?=E3=82=AB=E3=82=A6=E3=83=B3=E3=83=88=E3=81=97=E3=81=9F=E3=81=A8?= =?UTF-8?q?=E3=81=93=E3=82=8D=E3=81=8B=E3=82=89=E3=83=AD=E3=82=B0=E3=81=84?= =?UTF-8?q?=E3=81=A3=E3=81=B1=E3=81=84=E3=81=A7=E6=AD=A2=E3=82=81=E3=82=8B?= =?UTF-8?q?=20=E3=80=80=EF=BC=86=E4=B8=80=E5=BF=9C=E3=83=AA=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=AF=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0=20?= =?UTF-8?q?=E3=80=80=E3=80=80=E5=B9=B4=E3=81=BE=E3=81=9F=E3=81=8E=E3=81=AA?= =?UTF-8?q?=E3=81=A9=E4=B8=80=E9=80=9A=E3=82=8A=E3=83=81=E3=82=A7=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=AF=E3=81=97=E3=81=9F=E3=81=8C=E2=80=A6=20?= =?UTF-8?q?=E3=81=BC=E3=81=A1=E3=81=BC=E3=81=A1=E3=83=96=E3=83=A9=E3=83=B3?= =?UTF-8?q?=E3=83=81=E3=82=92=E5=88=87=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@308 013db118-44a6-b54f-8bf7-843cb86687b1 --- trunk/adc.c | 1 + trunk/adc.h | 1 + trunk/config.h | 2 +- trunk/hoge.bin | Bin 16387 -> 16387 bytes trunk/jhl_defs.h | 18 +- trunk/pedo_alg_thre_det2.c | 373 ++++++++++++++++++------------------- trunk/pedometer.h | 11 +- trunk/task_misc.c | 31 +-- trunk/vreg_twl.c | 6 - trunk/vreg_twl.h | 3 - trunk/yav_mcu_bsr.pri | 77 ++++---- 11 files changed, 270 insertions(+), 253 deletions(-) diff --git a/trunk/adc.c b/trunk/adc.c index ae24b30..cf87bdc 100644 --- a/trunk/adc.c +++ b/trunk/adc.c @@ -27,6 +27,7 @@ u8 adc_raw_dep; u8 vol_polling; +u8 vol_level_twl; typedef struct filter_work diff --git a/trunk/adc.h b/trunk/adc.h index 1b48731..d49c5da 100644 --- a/trunk/adc.h +++ b/trunk/adc.h @@ -35,6 +35,7 @@ /////////////////////////////////////// extern u8 vol_polling; +extern u8 vol_level_twl; diff --git a/trunk/config.h b/trunk/config.h index a150b01..c98a2db 100644 --- a/trunk/config.h +++ b/trunk/config.h @@ -15,7 +15,7 @@ #define MCU_VER_MAJOR 0x01 -#define MCU_VER_MINOR 0x15 +#define MCU_VER_MINOR 0x20 #define _firm_format_v3_ diff --git a/trunk/hoge.bin b/trunk/hoge.bin index e763444d2580aaa47616f2d7629333c1e11219d3..d72762d6d0ff61bb5e68e0f288f6c7d3c5824b3a 100644 GIT binary patch delta 4521 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 S9|%eSua?XWp8iZHi2nsM*pveR diff --git a/trunk/jhl_defs.h b/trunk/jhl_defs.h index 02299df..ca5b913 100644 --- a/trunk/jhl_defs.h +++ b/trunk/jhl_defs.h @@ -28,8 +28,9 @@ typedef signed short sx16; # ifdef _WIN32 +// VCの赤線をどうにかする -typedef bool bit; +#define bit bool void EI(){}; void DI(){}; @@ -83,6 +84,21 @@ unsigned char WDTE; void EI(){;} void DI(){;} +unsigned char RWAIT; +unsigned char RWST; + +unsigned char bcdtob( unsigned char ); + +unsigned char HOUR; +unsigned char DAY; +unsigned char MONTH; +unsigned char YEAR; +unsigned char MIN; +unsigned char SEC; + + + + # endif #endif diff --git a/trunk/pedo_alg_thre_det2.c b/trunk/pedo_alg_thre_det2.c index 5d98fd7..7aaa887 100644 --- a/trunk/pedo_alg_thre_det2.c +++ b/trunk/pedo_alg_thre_det2.c @@ -17,16 +17,39 @@ #include "pool.h" // ======================================================== -static void hosu_increment(); +// 履歴の最終記録時刻 +// この順番はログ読み出しの順番でもあるのでいじらないでね +// 順番にアドレスの若いのから確保されるのを期待してます... +typedef struct{ + u8 hour_bcd; + u8 day_bcd; + u8 month_bcd; + u8 year_bcd; + u8 min_bcd; + u8 sec_bcd; +}st_calender; // ======================================================== -u16 get_long_hour(); +static void hosu_increment_if_necessary(); +static u16 get_long_hour(); +static u16 calc_hours_spend( u8 ); + + + +// ======================================================== +bit pedolog_overflow; // 192時間記録済みフラグ(i2cで読める) +extern uni_pool pool; // 歩数ログはこの構造体の中 +static u8 p_record; // ログの書き込み位置 +static st_calender cal_log_latest; // 最後に歩数を更新した時刻 +static u16 last_hour_fny; // fny:from new year +static st_calender cal_temp; +static u16 now_longhour; + + -extern uni_pool pool; -bit pedolog_overflow; // ======================================================== @@ -35,6 +58,11 @@ bit pedolog_overflow; unsigned long my_sqrt(); #endif +// 今年は閏年? +#define is_leapyear( y ) (( y & 0x03 ) == 0 ) +// 「去年」は閏年? +#define is_firstyear( y ) (( y & 0x03 ) == 1 ) + /*========================================================= @@ -82,7 +110,7 @@ void pedometer() hist_indx += 1; - // ヒストリにフィルタを掛けて、今回の値を求める + // ヒストリにフィルタ(fir)を掛けて、今回の値を求める // filterd = 0; // for( i = 8; i != 55; i++ ) // 係数が0ばかりのため for( i = 0; i != 46; i++ ) // 係数テーブルをいじりました。パラメータ調整時注意 @@ -90,7 +118,7 @@ void pedometer() filterd += (signed long)norm_hist[ ( hist_indx + i ) & TAP-1 ] * lpf_coeff[ i ]; } - filterd += (4096)*512; + filterd += (4096)*512; // DC分加算...だったと思う acc_norm_temp = (s16)( filterd /1024 & 0xFFFF ); // ←FIL_COEFF_QUANTから正規化 /* if( acc_norm[0] < acc_norm_temp ) @@ -123,11 +151,12 @@ void pedometer() { if( acc_norm[0] - peak_l > 4200 ){ // ■一歩増えました - hosu_increment(); + hosu_increment_if_necessary(); } } interval_hh = 0; } + // なんちゃって閾値の動的変更 if( acc_norm[0] > 18000 ) { th_L = acc_norm[0] - 10000; @@ -154,29 +183,6 @@ void pedometer() { time_l += ( time_l != 255 ) ? 1: 0; } - -#ifdef _DBG_PEDO_AUTO_ENABLE_ - { - static u8 i = 0; - - vreg_ctr[ 0x50 ] = i++; - - vreg_ctr[ 0x51 ] = (u8)( acc_norm[0] / 256 & 0x00FF ); - vreg_ctr[ 0x52 ] = (u8)( acc_norm[0] & 0x00FF ); - - vreg_ctr[ 0x53 ] = (u8)( norm_hist[ hist_indx -1 & TAP-1 ] / 256 & 0xFF ); - vreg_ctr[ 0x54 ] = (u8)( norm_hist[ hist_indx -1 & TAP-1 ] & 0xFF ); - - vreg_ctr[ 0x55 ] = interval_hh; - vreg_ctr[ 0x56 ] = time_l; - - vreg_ctr[ 0x57 ] = vreg_ctr[ VREG_C_ACC_HOSU_L ]; - vreg_ctr[ 0x58 ] = (u8)( peak_l / 256 & 0x00FF ); - vreg_ctr[ 0x59 ] = (u8)( peak_l & 0x00FF ); -// vreg_ctr[ 0x5A ] = (u8)( norm_avg[0] / 256 & 0x00FF ); -// vreg_ctr[ 0x5B ] = (u8)( norm_avg[0] & 0x00FF ); - } -#endif } @@ -188,134 +194,83 @@ void pedometer() *2011/01/20 仕様変更 ログがいっぱいになったらそこで止める ========================================================*/ -u8 p_record; -u8 log_year; -u8 pedo_log_latest[ 6 ]; -enum { - LEDO_LOG_LATEST_HOUR, - LEDO_LOG_LATEST_DAY, - LEDO_LOG_LATEST_MONTH, - LEDO_LOG_LATEST_YEAR, - LEDO_LOG_LATEST_MIN, - LEDO_LOG_LATEST_SEC -}; - -/* -u8 last_hour; // 履歴の最新は何時? -u8 last_day; -u8 last_month; -u8 pedo_log_latest[ LEDO_LOG_LATEST_YEAR ]; -u8 last_min; -u8 last_sec; -*/ #define HOSU_NODATA 0xFFFF #define HOSU_MAX 0xFFFE -static void hosu_increment() +static void hosu_increment_if_necessary() { - static u16 last_hour_fny; // from new year + u8 year_compd; // hour境界補正済み現在年。comp(ensation) - // 空白の時間を考慮する。1時間以上放置されたなど。 - u16 now_longhour; - u8 now_year; - - u8 temp_year, temp_hour, temp_day, temp_month, temp_min, temp_sec, log_year_temp; - - // 時計を止める必要が有るので↓は一気に行って下さい + // 現在時刻取得 DI(); RWAIT = 1; while( !RWST ){;} - log_year_temp = temp_year = bcdtob( YEAR ); - // 履歴読み出し時に使用。BCDのままでよい - temp_hour = HOUR; - temp_day = DAY; - temp_month = MONTH; - temp_min = MIN; - temp_sec = SEC; + cal_temp.hour_bcd = HOUR; + cal_temp.day_bcd = DAY; + cal_temp.month_bcd = MONTH; + cal_temp.year_bcd = YEAR; + cal_temp.min_bcd = MIN; + cal_temp.sec_bcd = SEC; + + RWAIT = 0; + EI(); + + year_compd = bcdtob( cal_temp.year_bcd ); + now_longhour = get_long_hour(); - // RWAIT = 0; ↑で行っています - // EI(); 〃 - - // 元旦零時台で昨日扱いになった場合の帳尻合わせ - if( now_longhour == 65535 ) - { - now_longhour = ( ( 365 + (( temp_year & 0x03 ) == 1 ? 1: 0 )) * 24 ) -1; // 閏年を考慮 - temp_year -= 1; - } - // 書き込みポインタの更新 - if(( vreg_ctr[ VREG_C_ACC_HOSU_L ] | vreg_ctr[ VREG_C_ACC_HOSU_M ] | vreg_ctr[ VREG_C_ACC_HOSU_H ] ) != 0 ) + if( ! ( vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 && // 歩数計on後、最初の一歩までは前回からの経過時間を計算しない + vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 && + vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 )) //. 全ビットorでゼロ判定するのはデジタル回路屋の方言みたい { - // 歩数計が止まっていた時間を考慮して必要なら進める - if( pedo_log_latest[ LEDO_LOG_LATEST_YEAR ] == temp_year ) - { - if( now_longhour > last_hour_fny ) - { - fill_hosu_hist_hours( now_longhour - last_hour_fny ); - } - } - else if( pedo_log_latest[ LEDO_LOG_LATEST_YEAR ] == ( temp_year -1 ) ) - { - // 年をまたいでいるとき - fill_hosu_hist_hours( ( ( 365 + (( temp_year & 0x03 ) == 1 ? 1: 0 )) * 24 ) - last_hour_fny + now_longhour ); - } - else if( pedo_log_latest[ LEDO_LOG_LATEST_YEAR ] < temp_year ) - { - // 数年放置 - fill_hosu_hist_hours( 0 ); - } - else - { - // カレンダーが巻き戻るなど - // ノーケアでよい - } + // 歩数計が止まっていた時間を考慮して必要なら進める + // 補正計算 元旦零時台で昨日扱いになった場合、大晦日の23時台に上書き + if( now_longhour == (u16)-1 ) // マジックナンバーとかではなくて実際に計算結果が-1 + { + now_longhour = ( ( 365 + ( is_firstyear(year_compd) ? 1: 0 )) * 24 ) -1; + year_compd -= 1; + } + fill_hosu_hist_hours( calc_hours_spend( year_compd ) ); // ■書き込みポインタの更新も行う // ログあふれで記録停止? if( pedolog_overflow ) { return; + // おしまい。ログの更新もなし。 } } // インクリメントして良い - pedo_log_latest[ LEDO_LOG_LATEST_HOUR ] = temp_hour; - pedo_log_latest[ LEDO_LOG_LATEST_DAY ] = temp_day; - pedo_log_latest[ LEDO_LOG_LATEST_MONTH ] = temp_month; - pedo_log_latest[ LEDO_LOG_LATEST_YEAR ] = temp_year; - pedo_log_latest[ LEDO_LOG_LATEST_MIN ] = temp_min; - pedo_log_latest[ LEDO_LOG_LATEST_SEC ] = temp_sec; + cal_log_latest = cal_temp; // ■ログ時刻更新 + last_hour_fny = now_longhour; - last_hour_fny = now_longhour; - log_year = log_year_temp; - - // 累積の更新 // - // いろいろ失敗した... - if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) - { - if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 ) - { - if( ++vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 ){ - vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; // カンスト orz - vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255; - vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255; - } - } - } - - // 毎時ログインクリメント - if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) - { + // 毎時ログ インクリメント + if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) // その時間帯最初のカウントの時 + { // これしないと1歩足りない pool.vreg_c_ext.pedo_log[ p_record ] = 1; } else if( pool.vreg_c_ext.pedo_log[ p_record ] != HOSU_MAX ) { + // 通常パス pool.vreg_c_ext.pedo_log[ p_record ] += 1; - } + // 累積の更新 // + if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) //. いろいろ失敗した... + { + if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 ) + { + if( ++vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 ){ + vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; //. カンスト orz + vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255; + vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255; + } + } + } + } } @@ -324,43 +279,34 @@ static void hosu_increment() 空白の時間を適切に0にして、 今を含む1時間のデータを書く位置にポインタ?を進める ======================================================== */ -void fill_hosu_hist_hours( u16 hours ) +static void fill_hosu_hist_hours( u16 hours ) { - // ログ最大容量以上放置された? - if( hours > PEDOMETER_LOG_SIZE ) - { - hours = PEDOMETER_LOG_SIZE; - } - - if( p_record >= PEDOMETER_LOG_SIZE ) - { - pedolog_overflow = true; - return; - } - - if( p_record + hours >= PEDOMETER_LOG_SIZE ) + // ログあふれ? + if( (u16)p_record + hours >= PEDOMETER_LOG_SIZE ) { pedolog_overflow = true; return; } - // 空白の数時間の設定 - do + while( hours != 0 ) { // 新仕様 いっぱいで停止 p_record += 1; - if( p_record >= PEDOMETER_LOG_SIZE ) +#if 1 // debug + if( p_record >= PEDOMETER_LOG_SIZE ) { pedolog_overflow = true; - NOP(); // ここに来るようだとバグ +// NOP(); // ここに来るようだとバグ break; - }else{ + } + else +#endif + { pool.vreg_c_ext.pedo_log[ p_record ] = 0; } hours -= 1; } - while( hours != 0 ); return; } @@ -389,16 +335,18 @@ void clear_hosu_hist() extern u8 iic_burst_state; -bit record_read_msb_lsb; - +bit pedolog_read_msb; /* ======================================================== 歩数計ヒストリ読み出しの後処理(初期化) 読み出しポインタのクリア ======================================================== */ +/* マクロにしました void hosu_read_end( ) { - record_read_msb_lsb = 0; + pedolog_read_msb = 0; } +*/ + /* ======================================================== @@ -409,20 +357,19 @@ u8 hosu_read( ) { u8 rv; static u8 p_record_buffer; - static u8 dat_temp[6]; // 一応、アトミック処理に + static st_calender cal_buff; // 一応、アトミック処理に if( iic_burst_state == 0 ) { - p_record_buffer = p_record; + p_record_buffer = p_record; + DI(); + cal_buff = cal_log_latest; + EI(); } if( iic_burst_state <= 5 ) { - rv = pedo_log_latest[ iic_burst_state ]; - if( iic_burst_state == LEDO_LOG_LATEST_YEAR ) // BCDに直さなきゃという失態 - { - rv = btobcd( rv ); - } + rv = *( (u8*)&cal_buff + iic_burst_state ); // あうあう iic_burst_state += 1; return( rv ); } @@ -431,7 +378,7 @@ u8 hosu_read( ) u16 temp; // 16ビットで記録してあるのでばらして送る todo: もっと楽する方法があるんじゃ temp = pool.vreg_c_ext.pedo_log[ p_record_buffer ]; - if( record_read_msb_lsb == 0 ) + if( !pedolog_read_msb ) { rv = (u8)( temp & 0x00FF ); } @@ -447,7 +394,7 @@ u8 hosu_read( ) p_record_buffer -= 1; } } - record_read_msb_lsb ^= 1; + pedolog_read_msb ^= 1; return( rv ); } @@ -462,64 +409,62 @@ u8 hosu_read( ) ======================================================== */ const u16 DAYS_FROM_HNY[] = { 0, - 0, 31, 31+28, 59+31, 90+30, - 120+31, 151+30, 181+31, 212+31, 243+30, - 273+31, 304+30 }; + 31, + 31+28, // =59。 …3月0日は1月59日 + 31+28+31, + 31+28+31+30, + 31+28+31+30+31, + 31+28+31+30+31+30, + 31+28+31+30+31+30+31, + 31+28+31+30+31+30+31+31, + 31+28+31+30+31+30+31+31+30, + 31+28+31+30+31+30+31+31+30+31, + 31+28+31+30+31+30+31+31+30+31+30 + }; -u16 get_long_hour() +static u16 get_long_hour() { + u8 year = bcdtob( cal_temp.year_bcd ); + u8 month = bcdtob( cal_temp.month_bcd ); + u8 day = bcdtob( cal_temp.day_bcd ); + u8 hour = bcdtob( cal_temp.hour_bcd ); + u8 min_bcd = cal_temp.min_bcd; // 大小比較しかしないのでbcdのままでよい + u8 sec_bcd = cal_temp.sec_bcd; u16 long_hour; - u8 year_hex; - u8 month_hex; - u8 day_hex; - u8 hour_hex; - - u8 min; - u8 sec; - - // RWAIT = 1 を確認してから↓に進んで下さい - year_hex = YEAR; - month_hex = MONTH; - day_hex = DAY; - hour_hex = HOUR; - min = MIN; - sec = SEC; - - RWAIT = 0; - EI(); - - year_hex = bcdtob( year_hex ); - month_hex = bcdtob( month_hex ); - day_hex = bcdtob( day_hex ); - hour_hex = bcdtob( hour_hex ); // まず日数の部分 - long_hour = DAYS_FROM_HNY[ month_hex ]; - if(( ( year_hex & 0x03 ) == 0 ) && ( ( 3 <= month_hex ))) + long_hour = DAYS_FROM_HNY[ month -1 ]; // -1はインデックス合わせ + if( is_leapyear(year) && ( 3 <= month )) { // 閏年で、閏日より後 long_hour += 1; } - long_hour += day_hex - 1; + long_hour += day - 1; long_hour *= 24; // 日数→時間 - long_hour += hour_hex; + long_hour += hour; - if( ( min > vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) - || ( ( min >= vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) - && ( sec > vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC ] )) + // 時・分境界の前?後? + if( ( min_bcd > vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) + || ( ( min_bcd >= vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) + && ( sec_bcd > vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC ] )) ) { return( long_hour ); } else { - return( long_hour -1 ); // 1時間前に含める 注意:元旦の0時 + return( long_hour -1 ); // 1時間前に含める 注意:元旦で昨年扱いにするとき。-1 になる } } -unsigned long my_sqrt(unsigned long x) + +/* ======================================================== + 軽量平方根。 + 必要十分な精度で打ち切る +======================================================== */ +static unsigned long my_sqrt(unsigned long x) { unsigned long s, t; @@ -540,3 +485,41 @@ unsigned long my_sqrt(unsigned long x) return t; } + + + + +/* ======================================================== + 二つの 前回呼ばれた時刻と、現在時刻の差分を求める。返るのはfill_hosu_hist_hours にそのまま渡せる +======================================================== */ +static u16 calc_hours_spend( u8 year ) +{ + // 同じ年の内 + if( cal_log_latest.year_bcd == year ) + { + if( now_longhour > last_hour_fny ) + { + return( now_longhour - last_hour_fny ); + } + else + { + return( 0 ); // 同じ時間帯(と、巻き戻り。 どうなっても知らない) + } + } + else if( cal_log_latest.year_bcd == ( year -1 ) ) + { + // 年をまたいでいるとき + return( ( ( 365 + ( is_firstyear(year) ? 1: 0 )) * 24 ) - last_hour_fny + now_longhour ); + } + else if( cal_log_latest.year_bcd < year ) + { + // 数年放置 + return( PEDOMETER_LOG_SIZE +1 ); + } + else + { + // カレンダーが巻き戻るなど + // ノーケアでよい…が、不定値というわけにもいかない + return( 0 ); + } +} diff --git a/trunk/pedometer.h b/trunk/pedometer.h index 97ae45f..56252a0 100644 --- a/trunk/pedometer.h +++ b/trunk/pedometer.h @@ -2,8 +2,17 @@ #define _pedo_ + + // ========================================================= -void hosu_read_end( ); +extern bit pedolog_read_msb; + + + +// ========================================================= +//void hosu_read_end( ); マクロ化 +#define hosu_read_end() pedolog_read_msb = 0 + u8 hosu_read( ); void fill_hosu_hist_hours( u16 ); void clear_hosu_hist(); diff --git a/trunk/task_misc.c b/trunk/task_misc.c index 568fc3a..6f79c04 100644 --- a/trunk/task_misc.c +++ b/trunk/task_misc.c @@ -81,7 +81,8 @@ void tsk_misc( ) PM互換レジスタへの書き込み ポーリングしかしてない。割り込み? ======================================================== */ - if( !PM_IRQ_n ){ + if( !PM_IRQ_n ) + { renge_task_immed_add( tski_ntr_pmic_comm ); // NOP(); } @@ -110,24 +111,28 @@ void tsk_misc( ) ======================================================== */ void check_twl_vol_irq() { + static u8 vol_level_twl_sent; static u8 mabiki; + if( !is_TWL ) + { + return; + // おしまい + } + if( mabiki != 0 ) { mabiki--; - } - else - { - mabiki = 6; - - if( is_TWL ) - { - if( vol_level_twl != vol_level_twl_readed ) - { - set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ); - } - } + return; + // おしまい } + + mabiki = 9; // 1フレームは開ける + if( vol_level_twl != vol_level_twl_sent ) + { + vol_level_twl_sent = vol_level_twl; + set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ); + } } diff --git a/trunk/vreg_twl.c b/trunk/vreg_twl.c index cfc15e3..1c0558f 100644 --- a/trunk/vreg_twl.c +++ b/trunk/vreg_twl.c @@ -21,8 +21,6 @@ extern bit twl_ver_read; extern bit cam_led_update; extern bit vol_changed_by_twl; -u8 vol_level_twl,vol_level_twl_readed; // SoC が最後に読んだVol値 - /* ======================================================== @@ -116,10 +114,6 @@ u8 vreg_twl_read( u8 phy_adrs ) vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0; return( temp ); - case( REG_TWL_INT_ADRS_VOL ): - vol_level_twl_readed = vol_level_twl; // TWLとスライダと不整合が起きないように - return( vreg_twl[ REG_TWL_INT_ADRS_VOL ] ); - case( REG_TWL_INT_ADRS_VER_INFO ): // set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); // 速度的に無理なので twl_ver_read = true; diff --git a/trunk/vreg_twl.h b/trunk/vreg_twl.h index cf08300..63cdd94 100644 --- a/trunk/vreg_twl.h +++ b/trunk/vreg_twl.h @@ -2,9 +2,6 @@ #define __vreg_twl__ /* ========================================================================= */ extern u8 vreg_twl[]; -extern u8 vol_level_twl,vol_level_twl_readed; // SoC が最後に読んだVol値 - - /* diff --git a/trunk/yav_mcu_bsr.pri b/trunk/yav_mcu_bsr.pri index 64508db..4e25107 100644 --- a/trunk/yav_mcu_bsr.pri +++ b/trunk/yav_mcu_bsr.pri @@ -22,9 +22,9 @@ SubClock=None [Mapping] Count=0 [Main] -Geometry=52, 213, 1200, 858 -Window=Normal -MDI_MAX=ON +Geometry=110, 110, 1200, 858 +Window=Max +MDI_MAX=OFF Button=ON Mode=Auto Trace=Uncond ON @@ -78,9 +78,9 @@ Symbol Type=OFF Language=C Kanji=SJIS [Source] -Geometry=410, 186, 600, 400 -Window=Max -DispStart=30 +Geometry=212, 6, 902, 1043 +Window=Normal +DispStart=11 CaretPos=81,0 Mode=Normal DispFile= @@ -140,18 +140,18 @@ SaveStart= SaveEnd= Accumulative=ON [Source1] -Geometry=25, 25, 600, 400 +Geometry=32, 50, 771, 1011 Window=Normal -DispStart=393 -CaretPos=442,5 +DispStart=453 +CaretPos=506,17 Mode=Normal -DispFile=\\tsclient\C\78k_data\yav-mcu-basara\trunk\vreg_ctr.c +DispFile=\\tsclient\C\78k_data\yav-mcu-basara\trunk\pedo_alg_thre_det2.c Accumulative=ON [Assemble] -Geometry=0, 0, 0, 0 -Window=Hide -DispStart=847434752 -CaretPos=0,0 +Geometry=574, 49, 600, 400 +Window=Normal +DispStart=802 +CaretPos=802,27 Address1= Address2= Address3= @@ -259,9 +259,9 @@ Destination=0 [I/O Port] Line=0 [Stack] -Geometry=0, 0, 0, 0 -Window=Hide -Boundary=0 +Geometry=1141, 319, 400, 300 +Window=Normal +Boundary=13762687 Mode=Proper [Sfr] Geometry=0, 0, 0, 0 @@ -822,9 +822,9 @@ L529=IICWL1 L530=IICWH1 L531=SVA1 [Local Variable] -Geometry=0, 0, 0, 0 -Window=Hide -Boundary=0 +Geometry=1150, 803, 400, 300 +Window=Normal +Boundary=13041851 Mode=Proper [Trace View] Geometry=0, 0, 0, 0 @@ -965,17 +965,20 @@ Detail=OFF Last Name= Count=0 [Variable] -Geometry=0, 0, 0, 0 -Window=Hide -Boundary=0 -Line=0 +Geometry=1110, 10, 440, 300 +Window=Normal +Boundary=13762700 +0=+cal_log_latest,.,N,A,-,1 +1=.last_hour_fny,D,N,A,+,1 +2=.now_longhour,D,N,A,+,1 +Line=3 [Quick Watch] -0= -1= -2= -3= -4= -5= +0=cal_buff,P,A,1 +1=rv,P,A,1 +2=iic_burst_state,P,A,1 +3=now_longhour,P,A,1 +4=last_hour_fny,P,A,1 +5=cal_log_latest,P,A,1 6= 7= 8= @@ -990,11 +993,19 @@ Line=0 Geometry=0, 0, 0, 0 Window=Hide Width=150 30 200 100 -Name0=Swb00001 -Address0=vreg_ctr.c#_vreg_ctr_read+0x74 +Name0=Swb00003 +Address0=pedo_alg_thre_det2.c#_get_long_hour+0x7b Window0=ASM Status0=ON -Count=1 +Name1=Swb00001 +Address1=pedo_alg_thre_det2.c#_hosu_increment_if_necessary+0x55 +Window1=ASM +Status1=ON +Name2=Swb00002 +Address2=pedo_alg_thre_det2.c#_calc_hours_spend+0x28 +Window2=ASM +Status2=ON +Count=3 [Reset] Debugger=ON Symbol=OFF