你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F7移植miniLZO实现无损压缩

[复制链接]
STMCU小助手 发布时间:2021-12-16 22:00
源码移植注意事项
# H# r4 q7 {8 [9 s* s# L/ P/ h* T工程中加入miniLZO源文件为) Q  s  f/ a" R( b

9 m1 ~& c8 g2 z+ c
20191011210337436.png

9 o7 o+ n# U3 q: e$ Q% j* u4 F* T; S+ u2 l$ A- @2 z' ~/ l2 c
keil5中优化设置选项须设置禁止优化,否则压缩算法可能被优化导致无法正确运行。$ k/ ~3 T, s6 y

. t3 D$ @8 m$ i: Q6 N8 P
20191011200145237.png

% }5 _' O/ U+ \5 K
2 u  f2 J8 H% X" B5 ^测试程序  b0 L1 i1 j, I* `
  1. #include "sys.h"
    9 I) I1 }' j8 u" R1 a& W7 ]
  2. #include "delay.h"
    ! _- k# n/ g  E
  3. #include "usart.h"; q5 Z4 r; I, H7 A8 [* ?, e2 b1 I( M
  4. #include "led.h"* G6 e4 m  i  n$ H) S% |
  5. #include "key.h"' x; o& K7 F! R4 z
  6. #include "minilzo.h"0 E0 B# ?$ ]9 G$ ]! I0 B
  7. #include <stdlib.h>
    8 O2 X* K3 f4 \- H

  8. ) e  Q% b8 Q% ^; k! R- T

  9. / E& w7 k+ X( s1 ~7 _
  10. /************************************************+ d( [, W* B3 b; Q& I9 ~
  11. ALIENTEK 阿波罗STM32F7开发板 实验3
    3 ~; Y5 Q+ b+ G, E
  12. 串口实验-HAL库函数版! A4 ~" c; Z6 {
  13. 技术支持:<a href="http://www.openedv.com" target="_blank">www.openedv.com</a>
    9 R( k9 e# v, w
  14. 淘宝店铺:<a href="http://eboard.taobao.com" target="_blank">http://eboard.taobao.com</a> + Q) r4 Y" v% i0 E( a# v7 F6 E& p
  15. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
    - y, A- |7 S4 f/ c
  16. 广州市星翼电子科技有限公司  $ N' R# W/ s" T# k( _$ T8 f
  17. 作者:正点原子 @ALIENTEK
    , }# g( c9 V" M& p) G
  18. ************************************************/
    / F7 J" ?+ i/ o+ f% Z

  19. " v& V' i) b& {0 ^$ |* N$ ^: f3 g
  20. . E- j% i! i# ~( ?' q: N
  21. /* 定义例程名和例程发布日期 */
    ! ^. R- `! R7 C' b1 Q  l) a
  22. #define EXAMPLE_NAME        "V7-MiniLZO无损压缩算法移植和使用"
    5 c# k' _- R: q! \) I2 Q
  23. #define EXAMPLE_DATE        "2019-10-11"
    0 _+ q. s! S- e" \
  24. #define DEMO_VER                "1.0"3 f: ?- z) j* J& _
  25. 3 X3 K. V7 K0 x; @& C
  26. static void PrintfLogo(void);
    5 C- m. s# O9 a' O& Q2 X& W
  27. static void PrintfHelp(void);
    ! l' \& d; E- P' H5 n. o
  28. static uint8_t TestMiniLZO(uint32_t _Len);
    . @/ h5 U& N7 C

  29. ! `, L% i) i$ E4 P+ H& O3 p

  30. # s4 }* J) w: `3 [" w2 z, P: d
  31. /* 定义测试用的输入输出缓冲和大小 */* C) F3 Z* i( a& R) R1 r# P
  32. #define IN_LEN      (20*1024ul)' w1 D% x! S+ |# _, ^8 ~: [* J
  33. #define OUT_LEN     (IN_LEN + IN_LEN / 16 + 64 + 3)
    9 ^3 z/ }+ w; [  K2 J5 j  n1 k
  34. static unsigned char __LZO_MMODEL in  [ IN_LEN ];4 Y5 K5 m6 F0 k, t2 P( V! D" {
  35. static unsigned char __LZO_MMODEL out [ OUT_LEN ];
    ( j6 {* \( [) ^) m# _
  36. # v) M9 o0 h5 r" l
  37. /* 压缩需要内存大小 */; m. C1 J" ]2 |1 v6 s
  38. #define HEAP_ALLOC(var,size) \# D2 ^; L* _! V4 L$ }# ^
  39.     lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]# f2 ?! ], T- m3 }6 e
  40. 6 a! h9 }7 X3 e6 _
  41. static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
    : I  H1 A( W* [) j7 }% T7 D
  42.         ' }& u. j+ W; f2 k3 O  r& H) i/ s
  43. /* 定义个变量,避免警告 */
    . g. R) t7 A( s/ b0 k
  44. #if defined ( __CC_ARM )6 }3 p$ l% D8 g7 O! W" g
  45. __attribute__((section (".RAM_D1"))) uint8_t  InTempData[IN_LEN];
    2 S8 }' Z1 x- z5 N7 a. y3 d
  46. __attribute__((section (".RAM_D1"))) uint16_t TempValues1;. q8 p* P9 B, A: w' b
  47. __attribute__((section (".RAM_D2"))) uint16_t TempValues2;/ O9 p9 `1 W5 ^1 {, K
  48. __attribute__((section (".RAM_D3"))) uint16_t TempValues3;
    2 Q3 H2 ?( _; X' ?' `" s7 o) l
  49. #endif8 s+ }& [9 D  u! ]: I$ f) {

  50. 4 w  c4 w7 a. z

  51. 3 p0 q4 S. n% q% k
  52. int main(void)+ ?! C0 T( ^/ F# G2 Y
  53. {! y) E5 W( m' U8 [" S( Y
  54.     u8 len;        ( ?/ G6 D  q% X  S. u! d6 g
  55.                 u16 times=0;
    ' }# U! r9 D/ Z" M+ ^$ Q
  56.     Cache_Enable();                 //打开L1-Cache
    & y; w6 V4 s) r# W6 i' O' U, l
  57.     HAL_Init();                                        //初始化HAL库
    6 |1 T! ]6 X) j7 {) Y
  58.     Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz & w5 B- L% |! @: L& _
  59.     delay_init(216);                //延时初始化( |* D  Z- [( k" T
  60.                 uart_init(115200);                        //串口初始化
    ! F2 P" i% H: {2 a' o
  61.     LED_Init();                     //初始化LED( b! I' X! R* q% i2 E
  62.         ) m  b0 _5 F- V4 K7 S0 \. J
  63.         ( r# J$ ?/ h/ ]; @
  64. #if defined ( __CC_ARM )        ( k7 F( U8 s' u
  65.         TempValues1 = 0; /* 避免MDK警告 */  
    8 u. w. q- p9 |4 e6 z
  66.         TempValues2 = 0;  i2 X& ~( N, r# w- Y( o7 j# a
  67.         TempValues3 = 0;               
    3 @9 \5 b5 B! w& Q
  68. #endif
    7 l& O" T$ ]2 W/ z5 u. n& c
  69.         3 L, B4 |1 Y; ]8 r: W
  70.         PrintfLogo();        /* 打印例程名称和版本等信息 */
    " `, g/ o  t$ C8 o( e
  71.         PrintfHelp();        /* 打印操作提示 */7 D4 {5 k+ F" L& r1 q7 E
  72.         
    8 _8 }% T. j$ _+ R6 Y# W" p5 l$ z
  73.         5 n' i# g/ @5 ~9 g' u
  74.         /* 初始化 LZO */+ a. D* ?% e. N) T$ k- d/ h
  75.         if (lzo_init() != LZO_E_OK)
    , t% x. a( K# i% h8 o
  76.         {+ \' B. v6 ~- y9 b, i! J
  77.                 printf("LZO初始化失败 \r\n");9 N* W+ X" H+ c& K* C; a7 A
  78.                 printf("一般是编译造成的操作,可以重新编译,并设置不做任何优化,同时使能-DLZO_DEBUG进行调试\r\n");8 |$ N5 G0 A! b+ T  D4 A
  79.         }. k; j0 B, r3 S- a6 J0 ~

  80. 2 s: W5 J7 v# ?1 H1 e* T& L) H$ Y
  81.         /* 测试数据的压缩和解压 */
    0 I5 O3 `6 p4 [
  82.         TestMiniLZO(1024*1);8 `/ W, z( c. n
  83.         TestMiniLZO(1024*2); % z* S7 w( v. L/ E9 k: x
  84.         TestMiniLZO(1024*3);
    9 k+ c. b2 q9 a7 H! o$ \
  85.         TestMiniLZO(1024*4);  4 I  F5 |- b" @" X# d
  86.         TestMiniLZO(1024*5);1 X7 D+ p; V" Y. W; _3 m
  87.         TestMiniLZO(1024*6);  
    9 F- v8 }5 N( w2 j. C
  88.         TestMiniLZO(1024*7);
    ) r9 g4 x; u# \% R9 U
  89.         TestMiniLZO(1024*8);
    - W4 S) C% k( a0 w( u! J
  90.         TestMiniLZO(1024*9);
    ' o5 H+ P4 X6 C+ b( I& o
  91.         TestMiniLZO(1024*10); ) y- w: k. F( R# X
  92.         TestMiniLZO(1024*11);
    1 ^2 }2 F2 S6 H7 h8 d
  93.         TestMiniLZO(1024*12); 5 p( A: z' H9 n
  94.         TestMiniLZO(1024*13);4 l* ~/ r2 V% Z! V/ q
  95.         TestMiniLZO(1024*14);  % }7 R& ?, o5 [. z% ~4 g. z
  96.         TestMiniLZO(1024*15);3 w! l3 R7 s4 d- J$ j& ^
  97.         TestMiniLZO(1024*16);  
    9 o; g- s  T/ a  S' h3 t* o
  98.         TestMiniLZO(1024*17);
    1 i6 R3 ^' m  {; C
  99.         TestMiniLZO(1024*18);% i  T, X* Z" P+ z, D  c  v* i
  100.         TestMiniLZO(1024*19);
    ) ~8 v& V9 a4 G* W
  101.         TestMiniLZO(1024*20);
    3 h& H/ D3 w( r/ Z
  102.         
    6 T/ K3 y  l  `$ @4 x
  103.     while(1)
    2 K$ s. o$ B2 J1 N1 E
  104.     {2 [. A3 R% `$ z! a3 r' p' x
  105.        if(USART_RX_STA&0x8000), K( j* x9 a3 u7 i% z) k
  106.                         {                                          
    , |- b* b& Q! o' R( U7 ], c
  107.                                 len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
    " I: Y/ P$ |7 X
  108.                                 printf("\r\n您发送的消息为:\r\n");
    # h2 [0 S, z4 C8 C
  109.                                 HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);        //发送接收到的数据1 t2 k/ M. w( N6 e
  110.                                 while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //等待发送结束
    $ Y6 L( k0 ]9 ?0 q
  111.                                 printf("\r\n\r\n");//插入换行
    $ ^6 a/ M2 E$ K
  112.                                 USART_RX_STA=0;* M5 h$ T4 R: n- l" r& }. Y3 |
  113.                         }else
    % D. N, y9 G( O/ w5 E( m/ z& g
  114.                         {* I! k1 H4 }6 X! I
  115.                                 times++;
    ( Z3 c6 x2 g" t4 g+ Y2 q
  116.                                 if(times%30==0)LED0_Toggle;//闪烁LED,提示系统正在运行.
    9 u3 c$ N% K7 Q2 \! }9 E, F& q
  117.                                 delay_ms(10);   0 T% \& p6 F  q2 G
  118.                         }$ O; [2 M( T6 a4 |% ~( N& G
  119.         }: `- A! d; u% ?1 C$ w, g& e# a
  120. }) U- U; u4 M" D) X
  121.   T" B. N. u9 _. R! V
  122. $ o6 Q% Y  [7 O6 N

  123.   P0 }, _% ?+ r* i" L$ N
  124. /*0 Q3 d# _+ j/ u6 g
  125. *********************************************************************************************************$ y6 X8 {6 B/ M# r/ g9 J
  126. *        函 数 名: TestMiniLZO9 m- S  i* b6 b9 ^7 {/ |- r( U
  127. *        功能说明: _Len 要压缩的数据量。; t5 z! e% d- D
  128. *        形    参: 无
    , p2 m" D9 M: i
  129. *        返 回 值: 无
    & t' U5 U+ N  Q4 _8 i
  130. *********************************************************************************************************
    7 T) `8 s4 c* c7 v1 [
  131. */
    4 V" H1 j; w: X
  132. static uint8_t TestMiniLZO(uint32_t _Len)
    # \! `1 z# o- \+ @7 a
  133. {' x/ i% F, j; @$ }
  134.         uint32_t i;
    $ p- |4 j' Q% W: d; ~; F( W, i
  135.         int r;
    . V( c8 t* f$ w' G) r/ S# V2 S- q
  136.         lzo_uint in_len;
    8 f. O& f' N$ O' L  j
  137.         lzo_uint out_len;+ c& o9 j+ _2 c! n/ w# {
  138.         lzo_uint new_len;# l$ O2 y1 b. W7 k) n2 X- J8 b
  139.         uint32_t start, end, cnt;9 `  {1 S( x2 O% J1 ^

  140. ; \! ?! U; f6 R; Z) Y
  141.         if(_Len > IN_LEN)
    $ c- I/ \1 A3 a! f
  142.         {
    " F- Z  I6 P) }# N( C& B" P
  143.                 printf("函数参数_Len超出允许的最大值%d\r\n", IN_LEN);. a: o  |& x9 ^* u# K% {% }' `
  144.         }! Q  m/ Z  u& N
  145.         
    % _. V/ V$ e( ^7 l
  146.         /* 准备要压缩的数据 */7 u  [9 e4 ^" V) t5 ^7 D* |
  147.         in_len = _Len;- `* Y/ c% A7 l1 u2 t0 P
  148.         
    # Z; |$ z7 @: a0 \4 M7 u2 f- D6 g) G
  149.         & N- @- c$ d- @; i; F7 y
  150.         lzo_memset(in,0,in_len);
    / X8 |% d9 A/ T0 ?+ k, k/ |: g$ s
  151.         
    5 @" j' \; P# F( `% b- c
  152.         for(i=0; i< in_len; i++)! ?  m0 m6 E$ `
  153.         {2 l9 G  f& h3 X
  154.                 in<i> = rand()%256;% |4 m+ A+ u9 y# _$ x1 F& Z$ ?! u4 ?6 W
  155.               </i>  InTempData<span style="font-style: italic;"><span style="font-style: normal;"> = in</span><span style="font-style: normal;">;% `6 ]" x( _& w6 v& {: i1 G  N" R
  156.         }
    6 S/ E0 }. d' k9 s

  157. 2 p4 D: ?5 w1 O* e
  158.         printf("-----------------------------------\r\n");2 y1 h& Q/ g: P! i5 s
  159.         printf("-----------------------------------\r\n");
    % ]0 C7 c4 Z. O# O) O
  160.         : H3 X1 h: L2 ?+ S4 w* K: R# {
  161.         /* 将in数组中的数据压缩到out数组 */
    ! C% c" T! Q% Q- d! @- I9 E
  162.         start = SysTick->VAL;1 w; R8 \' S0 r$ f' z2 W
  163.         r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
    - d3 h/ I: `: a7 {
  164.         end = SysTick->VAL;
    ; _9 R& n3 q  w" X
  165.         cnt = abs(end - start)/216;0 n* E/ r5 o- J0 U4 E
  166.         1 g( U* s& U" M  \" X
  167.         if (r == LZO_E_OK)$ I) |( c2 o6 Z3 T+ o- Q
  168.                 printf("压缩 %lu 字节为 %lu 字节,耗时%dus\r\n",, n9 \/ t1 T! P5 y" h
  169.                 (unsigned long) in_len, (unsigned long) out_len, cnt);
    8 s: K& n5 ~( E) O. `6 a" w6 ~
  170.         else6 B7 l+ _* g) x9 w% B" R4 Y
  171.         {  c$ u+ g( k7 H* U# x( \
  172.                 printf("内部错误 - 压缩失败: %d\r\n", r);
    # \4 \# p5 \0 {" A/ t
  173.                 return 2;
    & U$ i! E3 l7 C: N$ U! n- G% @; d
  174.         }
    ) r1 G/ a, Q- }; S+ U: k
  175.         
    / n6 R1 m( L+ s% ~* B/ z6 D
  176.         /* 检查是否有位解压的数据 */( W( I; r( U. H* f$ {/ Q7 L6 V
  177.         if (out_len >= in_len)
    " s' G! a# f" T' F. \
  178.         {% p% Q" G4 }$ ?6 G1 l; c! d0 b
  179.                 printf(" 有未解压的数据 \r\n");
    * Z! }6 r! W# `, i1 P* k1 ^
  180.                 return 0;
    ( P/ w; ?$ E  z. H3 h
  181.         }+ b0 y  x5 @+ c$ m: x3 }

  182. 3 d5 O( l: t& f% F3 z! S% J
  183.         /* 将压缩后的数组out,解压到in数组 */( J& G3 F5 [/ r. a+ G# K. @2 |
  184.         start = SysTick->VAL;
    + K2 h, Y, y6 j* R
  185.         r = lzo1x_decompress(out,out_len,in,&new_len,NULL);
    ! z% ~5 l4 t9 T2 ?
  186.         end = SysTick->VAL;5 J8 y$ l" r$ X9 |
  187.         cnt = abs(end - start)/216;( a, N' r% _1 H5 {
  188.         if (r == LZO_E_OK && new_len == in_len)' d2 M% r1 C7 H; t
  189.                 printf("解压 %lu 字节为 %lu 字节,耗时%dus\r\n",  K! J/ v4 g( _% R
  190.                 (unsigned long) out_len, (unsigned long) in_len, cnt);
    , s/ M( t5 U( z3 l9 |
  191.         else
    & R7 V- f& B+ k
  192.         {! G8 h% Z: X9 ?0 `
  193.                 printf("内部错误 - 压缩失败: %d\r\n", r);
      D, Y8 i, T7 q0 M2 M  t
  194.                 return 1;
    ' O( x0 R: d* N- L
  195.         }6 r" U8 N& @& [. p
  196.         
    ) O3 {' B& p3 a! r6 f
  197.         /* 校验压缩是否成功 */, p/ i( `7 Y. g" F  h
  198.         for(i = 0; i < in_len; i++)  q$ M9 @  |" P, u) l
  199.         {
    " ]2 L' h, T- ^( X, j
  200.                 if(InTempData</span><span style="font-style: normal;"> != in</span><span style="font-style: normal;">)
    8 H& L  F4 Y( Q: I" Q# V1 R! S
  201.                 {
    0 L5 m6 J( ~# B0 r+ X
  202.                         printf("测试压缩失败\r\n");
    / b1 t  x( x. v- x# V; c
  203.                 }
    ) c, x! l' |) [& k" U/ H6 N
  204.         }- ^6 z  G; E& t, a
  205.         
    / }8 m' T) B8 O
  206.         return 0;
    4 A  R( ^( W% p$ X8 S( d* A
  207. }
    5 D, z9 A2 q/ ]

  208. 6 \  Z* @; V; ?4 _
  209. 1 ]& x4 _0 V- E$ w/ E
  210. /** J- \% w8 F, ~/ v! F. [
  211. *********************************************************************************************************
    % R  y; g* T7 k0 f4 ^2 }
  212. *        函 数 名: PrintfHelp
    ( ^, k: E; \% ~% D' s
  213. *        功能说明: 打印操作提示5 g# a4 Q# @1 d& w$ D% D* m8 f
  214. *        形    参:无
    % W7 R7 d% u, N' v/ |
  215. *        返 回 值: 无
    ; L, J( v) I/ F% i3 @
  216. *********************************************************************************************************) f9 C! D" O0 Q5 }
  217. */4 o# P7 d2 N! |' X6 F+ L
  218. static void PrintfHelp(void)3 E: K% t- l7 i. V! R8 n) Q
  219. {7 J$ z! e' C" _. B/ P8 S& I1 h. J
  220.         printf("操作提示:\r\n");
      c/ [7 y; G( B: K
  221.         printf("1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印\r\n");
    9 Z0 r3 w( ~% n  t5 A3 ], s
  222. }
    " \5 ]/ F# v' U* X4 {
  223. $ @6 o: D$ c% T1 J+ M
  224. /*
    & F( Z* [3 \  C
  225. *********************************************************************************************************
    1 _5 U7 J& h. B$ g5 f/ [
  226. *        函 数 名: PrintfLogo# R/ Y4 \- M- r
  227. *        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果" ]4 Y" Z% |% u, |7 s/ x+ B* ?: m" z
  228. *        形    参:无3 V. j: e6 [( P5 `" ]- b- k
  229. *        返 回 值: 无0 R3 r: h/ [2 Y1 w( h$ H6 e" f
  230. *********************************************************************************************************
    ( ^5 M& u' S4 Q6 Q
  231. */4 h5 a& U, O- \1 B
  232. static void PrintfLogo(void)
    # [# E9 F8 K3 R4 t: w- h; m
  233. {4 _. R: }# O3 B% B# u0 V6 }
  234.         printf("*************************************************************\n\r");, w8 g& I5 r+ d+ i  T
  235.         
    - A% G; {! n4 B/ `. p0 M4 P7 ]
  236.         /* 检测CPU ID */9 d7 M2 e1 b1 ]
  237. //        {0 q0 p8 p: |" P/ Y8 @/ E, [* _% N
  238. //                uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2;
    ' r' r$ s0 ~& i- g; z) J: c
  239. //                0 V; r* Q: Q& _7 k7 P3 N  D
  240. //                CPU_Sn0 = *(__IO uint32_t*)(0x1FF1E800);: D# p  c8 J/ d% u3 Y& i
  241. //                CPU_Sn1 = *(__IO uint32_t*)(0x1FF1E800 + 4);; f2 x: n- R6 k& _* q; S# f3 i3 b2 L
  242. //                CPU_Sn2 = *(__IO uint32_t*)(0x1FF1E800 + 8);9 [* B+ t) Q: z  n4 P
  243. ' }4 G( ^: y' g* j6 I) D% ?
  244. //                printf("\r\nCPU : STM32H743XIH6, BGA240, 主频: %dMHz\r\n", SystemCoreClock / 1000000);9 o8 p  i1 T) M; `( ?$ B; _
  245. //                printf("UID = %08X %08X %08X\n\r", CPU_Sn2, CPU_Sn1, CPU_Sn0);
    ' f' w7 A" N$ ^" \7 W% E$ P
  246. //        }+ t+ M5 k# S( g' W5 w5 E

  247. / Y7 n+ v2 A1 E; T! Z+ I& W
  248.         printf("\n\r");5 P7 O- {# J0 F* b3 L
  249.         printf("*************************************************************\n\r");
    1 n6 q: U, ?  ]9 A1 v. W, v+ P* t6 x
  250.         printf("* 例程名称   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名称 */
    5 D- ?1 H  v* x  O2 g0 m) n) y5 u
  251.         printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */
    & a5 ^/ M3 e: b. c$ W- l
  252.         printf("* 发布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */
    ! T" l$ R. z( }+ a( D3 P) h0 L/ n
  253. ) A" F( q/ n. x& u
  254.         /* 打印ST的HAL库版本 */. C7 B  h1 `$ r* e  t5 s
  255.         printf("* HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)\r\n");( o7 U) ^. }9 k4 _1 e
  256.         printf("*************************************************************\n\r");6 }; u. q# l" R5 {7 L, e- A$ B
  257. }</span></span>
复制代码
* E: u% x" R8 v: t
测试结果

0 C% g5 Y% d3 S) M# M( p% A) J% D* p3 m
  1. *************************************************************
    & _5 I# k1 z* _( }( h2 P! x
  2. * 例程名称   : V7-MiniLZO无损压缩算法移植和使用; H0 `# @+ y! \4 u) z8 ^
  3. * 例程版本   : 1.05 e& k$ |) G! A- r+ m6 q  u; y
  4. * 发布日期   : 2019-10-11  x& F) A% v# ~% X+ A
  5. * HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)
    & n  p9 E' P, l/ F
  6. *************************************************************
    3 S) Y- P) P2 i1 `# q5 z* k2 C
  7. 操作提示:
    ! F! H7 m: R4 Y1 @0 U3 l0 q
  8. 1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印: `7 C5 Q$ R' r% V/ `
  9. -----------------------------------" x; i! r+ ~# A4 {: t, L3 c
  10. -----------------------------------) R3 `4 h1 r! {" |6 I
  11. 压缩 1024 字节为 561 字节,耗时328us
    & v3 K' r7 N  y$ L9 f: p. P
  12. 解压 561 字节为 1024 字节,耗时9us  z( [9 H9 P0 Z0 L. b9 S
  13. -----------------------------------
    4 c% S5 g2 x0 A- w) u
  14. -----------------------------------) B# r# _& e! n$ H# g! W2 x2 P
  15. 压缩 2048 字节为 565 字节,耗时334us
    " U9 N' H* A- `) v6 X
  16. 解压 565 字节为 2048 字节,耗时17us
    ! v# u1 Z% |3 C) p+ I( O* h
  17. -----------------------------------
    / C2 U9 f% n) }# J
  18. -----------------------------------2 `: V: N: r0 q( k" L+ l9 J0 q5 z
  19. 压缩 3072 字节为 569 字节,耗时345us+ T1 b- V) e1 u$ ~6 z
  20. 解压 569 字节为 3072 字节,耗时27us' n4 M2 J. T: o3 E9 |& y+ l0 S' {/ @
  21. -----------------------------------% S/ U# X3 y: I, N9 ^5 X1 o$ W4 e6 E
  22. -----------------------------------$ d: k) w7 `$ i( C1 [# {& G
  23. 压缩 4096 字节为 573 字节,耗时357us
    - q' G" \5 ]% k* r
  24. 解压 573 字节为 4096 字节,耗时36us' p# j6 p1 |. t4 X% O
  25. -----------------------------------0 M6 |0 d& ]$ ?4 R, X9 k
  26. -----------------------------------/ I' M' J# U  n0 w* S
  27. 压缩 5120 字节为 577 字节,耗时367us
      H7 Q' d( h# m; V- f* A
  28. 解压 577 字节为 5120 字节,耗时46us1 r% ]* {, O: l# v8 r' v) B" i) N8 t
  29. -----------------------------------9 h) H* S9 g2 G) X
  30. -----------------------------------
    ; W# R' I1 H3 W* M
  31. 压缩 6144 字节为 581 字节,耗时379us
    * k. w+ z  B% K3 A: U5 A1 J; U
  32. 解压 581 字节为 6144 字节,耗时56us
    . [8 c! n' D* C% H
  33. -----------------------------------9 w+ g/ G6 i$ c! X
  34. -----------------------------------
    0 i7 k: B' s1 I# U$ \* x* E8 \" A7 L
  35. 压缩 7168 字节为 585 字节,耗时391us
    ( |% _0 e' U6 Q. i- z
  36. 解压 585 字节为 7168 字节,耗时66us
    # X, N' w$ \! {6 t( |
  37. -----------------------------------
    $ h( Q  A/ f3 q+ S: K' R4 b
  38. -----------------------------------; ~. h+ O  ?! k/ y- W
  39. 压缩 8192 字节为 589 字节,耗时596us
    6 [+ A. d/ ~5 K3 P  R
  40. 解压 589 字节为 8192 字节,耗时76us
    : v' q$ x' p! J  b6 v6 g
  41. -----------------------------------$ K; L3 p; X* \5 P
  42. -----------------------------------5 L" V+ w  u" ?% ^/ Q* G$ _  W. ]
  43. 压缩 9216 字节为 593 字节,耗时585us2 c: n( ]1 r% |, }
  44. 解压 593 字节为 9216 字节,耗时86us
    + l1 z5 ~  T* g( {3 K! n0 D
  45. -----------------------------------$ K6 h- L9 u( {! }) u
  46. -----------------------------------  J0 |$ e, Y" A" T$ E
  47. 压缩 10240 字节为 597 字节,耗时572us
    : B$ U1 B$ ?9 U2 w( N  w. i" @
  48. 解压 597 字节为 10240 字节,耗时96us& t3 k2 L: K# s5 H
  49. -----------------------------------! I5 z* K- ~$ Y' A  m# ]  D
  50. -----------------------------------4 x. c" _( J! W' p, w" U
  51. 压缩 11264 字节为 601 字节,耗时440us
    ) Q/ w' m% e) r0 U* u; f
  52. 解压 601 字节为 11264 字节,耗时892us
    8 p) u/ L% y0 s) T4 U
  53. -----------------------------------# b+ N+ L) A: A4 Z( ~
  54. -----------------------------------
    0 ~( t# `4 C1 }4 s  j4 O1 n7 y
  55. 压缩 12288 字节为 605 字节,耗时548us
    9 j8 V; F0 v# I3 ~" o
  56. 解压 605 字节为 12288 字节,耗时116us
    4 p( _0 [1 O- W% {% s
  57. -----------------------------------
    0 Y! T& t* [7 u7 w7 M  u- I- u( a
  58. -----------------------------------
    " k& m1 n  W/ B2 t) l
  59. 压缩 13312 字节为 609 字节,耗时534us
    9 Z, |: h; y! j! |$ K
  60. 解压 609 字节为 13312 字节,耗时128us
    3 t. k7 y* _- i0 U
  61. -----------------------------------
    % F; G8 Q4 p  I& |, ?
  62. -----------------------------------! _, f8 C4 O8 u7 e0 m! Q' M
  63. 压缩 14336 字节为 613 字节,耗时476us& r+ w3 j* K% m
  64. 解压 613 字节为 14336 字节,耗时859us
    ; P- w* k# t8 _% J$ G) {, P5 n9 t
  65. -----------------------------------" t( q& F6 h# g# ]. u' o
  66. -----------------------------------
    - k4 J5 s+ v/ W* V: n" e0 ~6 j
  67. 压缩 15360 字节为 617 字节,耗时510us
    0 D4 Q. K0 R" R8 W. m
  68. 解压 617 字节为 15360 字节,耗时149us4 U9 Q  s2 |8 f, X9 K  R  ]
  69. -----------------------------------8 G1 s/ Q3 I, q6 y9 f
  70. -----------------------------------& A$ I5 |3 E" K0 [" j# t2 n
  71. 压缩 16384 字节为 621 字节,耗时501us
    ! ]% k  C- o3 l& p5 m: }
  72. 解压 621 字节为 16384 字节,耗时162us7 E$ Z0 g; Y: j) @( E) g5 w
  73. -----------------------------------
    4 T9 G, o( S2 k& |' A
  74. -----------------------------------" B: D# a  o" H8 G4 V* x/ I
  75. 压缩 17408 字节为 625 字节,耗时513us
    % b; N* K- x) y9 [- \; f
  76. 解压 625 字节为 17408 字节,耗时173us6 R. f' L, u, y* u. m# [
  77. -----------------------------------  Y, l6 n: X: n" X( i0 L3 O) m
  78. -----------------------------------: Y& J7 G9 i$ v9 @  w9 `  b: w! f
  79. 压缩 18432 字节为 630 字节,耗时525us
    6 C9 ?8 s) v% q6 C
  80. 解压 630 字节为 18432 字节,耗时183us/ U$ q+ D0 _( d# B7 O7 r; w
  81. ------------------------------------ V( p( [5 V, [9 v. r* ~
  82. -----------------------------------9 a3 _; ^1 N0 G0 A9 N
  83. 压缩 19456 字节为 634 字节,耗时461us7 _1 Y2 I. A; Q, F4 N' ^0 ^* l
  84. 解压 634 字节为 19456 字节,耗时194us
    3 r& ~. v  U& t& z2 ?0 q7 K
  85. -----------------------------------" E0 M+ |4 D7 t
  86. -----------------------------------
    9 ]. @# u" N. u- a& j- O
  87. 压缩 20480 字节为 638 字节,耗时550us& y' {5 w) q" B
  88. 解压 638 字节为 20480 字节,耗时204us+ V' z& R, o$ c1 M6 Q. k

  89. 3 I$ ]6 j- Y3 ~
复制代码
6 S9 q) R. c( S, j- w

6 H  `; ~: w3 H0 u: |8 y
收藏 评论0 发布时间:2021-12-16 22:00

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版