// STM32 CRC32 Test App - sourcer32@gmail.com

#include <windows.h>
#include <stdio.h> DWORD Crc32( DWORD Crc, DWORD Data )
{
int i; Crc = Crc ^ Data; for ( i = ; i < ; i++ )
if ( Crc & 0x80000000 )
Crc = ( Crc << ) ^ 0x04C11DB7; // Polynomial used in STM32
else
Crc = ( Crc << ); return ( Crc );
} DWORD Crc32Fast( DWORD Crc, DWORD Data )
{
static const DWORD CrcTable[ ] =
{ // Nibble lookup table for 0x04C11DB7 polynomial
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD }; Crc = Crc ^ Data; // Apply all 32-bits // Process 32-bits, 4 at a time, or 8 rounds Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; // Assumes 32-bit reg, masking index to 4-bits
Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; // 0x04C11DB7 Polynomial used in STM32
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; return ( Crc );
} void test( void )
{
BYTE vector[ ] =
{
0x02, 0x07, 0x02, 0x00, 0x18, 0x8A, 0xD0, 0x23, 0x25, 0x2B, 0x09, 0x00 };
DWORD Crc;
int i; for ( i = ; i < ; i++ )
printf( "%02X ", vector[ i ] ); putchar( '\n' ); Crc = 0xFFFFFFFF; // Initial state for ( i = ; i < ; i += )
{
Crc = Crc32Fast( Crc, *( (DWORD *) &vector[ i ] ) ); // 4-bytes at a time
} printf( "%08X test\n", Crc );
} int main( int argc, char **argv )
{
printf( "%08X\n\n", Crc32( 0xFFFFFFFF, 0x12345678 ) ); // 0xDF8A8A2B printf( "%08X\n\n", Crc32Fast( 0xFFFFFFFF, 0x12345678 ) ); // 0xDF8A8A2B test( ); return ( );
}
// STM32 CRC32 Test App - sourcer32@gmail.com

#include <windows.h>

#include <stdio.h>
#include <stdlib.h> //**************************************************************************** DWORD Crc32( DWORD Crc, DWORD Data )
{
int i; Crc = Crc ^ Data; for ( i = ; i < ; i++ )
if ( Crc & 0x80000000 )
Crc = ( Crc << ) ^ 0x04C11DB7; // Polynomial used in STM32
else
Crc = ( Crc << ); return ( Crc );
} //**************************************************************************** DWORD Crc32Block( DWORD Crc, DWORD Size, DWORD *Buffer ) // 32-bit units
{
while ( Size-- )
Crc = Crc32( Crc, *Buffer++ ); return ( Crc );
} //**************************************************************************** DWORD Crc32Fast( DWORD Crc, DWORD Data )
{
static const DWORD CrcTable[ ] =
{ // Nibble lookup table for 0x04C11DB7 polynomial
0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B,
0x1A864DB2, 0x1E475005, 0x2608EDB8, 0x22C9F00F, 0x2F8AD6D6, 0x2B4BCB61,
0x350C9B64, 0x31CD86D3, 0x3C8EA00A, 0x384FBDBD }; Crc = Crc ^ Data; // Apply all 32-bits // Process 32-bits, 4 at a time, or 8 rounds Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; // Assumes 32-bit reg, masking index to 4-bits
Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; // 0x04C11DB7 Polynomial used in STM32
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ];
Crc = ( Crc << ) ^ CrcTable[ Crc >> ]; return ( Crc );
} //**************************************************************************** DWORD Crc32FastBlock( DWORD Crc, DWORD Size, DWORD *Buffer ) // 32-bit units
{
while ( Size-- )
Crc = Crc32Fast( Crc, *Buffer++ ); return ( Crc );
} //**************************************************************************** void test( void )
{
BYTE vector[ ] =
{
0x02, 0x07, 0x02, 0x00, 0x18, 0x8A, 0xD0, 0x23, 0x25, 0x2B, 0x09, 0x00 }; // ACD7E298
DWORD Crc;
int i; for ( i = ; i < sizeof( vector ); i++ )
printf( "%02X ", vector[ i ] ); putchar( '\n' ); Crc = 0xFFFFFFFF; // Initial state for ( i = ; i < sizeof( vector ); i += )
{
Crc = Crc32Fast( Crc, *( (DWORD *) &vector[ i ] ) ); // 4-bytes at a time
} printf( "%08X %08X test\n", Crc,
Crc32FastBlock( 0xFFFFFFFF, sizeof( vector ) / , (void *) vector ) );
} //**************************************************************************** void TestFile( char *Filename )
{
FILE *f;
DWORD Size;
BYTE *Buffer; f = fopen( Filename, "rb" ); if ( f )
{
fseek( f, , SEEK_END ); Size = ftell( f ); fseek( f, , SEEK_SET ); if ( Size & )
printf(
"WARNING: File must be multiple of 4 bytes (32-bit) for valid results\n" ); Buffer = malloc( Size ); fread( Buffer, Size, , f ); fclose( f ); printf( "crc=%08X Slow\n",
Crc32Block( 0xFFFFFFFF, Size >> , (void *) Buffer ) ); printf( "crc=%08X Fast\n",
Crc32FastBlock( 0xFFFFFFFF, Size >> , (void *) Buffer ) ); free( Buffer );
}
else
printf( "ERROR: Unable to open file '%s'\n", Filename );
} //**************************************************************************** int main( int argc, char **argv )
{
printf( "STM32CRC Test\n\nUsage: STM32CRC [<file>]\n\n" ); if ( ( Crc32( 0xFFFFFFFF, 0x12345678 ) != 0xDF8A8A2B )
|| ( Crc32Fast( 0xFFFFFFFF, 0x12345678 ) != 0xDF8A8A2B ) )
{
printf( "ERROR: Internal Sanity Check Failed\n" );
} if ( argc > )
TestFile( argv[ ] );
else
test( ); return ( );
} //****************************************************************************

STM32的CRC32 测试代码的更多相关文章

  1. STM32的CRC32 实现代码 -- Ether

    uint32_t reverse_32( uint32_t data ) { asm("rbit r0,r0"); return data; } ; uint32_t crc32_ ...

  2. STM32 IAP程序 源码 和测试代码 有详细的中文注释

    http://bbs.21ic.com/forum.php?mod=viewthread&tid=588265&reltid=624002&pre_pos=2&ext= ...

  3. .NET单元测试的艺术-3.测试代码

    开篇:上一篇我们学习单元测试和核心技术:存根.模拟对象和隔离框架,它们是我们进行高质量单元测试的技术基础.本篇会集中在管理和组织单元测试的技术,以及如何确保在真实项目中进行高质量的单元测试. 系列目录 ...

  4. mysql锁 实战测试代码

    存储引擎 支持的锁定 MyISAM 表级锁 MEMORY 表级锁 InnoDB 行级锁 BDB 页面锁 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低.行级锁:开销 ...

  5. 使用Microsoft Fakes隔离测试代码

    在单元测试(Unit Test)中我们遇到的问题之一是:假如被测试组件(类或项目)为A,组件A依赖于组件B,那么在组件A的单元测试ATest中测试A时,也需要依赖于B,在B发生改动后,就可能影响到A的 ...

  6. iOS开发:XCTest单元测试(附上一个单例的测试代码)

    测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...

  7. 在内核中异步请求设备固件firmware的测试代码

    在内核中异步请求设备固件firmware的测试代码 static void ghost_load_firmware_callback(const struct firmware *fw, void * ...

  8. x264测试代码

    建立一个工程,将头文件,库文件加载到工程,测试代码如下:#include <iostream>#include <string>#include "stdint.h& ...

  9. Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

    MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明 ...

随机推荐

  1. Tensorflow数据读取的方式

    深度学习既然是基于数据的方法,先不管多抽象,那总归是有读取数据的方法的吧,这里的数据应该是一个统称,包含我们讲的数据集和变量tensor. tf读取数据一共有3种方法: 供给数据(Feeding): ...

  2. 第7月第18天 xcode bundle ffmpeg

    1. https://zhuanlan.zhihu.com/p/24281404 2. 186  ffmpeg -i /Users/temp/Downloads/n-201402201522融资融券专 ...

  3. 洛谷 P1525 【关押罪犯】种类并查集

    题解 P1525 [关押罪犯]:种类并查集 前言: 在数据结构并查集中,种类并查集属于扩展域并查集一类. 比较典型的题目就是:食物链(比本题难一些,有三个种类存在) 首先讲一下本题的贪心,这个是必须要 ...

  4. 洛谷 P1609 最小回文数 题解

    这题其实并不难,重点在你对回文数的了解,根本就不需要高精度. 打个比方: 对于一个形如 ABCDEFGH 的整数 有且仅有一个比它大的最小回文数 有且仅有一个比它小的最大回文数 而整数 ABCDDCB ...

  5. Javascript - Vue - 请求

    本地增删查的一个例子 <div id="box">    <div class="panel panel-primary">       ...

  6. 【干货】DD 和 netcat实战---擦除数据和远控

    原创:Unit 2: Linux/Unix Acquisition 2.1 Linux/Unix Acquistion Using dd Continued DD也是一个复制设备数据的工具,比特流复制 ...

  7. 【Linux系统编程应用】Linux音频编程基础(一)【转】

    转自:https://blog.csdn.net/dengjin20104042056/article/details/52435290 一.数字音频 音频信号是一种连续变化的模拟信号,但计算机只能处 ...

  8. Service Mesh 及其主流开源实现解析(转)

    什么是 Service mesh Service Mesh 直译过来是 服务网格,目的是解决系统架构微服务化后的服务间通信和治理问题.服务网格由 sidecar 节点组成.在介绍 service me ...

  9. ASP.NET MVC 路由学习

    参考 http://www.cnblogs.com/yaozhenfa/p/asp_net_mvc_route_2.html 说明 1."解决与物理路径的冲突"这段教程这里如果不起 ...

  10. Ibatis.Net <![CDATA[ ]]>标记学习(九)

    当Sql语句中包含特殊字符时,例如: <select id="SelectOnePerson" resultMap="PersonModel"> s ...