📄 library.c
字号:
/***************************************************************************
* This code and information is provided "as is" without warranty of any *
* kind, either expressed or implied, including but not limited to the *
* implied warranties of merchantability and/or fitness for a particular *
* purpose. *
* *
* Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved. *
***************************************************************************/
//**************************************************************************
// DESCRIPTION: 71M652x POWER METER - Library Routines.
//
// AUTHOR: MTF
//
// HISTORY: See end of file.
//**************************************************************************
// File: LIBRARY.C
//
#include "options.h"
#include "library.h" // public functions declared in this module
/*** External functions used within this module ***/
// None.
/*** External variables used within this module ***/
// None.
/*** Public functions declared within this module ***/
// See in library.h
/*** Public variables declared within this module ***/
// None.
/*** Private functions declared within this module ***/
// None.
/*** Private variables declared within this module ***/
// None.
#pragma save
#pragma NOAREGS
void memset_x (uint8x_t *dst, uint8_t s, uint16_t len) small reentrant
{
while (len--)
*dst++ = s;
}
#pragma restore
#pragma save
#pragma NOAREGS
void memcpy_xx (uint8x_t *dst, uint8x_t *src, uint16_t len) small reentrant
{ // Handles overlapped data.
if ((dst < src) || ((src + len - 1) < dst))
{ // Copy from beginning of buffers.
--dst; --src;
while (len--)
*(++dst) = *(++src);
}
else
{
src += len; // Copy from end of buffers.
dst += len;
while (len--)
*(--dst) = *(--src);
}
}
#pragma restore
#pragma save
#pragma NOAREGS
void memcpy_xr (uint8x_t *dst, uint8r_t *src, uint16_t len) small reentrant
{ // Copy CE_CODE image to RAM.
while (len--)
*dst++ = *src++;
}
#pragma restore
#if (EQUATION != _1ELEMENT_3WIRE) && (POWER_FACTOR || WATT_SUMS || VAR_SUMS || VA_SUMS || AUTOCAL)
#pragma save
#pragma NOAREGS
void memcpy_px (uint8p_t *dst, uint8x_t *src, uint8_t len) small reentrant
{
while (len--)
*dst++ = *src++;
}
#pragma restore
#endif // VA_ELEMENT/VA_SUMS/MATH_FAST.
#pragma save
#pragma NOAREGS
void memcpy_xp (uint8x_t *dst, uint8p_t *src, uint8_t len) small reentrant
{
while (len--)
*dst++ = *src++;
}
#pragma restore
#if FLASH || (CAL_SAVE && (NV_SELECT == NV_FLASH))
#pragma save
#pragma NOAREGS
int8_t memcmp_rx (uint8r_t *rsrc, uint8x_t *xsrc, uint16_t len) small reentrant
{
while (len--)
{ // while not a do-while, to handle len = 0 input.
if (*rsrc != *xsrc) break;
rsrc++; xsrc++;
}
if (len + 1) // len is -1 is buffers matched.
{
if (*rsrc > *xsrc)
return (1);
else
return (-1);
}
else
return (0);
}
#pragma restore
#endif // FLASH.
#if EXTRAS || ROM
#pragma save
#pragma NOAREGS
int8_t memcmp_xx (uint8x_t *xsrc1, uint8x_t *xsrc2, uint16_t len) small reentrant
{
while (len--) // while not a do-while, to handle len = 0 input.
{
if (*xsrc1 != *xsrc2) break;
xsrc1++; xsrc2++;
}
if (len + 1) // len is -1 if buffers matched.
{
if (*xsrc1 > *xsrc2)
return (1);
else
return (-1);
}
else
return (0);
}
#pragma restore
#endif // EXTRAS.
#if 0
#if VA_ELEMENT || VA_SUMS || RMS_VALUES || CALIBRATION
#pragma save
#pragma NOAREGS
int8_t memcmp_px (uint8p_t *psrc, uint8x_t *xsrc, uint16_t len) small reentrant
{
while (len--) // while not a do-while, to handle len = 0 input.
{
if (*psrc != *xsrc) break;
psrc++; xsrc++;
}
if (len + 1) // len is -1 if buffers matched.
{
if (*psrc > *xsrc)
return (1);
else
return (-1);
}
else
return (0);
}
#pragma restore
#endif // VA_ELEMENT/VA_SUMS/RMS_VALUES.
#endif
#if EXTRAS
#pragma save
#pragma NOAREGS
uint16_t strlen_x (uint8x_t *src) small reentrant
{
uint16_t l = 1;
while (*src++ && l)
l++;
return (l - 1);
}
#pragma restore
#endif
#if CLI
#pragma save
#pragma NOAREGS
uint16_t strlen_r (uint8r_t *src) small reentrant
{
uint16_t l = 1;
while (*src++ && l)
l++;
return (l - 1);
}
#pragma restore
#endif
#pragma save
#pragma NOAREGS
// this is a small reentrant in case it is called as part of the error
// recording in a sag
bool LRC_Calc_NVR (uint8x_t *ptr, uint16_t len, uint8_t set) small reentrant
{
uint8_t LRC;
if (set)
--len; // Do not include LRC is calculation.
LRC = 0x55;
for(; len != 0; --len)
{
LRC ^= *ptr++;
}
if (set)
{
*ptr = LRC; // Store complement of LRC.
LRC ^= *ptr;
}
return (LRC == 0);
}
#pragma restore
/***************************************************************************
* History *
* $Log: library.c,v $
* Revision 1.28 2006/09/10 00:30:14 Michael T. Fischer
* First version to support DGM0915 LCD.
*
* Revision 1.27 2006/09/09 01:15:23 gmikef
* *** empty log message ***
*
* Revision 1.26 2006/09/06 02:27:05 tvander
* Clean build
*
* Revision 1.25 2006/06/29 00:58:44 tvander
* Added NOAREGs to reentrant code.
*
* Revision 1.24 2006/06/14 02:47:45 tvander
* memset_x is reentrant, originally for reentrant clear of LCD display.
*
* Revision 1.23 2006/06/06 05:15:57 tvander
* clean build
*
* Revision 1.22 2006/04/17 19:17:57 tvander
* Arranged for memcpy_px and _xp to be included when needed, and not when not.
*
* Revision 1.21 2006/03/08 00:10:53 tvander
* Clean build
*
* Revision 1.20 2006/03/06 03:42:19 Michael T. Fischer
* More 6530 prep.
*
* Revision 1.19 2006/03/03 11:31:25 Michael T. Fischer
* Prep for 6530 LCD, etc.
*
* Revision 1.18 2006/01/10 04:12:06 gmikef
* Added PDATA support for CE Outputs.
*
* Revision 1.17 2006/01/04 04:47:56 gmikef
* Switched RMS and VA calculations to use floating point. (and Calibration).
*
* Revision 1.16 2005/12/23 01:28:22 tvander
* Fixed compile errors
*
* Revision 1.14 2005/10/28 02:23:38 gmikef
* *** empty log message ***
*
* Revision 1.13 2005/10/12 23:00:07 tvander
* Includes demonstratable mission mode, brownout, LCD and sleep modes
*
* Revision 1.12 2005/09/22 23:45:26 tvander
* Clean build all models and unit tests, updated copyright to be fore Teridian
*
* Revision 1.11 2005/09/12 07:47:31 tvander
* Power measurement is stable, with no creep.
* VARh measurement is stable, with no creep.
* Pulse sources work.
* Full access to MPU variables.
* Rolled date.
* Clock software works.
*
* Revision 1.10 2005/08/31 05:58:22 gmikef
* First version w/ LAPIE interface.
*
* Revision 1.9 2005/08/30 18:23:15 gmikef
* *** empty log message ***
*
* Revision 1.8 2005/08/10 02:05:33 gmikef
* *** empty log message ***
*
* Revision 1.7 2005/05/04 01:00:18 gmikef
* *** empty log message ***
*
* Revision 1.14 2005/05/03 02:18:55 gmikef
* *** empty log message ***
*
* Revision 1.13 2005/05/02 18:03:19 gmikef
* *** empty log message ***
*
* Revision 1.6 2005/04/30 02:18:35 gmikef
* *** empty log message ***
*
* Revision 1.5 2005/04/28 19:12:26 tvander
* Comments only! Restored history comments.
*
* Revision 1.4 2005/04/27 23:46:53 gmikef
* Some MATH rountines now use 'idata'.
* Added MATH_FAST flag to 'options.h".
* Changed "6521B.Uv2" to max optimization.
*
* Revision 1.3 2005/04/21 02:07:01 gmikef
* *** empty log message ***
*
* Revision 1.2 2005/04/12 21:53:34 tvander
* Library and math, compiles ok, added some comments (needs more)
*
* Revision 1.1 2005/04/09 02:29:42 gmikef
* *** empty log message ***
*
* Copyright (C) 2005 Teridian Semiconductor Corp. All Rights Reserved. *
* this program is fully protected by the United States copyright *
* laws and is the property of Teridian Semiconductor Corporation. *
***************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -