歩数計 ログ読み出し対応(未検証)

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@48 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
fujita_ryohei 2009-12-10 08:02:22 +00:00
parent 1cac1b4ae6
commit da40a5147c
6 changed files with 147 additions and 40 deletions

View File

@ -54,9 +54,8 @@ u16* hyst_pedometer;
// ========================================================
task_interval tsk_soft_int( );
static void pedo_increment();
static void hosu_increment();
u16 get_long_hour();
@ -122,7 +121,7 @@ task_status_immed tsk_cbk_accero( )
{
// 一歩増えました
DBG_LED_WIFI_2_on;
pedo_increment();
hosu_increment();
}
}
interval_hh = 0;
@ -155,13 +154,14 @@ task_status_immed tsk_cbk_accero( )
  
 
========================================================*/
static void pedo_increment()
#define MAGIC_PEDO_NODATA 65535
#define MAGIC_PEDO_MAX 65534
u8 p_record;
static void hosu_increment()
{
static u8 last_hour; // 履歴の最新は何時?
static u8 last_day;
static u8 last_month;
static u8 last_year;
static u8 p_record;
static u16 last_hour; // 履歴の最新は何時?
// 累積の更新 //
// いろいろ失敗した...
@ -178,30 +178,72 @@ static void pedo_increment()
}
// 毎時履歴の更新
DI();
RWAIT = 1;
while( !RWST ){;}
if(( last_hour != HOUR ) || ( last_day != DAY ) || ( last_month != MONTH ) || ( last_year != YEAR ))
{
last_hour = HOUR;
last_day = DAY;
last_month = MONTH;
last_year = YEAR;
p_record += 1;
*(hyst_pedometer + p_record) = 0;
}
RWAIT = 0;
EI();
u16 temp_hour = get_long_hour();
if( temp_hour > last_hour )
{
for( ; last_hour != temp_hour; last_hour += 1 )
{
p_record += 1;
*(hyst_pedometer + p_record) = MAGIC_PEDO_NODATA;
}
*(hyst_pedometer + p_record) = 0;
}
*(hyst_pedometer + p_record) += 1;
if( *( hyst_pedometer + p_record ) == 65535 ) // 65535はマジックナンバーで
{
*hyst_pedometer = 65534;
*(hyst_pedometer + p_record) += 1;
if( *( hyst_pedometer + p_record ) == MAGIC_PEDO_MAX )
{
*hyst_pedometer = 65534;
}
}
}
bit hosu_read_inited;
bit record_read_msb_lsb;
/* ========================================================
()
======================================================== */
void hosu_read_end( )
{
record_read_msb_lsb = 0;
hosu_read_inited = 0;
}
/* ========================================================
...
======================================================== */
u8 hosu_read( )
{
u16 temp;
u8 rv;
static u8 p_record_buffer;
if( hosu_read_inited == 0 )
{
p_record_buffer = p_record;
hosu_read_inited = 1;
}
temp = *( hyst_pedometer + p_record_buffer );
if( record_read_msb_lsb == 0 )
{
rv = (u8)( ( temp & 0xFF00 ) >> 8 );
}
else
{
rv = (u8)( temp & 0x00FF );
p_record_buffer += 1;
}
record_read_msb_lsb += 1;
return( rv );
}
/*=========================================================
@ -327,3 +369,51 @@ __interrupt void intp23_ACC_ready( )
}
}
}
/* ========================================================
2000
u16 long_hour
======================================================== */
static 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 };
u16 get_long_hour()
{
u16 long_hour;
DI();
RWAIT = 1;
while( !RWST ){;}
// まず日数の部分
long_hour = YEAR * 365;
long_hour += ( YEAR / 4 ) +1; // 閏日の分。修正ユリウスでは2000年も閏年
long_hour += DAYS_FROM_HNY[ MONTH ];
if(( 2 <= MONTH ) && ( DAY < 29 ))
{
// 2/29より前
long_hour -= 1;
}
long_hour += DAY;
long_hour *= 24;
long_hour += HOUR;
RWAIT = 0;
EI();
return( long_hour );
}

View File

@ -5,13 +5,18 @@
#include "jhl_defs.h"
///////////////////////////////////////////////////////////
extern u16* hyst_pedometer;
extern u16* hyst_pedometer;
///////////////////////////////////////////////////////////
task_status_immed tsk_cbk_accero( );
task_status_immed acc_hosu_set( );
void hosu_read_end( );
u8 hosu_read( );
#endif

View File

@ -4,6 +4,8 @@
'09 Apr
======================================================== */
#include "incs.h"
#include "accero.h"
#ifdef _MCU_BSR_
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
@ -83,8 +85,6 @@ __interrupt void int_iic_ctr( )
SPIE = 0;
LREL = 1;
rtc_unlock( );
// レジスタリードで、割り込みピンをネゲート
// まだ読まれてない割り込みがあれば、再度アサート
if( irq_readed )
@ -100,6 +100,9 @@ __interrupt void int_iic_ctr( )
IRQ0_ast;
}
}
// 歩数計読み出し終了
hosu_read_end( );
return;
}
@ -108,7 +111,6 @@ __interrupt void int_iic_ctr( )
if( ( state == IIC_TX ) || ( state == IIC_RX ) )
{
state = IIC_IDLE;
rtc_unlock( );
}
}
@ -131,7 +133,7 @@ __interrupt void int_iic_ctr( )
break;
case ( IIC_TX_OR_RX ):
// if( TRC ){ // 送信方向フラグ
// if( TRC ){ // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
if( STD )
{ // スタートコンディション検出フラグ
// リードされる
@ -168,7 +170,11 @@ __interrupt void int_iic_ctr( )
vreg_ctr_write( reg_adrs, trx_buf );
WREL = 1;
}
reg_adrs += 1;
if( reg_adrs != VREG_C_ACC_HOSU_HIST )
{
reg_adrs += 1;
}
if( state == IIC_TX )
{
trx_buf = vreg_ctr_read( reg_adrs );

View File

@ -59,14 +59,14 @@ void main_loop( void )
vreg_ctr_init( );
vreg_twl_init( );
read_dipsw( );
// 特定スイッチで何かするか?
read_dipsw( ); // 特定スイッチで何かするか?
hyst_pedometer = (u16*)pool;
renge_init( );
renge_task_interval_run_force = 1;
hyst_pedometer = (u16*)pool;
EI( );
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */

View File

@ -190,7 +190,7 @@ err firm_update( )
if( comp == 0 )
{
FSL_InvertBootFlag( );
FSL_SwapBootCluster( ); // リセットせずに頭から
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
// FSL_ForceReset(); // リセット
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
// 戻ってこない //

View File

@ -267,7 +267,13 @@ u8 vreg_ctr_read( u8 adrs )
{
return( vreg_ctr[ VREG_C_MCU_STATUS ] | ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) );
}
#if 0
if( adrs == VREG_C_ACC_HOSU_HIST )
{
return( hosu_read() );
}
#if 1
if( adrs >= VREG_C_ENDMARK_ )
{
return( 0xEE );