123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #include "system/task_crc.h"
- #include "system/data_channel.h"
- #include "system/float_word.h"
- //#include <zlib.h> /* c-library for crc32() */
- #include <stddef.h> /* for "size_t" */
-
-
- uint32_t crc32(const char *s,size_t n) {
- uint32_t crc=0xFFFFFFFF;
- for(size_t i=0;i<n;i++)
- {
- char ch=s[i];
- for(size_t j=0;j<8;j++) {
- uint32_t b=(ch^crc)&1;
- crc>>=1;
- if(b) crc=crc^0xEDB88320;
- ch>>=1;
- }
- }
- return ~crc;
- }
-
-
-
-
- int task_crc_run( void * task ) {
-
- // TODO
-
- crc_config * crc = ( crc_config * ) task;
- uint32_t data_channel_base = crc->base.sink;
- data_channel_clear( data_channel_base);
-
- float_word crc_res;
- float_word crc_input;
-
- for ( uint32_t i = 0; i < DATA_CHANNEL_DEPTH; ++i )
- {
- data_channel_read(crc->base.sources[0], (uint32_t*)&crc_input.value);
-
- crc_res.word = crc32((const void *)&crc_input, sizeof(crc_input));
-
- }
-
-
- data_channel_write( data_channel_base, crc_res.word );
-
-
- return 0;
- }
|