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

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

[复制链接]
STMCU小助手 发布时间:2021-12-16 22:00
源码移植注意事项
( m2 k7 ^/ o- a% u# ?6 g! s; E$ I工程中加入miniLZO源文件为
) w9 k" h3 A* z& q2 s& f
4 j; _6 \9 Q# N( {' c  U
20191011210337436.png
& ]6 z3 l' `  D, B! v) i

3 V$ M$ q/ Y/ c+ _keil5中优化设置选项须设置禁止优化,否则压缩算法可能被优化导致无法正确运行。/ ?( k7 Y- y) E( s- V2 w

( I# {' \5 ^6 [: r3 x) t  I& L
20191011200145237.png

+ x- i5 v2 W" r$ _  p& g- N1 @& }9 l; x
测试程序" O% ^- m3 e  w
  1. #include "sys.h"
    ; S& Y" f! w6 l+ ~+ ^. B+ L
  2. #include "delay.h"* }  S) n5 Y: W- ]- m
  3. #include "usart.h"
    ( ~7 m5 I5 D1 v2 ?5 ^8 Y9 G1 \
  4. #include "led.h"& }7 }1 s; Z8 ~" S- H1 j/ B
  5. #include "key.h"
    / a! v5 |* @7 n9 i
  6. #include "minilzo.h"% w+ V) x- p$ Q4 \
  7. #include <stdlib.h>
    6 b6 W: ~. D0 m# e0 `
  8. 1 @9 `5 K4 E9 c
  9. : i$ z0 h+ e! z+ \
  10. /************************************************/ G0 Y; C- Y0 a3 h$ ?0 O+ K
  11. ALIENTEK 阿波罗STM32F7开发板 实验3( \! M' j# }8 V- x& P6 n
  12. 串口实验-HAL库函数版
    0 N9 i8 P! T  }- ]! L7 d& E
  13. 技术支持:<a href="http://www.openedv.com" target="_blank">www.openedv.com</a>: w4 G+ V) _! k* e& M, _3 W9 t: o
  14. 淘宝店铺:<a href="http://eboard.taobao.com" target="_blank">http://eboard.taobao.com</a>
    - s6 x& }9 p1 G- d' A, |
  15. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
    6 Z- Y7 l6 R! o" q7 _
  16. 广州市星翼电子科技有限公司  0 Z2 c( }( a0 T# ?0 C  Q
  17. 作者:正点原子 @ALIENTEK7 }7 R6 I/ w4 \$ i0 ]4 F/ B8 B
  18. ************************************************/
    ( c' X3 M3 ~" R" K$ v
  19. ( Y3 D7 t! Q2 ?) w: d

  20. 0 r4 e% Q. ]7 V) w/ c' _& {& z, d/ m
  21. /* 定义例程名和例程发布日期 */
    5 R+ I  V5 v7 D
  22. #define EXAMPLE_NAME        "V7-MiniLZO无损压缩算法移植和使用"
    7 N9 r9 m3 x0 k6 I# s2 E7 }$ z; j
  23. #define EXAMPLE_DATE        "2019-10-11"$ R, \  B- ^1 K9 b8 j( j
  24. #define DEMO_VER                "1.0"8 K% _- [" P, T2 m9 {
  25. 9 C4 ]' m' d* i/ q
  26. static void PrintfLogo(void);
    3 ?$ L2 r' K# M! {# `, j
  27. static void PrintfHelp(void);; [% f1 S, E* R" \
  28. static uint8_t TestMiniLZO(uint32_t _Len);' Z! Q9 ~5 o" T

  29. / g* z6 ~/ K) z( [

  30. / [, e( ^1 q8 X! U0 ~" r" f7 Q
  31. /* 定义测试用的输入输出缓冲和大小 */
    * ^3 Z1 p& v* j1 E8 k4 d$ a
  32. #define IN_LEN      (20*1024ul)
    7 Q& v( i; M: @3 z' e" \
  33. #define OUT_LEN     (IN_LEN + IN_LEN / 16 + 64 + 3)
    ( k8 {6 l2 K) b
  34. static unsigned char __LZO_MMODEL in  [ IN_LEN ];
    6 Z8 H6 V  x6 a
  35. static unsigned char __LZO_MMODEL out [ OUT_LEN ];  a9 h" H8 b  C7 J2 U
  36. * e+ Y( \* s' m" b( o
  37. /* 压缩需要内存大小 */' a4 T! _0 x) ~, f
  38. #define HEAP_ALLOC(var,size) \
    5 B; N" e  ~7 x0 R
  39.     lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]& A) K& J) L4 N$ s5 u
  40. 8 Y  l' H. b4 v1 k: ]) Q6 n* E3 E1 L
  41. static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);
    ! `7 l1 A& i6 `4 `' M9 u
  42.         + z( j1 z& M; z5 `1 Y6 V
  43. /* 定义个变量,避免警告 */
    $ B5 i4 B" j% W/ @6 a0 V6 ?2 x
  44. #if defined ( __CC_ARM )
    ! o/ R8 r0 ^6 j2 `6 F
  45. __attribute__((section (".RAM_D1"))) uint8_t  InTempData[IN_LEN];/ E3 C& b. `3 E: H
  46. __attribute__((section (".RAM_D1"))) uint16_t TempValues1;. p* J! r' T2 k. ~$ t, _8 x/ ]
  47. __attribute__((section (".RAM_D2"))) uint16_t TempValues2;  p% [9 V2 }' o
  48. __attribute__((section (".RAM_D3"))) uint16_t TempValues3;. x$ q+ C' s! k! f& T
  49. #endif% z4 Q0 o9 {. d1 E2 \
  50. 3 W( O7 O8 j1 V: Q6 C4 E1 h

  51. # Q0 d) @& ]2 `4 A8 |: ]
  52. int main(void)
    / l* q9 l# x- i. c) J# v
  53. {
    - y6 |( G2 h! z7 G3 z
  54.     u8 len;        . Z+ R3 s9 E" j5 a: @
  55.                 u16 times=0; ) K" t1 r1 p4 z  k* O; h
  56.     Cache_Enable();                 //打开L1-Cache9 f& n7 W2 z2 S% K& V! `; V
  57.     HAL_Init();                                        //初始化HAL库  N4 g$ h; F/ [4 T9 |# y+ ~
  58.     Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz   D. S& H# s! g7 ^% ^/ A
  59.     delay_init(216);                //延时初始化
    + f6 P# E, M' e3 m! p1 u
  60.                 uart_init(115200);                        //串口初始化, M; Y8 I6 D! c& c5 E. f9 s
  61.     LED_Init();                     //初始化LED: ~6 S. g* d' n' U8 R/ V
  62.         
    9 q. e6 q8 G+ }5 i' ]$ F# j3 _
  63.         1 H! @4 P8 t' U6 c6 h3 C
  64. #if defined ( __CC_ARM )        
    ! Q/ y4 @/ }- n3 n9 j$ h
  65.         TempValues1 = 0; /* 避免MDK警告 */  + c5 @- H3 w/ b' R+ z
  66.         TempValues2 = 0;$ e0 S% m7 ]; w/ Y7 ?7 T# s
  67.         TempValues3 = 0;                , h7 c" D3 n) `; h8 }  r- r
  68. #endif
    , U! |8 I2 m& y! E; l* A
  69.         
    ! B9 k% b( e0 f5 H% X6 m5 I
  70.         PrintfLogo();        /* 打印例程名称和版本等信息 */
    ' w' H/ M: y. ?
  71.         PrintfHelp();        /* 打印操作提示 */
    0 U) n' r) A/ j3 k1 n/ K! P
  72.         
    0 Q. a! n& X* U. L
  73.         
      g. t- J: Z6 E- J: a, }) I, d" I
  74.         /* 初始化 LZO */+ `, q% x( `9 r( Z4 A0 N
  75.         if (lzo_init() != LZO_E_OK)
    , B. ~- ^/ b: |; H, Q' r  L
  76.         {
    - b. M* ^0 Y/ d5 ~
  77.                 printf("LZO初始化失败 \r\n");$ v( f1 K5 M+ N  ~) G9 S* Y
  78.                 printf("一般是编译造成的操作,可以重新编译,并设置不做任何优化,同时使能-DLZO_DEBUG进行调试\r\n");% |9 N  i& i8 z1 R6 R
  79.         }
    1 p1 Q% O' b& Z9 O8 [

  80. # ?" `7 l; a( @2 |( [
  81.         /* 测试数据的压缩和解压 */4 c9 a4 E- }, ]3 h2 K4 x
  82.         TestMiniLZO(1024*1);
    ' {" D$ t3 T% V( a
  83.         TestMiniLZO(1024*2);
    : _3 q0 P3 `. f; l; o& ]  O6 s# y
  84.         TestMiniLZO(1024*3);9 c4 y& }- L! j" y( x6 |# z& a
  85.         TestMiniLZO(1024*4);  
    . D4 N) s  K: p2 F- g
  86.         TestMiniLZO(1024*5);" @0 `) Q% }" l- u! g* E. c
  87.         TestMiniLZO(1024*6);  4 R1 v1 w: T" @2 ?1 i
  88.         TestMiniLZO(1024*7);
    ' U; u: ]  r- K+ Y0 r3 w/ {+ Q! E
  89.         TestMiniLZO(1024*8);
    $ W2 o: {' `1 @- D: E% s
  90.         TestMiniLZO(1024*9);$ Q* d5 u# h  U1 o  N
  91.         TestMiniLZO(1024*10); 7 j9 L1 e7 k3 D
  92.         TestMiniLZO(1024*11);
    0 s/ d7 X' V# u$ W. r
  93.         TestMiniLZO(1024*12); ; x4 e6 T4 w# Q( E  f
  94.         TestMiniLZO(1024*13);
    $ [: g: k: d) `! y' D& J5 G- m
  95.         TestMiniLZO(1024*14);  
    / N1 {8 l" i6 d3 Z* ]
  96.         TestMiniLZO(1024*15);
    1 ?( ]# L* i+ n/ s  y- k4 h
  97.         TestMiniLZO(1024*16);  " Y" s3 K6 h4 S% j9 H8 x
  98.         TestMiniLZO(1024*17);, V/ ~8 X) j; d1 n9 d; U1 r
  99.         TestMiniLZO(1024*18);
    % Y, U( Z; s: J& p+ D
  100.         TestMiniLZO(1024*19);) f. `' W, k. `  e' ^, t
  101.         TestMiniLZO(1024*20);
    6 t+ I2 v4 t. x& a" ^
  102.         4 x7 Z* `( j3 [3 b) X* P. ?" c1 J
  103.     while(1)1 U; J4 [: F& s
  104.     {
    : A) R! E; J) Y; q
  105.        if(USART_RX_STA&0x8000)' @/ p. x& v; t, a$ q* f
  106.                         {                                          
    $ o: ^4 k; D! k; h
  107.                                 len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度4 F4 [) w( `( l: ]5 W9 Y5 ~* r
  108.                                 printf("\r\n您发送的消息为:\r\n");
    ' u: b7 B2 Y7 H
  109.                                 HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);        //发送接收到的数据
    5 t2 Y* {2 @; Z9 b. n
  110.                                 while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //等待发送结束. R% z2 V& t. o- n" _5 P( }" z1 g
  111.                                 printf("\r\n\r\n");//插入换行, R: `3 M# t5 S# ~+ o/ z
  112.                                 USART_RX_STA=0;
    : g- X" z2 W0 G; U& s9 Y
  113.                         }else
    + s. X5 F) _) H' m9 B/ n- \
  114.                         {9 Y0 N0 |; B5 u% ?$ r
  115.                                 times++;7 ^' M% [8 C2 a- L2 \) A8 K
  116.                                 if(times%30==0)LED0_Toggle;//闪烁LED,提示系统正在运行.
    7 L" F0 d3 l/ ^7 R4 w  Y% x
  117.                                 delay_ms(10);   
    % E$ U% r+ p! U
  118.                         }
    : y3 {# N- w1 S, _0 o/ q- z
  119.         }- W. C3 k; [+ w0 E
  120. }
    $ p$ y! a% p2 Z% ]# B
  121. ( O# o6 g6 @8 [. O- k  g% ^8 }

  122. 7 g4 h% u7 y$ ]( E- N' A

  123. ' n  J2 k8 J3 ?: e
  124. /*" N3 ?1 B/ D! q7 C% g
  125. *********************************************************************************************************; y( ?& ^: B% W, J
  126. *        函 数 名: TestMiniLZO
    5 X; ^6 c' W# M
  127. *        功能说明: _Len 要压缩的数据量。
    ( O, H* ?; a9 j* n
  128. *        形    参: 无
    0 V1 j8 u5 P% }5 r; N& Q
  129. *        返 回 值: 无
      Y- R: {# m3 S+ a
  130. *********************************************************************************************************
    + @# ^, u; ]6 P' V  O3 ~
  131. */; b3 M: K" x) X2 f/ M% H" Y
  132. static uint8_t TestMiniLZO(uint32_t _Len)
      z  N9 I& {4 W( I; g+ R
  133. {
    ' G$ g$ m3 A* ?  P$ P$ n
  134.         uint32_t i;
    4 L( I" M) f7 U1 W3 u$ _
  135.         int r;
    6 C+ B4 c2 M: ~$ i. O$ q
  136.         lzo_uint in_len;
    $ m: c5 ]4 u/ D2 h" A
  137.         lzo_uint out_len;' l) Q' U2 h+ [5 ~% W5 R
  138.         lzo_uint new_len;
    " N+ K( Z3 ]! P; W" J
  139.         uint32_t start, end, cnt;
    % y- H( u* m* g0 M; F  M

  140. ) }  `2 y- u' P/ V0 v+ T" i- {
  141.         if(_Len > IN_LEN)) R0 s8 d! d; z, k
  142.         {
    , F, r' F$ K& s" o
  143.                 printf("函数参数_Len超出允许的最大值%d\r\n", IN_LEN);
    4 H2 S, ^$ L- _8 `/ v
  144.         }: R0 K: A# F) e, o( V2 Q0 ~
  145.         7 k  k3 e" v# `4 r$ q6 I
  146.         /* 准备要压缩的数据 */! ]3 J& ], t7 Y
  147.         in_len = _Len;
    * ~4 C+ G+ B" {, D2 R6 _) A1 E
  148.         
      r$ w% y9 V( V
  149.         
    % l6 j3 N; i6 G; S+ d
  150.         lzo_memset(in,0,in_len);
    / E" u/ x: m% N! P# v! Z8 h9 k
  151.         2 X! s1 \. @1 Y- L) p1 h
  152.         for(i=0; i< in_len; i++)- q, [! w  k$ s
  153.         {: U" f8 ?7 ], d% C
  154.                 in<i> = rand()%256;
    . k1 f( ?- s! F- _, Q
  155.               </i>  InTempData<span style="font-style: italic;"><span style="font-style: normal;"> = in</span><span style="font-style: normal;">;
    0 ~, O' C# u; S
  156.         }; w# f9 W8 Q+ ?% T# x

  157. 3 _! O! a" U7 s% L' F# P
  158.         printf("-----------------------------------\r\n");* z2 H) E0 E" ~! q  Q" }7 k
  159.         printf("-----------------------------------\r\n");; w; v' `! W/ y* L& v
  160.         
      X( n7 `1 U) ^
  161.         /* 将in数组中的数据压缩到out数组 */- J: U& ?! P% _* P3 t7 P3 L
  162.         start = SysTick->VAL;
    6 A  u8 G7 i. u* g
  163.         r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
    & Z5 ?2 ^: C; b
  164.         end = SysTick->VAL;
    3 B+ O6 x. F  C; ?
  165.         cnt = abs(end - start)/216;+ O6 h1 i0 v4 \& w1 O
  166.         
    ) G1 P% R, e- m" b. X1 N) `  i
  167.         if (r == LZO_E_OK)# U& i) \' `  D
  168.                 printf("压缩 %lu 字节为 %lu 字节,耗时%dus\r\n",7 ]- T0 z( L8 E  k8 b+ Y( d: ?; Q3 k
  169.                 (unsigned long) in_len, (unsigned long) out_len, cnt);! i* Z8 e/ D- Y3 E# r: A
  170.         else- U; ?9 W: e7 s
  171.         {6 {% J) j# p( u3 ^& [+ T4 v
  172.                 printf("内部错误 - 压缩失败: %d\r\n", r);6 i# {6 k6 E+ [  ]3 o. l, Q
  173.                 return 2;, u& y0 D& q$ d" n" t
  174.         }5 E+ `3 Z5 R! l* m/ {# g7 M1 C
  175.         
    ( R: j7 E# E/ j8 Y; o7 f  L
  176.         /* 检查是否有位解压的数据 */; e3 P) W; h# S. M9 [9 Q+ j
  177.         if (out_len >= in_len)
    3 E, \/ p8 |/ u$ l* e$ ?/ S
  178.         {
    6 W$ [: M& V, ~* A5 E) B
  179.                 printf(" 有未解压的数据 \r\n");
    ! c! G; ^4 N8 Y7 U
  180.                 return 0;- ]+ G, O' C! ?% T8 P- W( I1 K
  181.         }
    " l) e) D' M# P8 A2 p3 S

  182. 5 u2 h" O- M( [2 }- W) M1 [
  183.         /* 将压缩后的数组out,解压到in数组 */
    ' r' {1 z6 V. _) y( @8 b- ]$ x
  184.         start = SysTick->VAL;5 k% G- {5 w# V9 v2 A
  185.         r = lzo1x_decompress(out,out_len,in,&new_len,NULL);7 C6 K& q+ ]# j
  186.         end = SysTick->VAL;1 m0 T. _6 H" X6 N6 Y3 n& P, ?
  187.         cnt = abs(end - start)/216;& n$ m5 e- g$ d# X- C8 \
  188.         if (r == LZO_E_OK && new_len == in_len)8 r& N5 m- A# k/ P! r  k
  189.                 printf("解压 %lu 字节为 %lu 字节,耗时%dus\r\n",
    7 t! v. w& r+ l- n6 N7 X
  190.                 (unsigned long) out_len, (unsigned long) in_len, cnt);0 ~2 O2 F; y# R
  191.         else
    0 h9 c" i: t& I; k. k. j5 `
  192.         {
    1 ^3 _+ `2 T  |( K, L& Z4 J: ?6 Q
  193.                 printf("内部错误 - 压缩失败: %d\r\n", r);( ?! C2 s7 T' [  J* z; b
  194.                 return 1;- s0 [( B* ]( u
  195.         }- b0 P7 g; F' f, u1 A
  196.         
    ' F0 t0 E+ [+ S1 Y. B9 X
  197.         /* 校验压缩是否成功 */# G& o/ n1 O. t  f% Z$ C% E
  198.         for(i = 0; i < in_len; i++)
    % I- ~9 h: l4 k- _
  199.         {
    ; Y8 L4 U! H  Z+ @$ A
  200.                 if(InTempData</span><span style="font-style: normal;"> != in</span><span style="font-style: normal;">)8 e) H0 E4 m8 r# }& }' x) Q# K
  201.                 {
    ' X( h* Y" J% k% o% J
  202.                         printf("测试压缩失败\r\n");4 m/ a: ~; d1 |! |
  203.                 }8 k/ O0 l. Y: p( y$ k9 C
  204.         }7 h4 C3 n/ w5 t5 V9 a1 L. c- w
  205.         1 ]1 P: k5 M: E6 Z7 c% L% A! J' G
  206.         return 0;
    ) ^- u, L& m, O+ r& g7 h
  207. }7 \) x2 g* k! k; O) h
  208. . L- _. d7 y. y* [3 B: [
  209. ) Y' g5 p" w7 k* x5 [( R! h
  210. /*7 T& l5 Z& p0 ?' [$ |+ X
  211. *********************************************************************************************************
    0 p9 q2 O4 X! a' A6 Q# ~
  212. *        函 数 名: PrintfHelp: g: d% v$ L  L, _% p% m
  213. *        功能说明: 打印操作提示
    % `: \- v0 E* F9 S: f3 s
  214. *        形    参:无
    - o* l: {6 r: f' S1 E2 V
  215. *        返 回 值: 无
    ! N" T6 h5 x- I2 Z! j
  216. *********************************************************************************************************
    6 M/ M# F5 M* d! M
  217. */' d5 R' }$ O, `- |6 P
  218. static void PrintfHelp(void)
    : r  E4 V7 }& O( O1 E
  219. {
    4 C% W2 H- e: W+ N
  220.         printf("操作提示:\r\n");1 W2 A& ~! ?% q3 ?
  221.         printf("1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印\r\n");  Z) B* e( P  V$ F- H* W( l8 t
  222. }+ }- F8 f/ D- y0 j2 X, y& z1 b
  223. " Q  o' M4 V3 p$ M/ \
  224. /*
    . s' D1 k/ Z9 }& A% c# u
  225. *********************************************************************************************************
    & ?' p; p% J( t8 b  p* i
  226. *        函 数 名: PrintfLogo
    $ d* d4 ~( G! b% h/ a& Z8 O/ g
  227. *        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果
    ( p, L) r' z( P* ^* F9 X* g
  228. *        形    参:无
    * N$ T. @3 z6 G) V5 b* Q( _! {+ a
  229. *        返 回 值: 无1 f6 _8 Q8 X( y" o
  230. *********************************************************************************************************, l8 l" j4 _0 @" C
  231. */
    9 F- m5 U4 a5 b' N2 }9 ?
  232. static void PrintfLogo(void)( r4 w. u9 c& U: ^) {8 L5 E
  233. {# b1 P- j- U! \7 U- U# I
  234.         printf("*************************************************************\n\r");0 O( B7 G. q9 r( P& D
  235.         
    $ d5 ~0 ^' J/ V2 H
  236.         /* 检测CPU ID */' g  Q" b0 _9 E' V+ |' `3 ], @
  237. //        {
    & y* i! T& ~* R6 n  X
  238. //                uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2;9 t5 }, N6 `& _0 n- N
  239. //                9 z! [5 W9 R# n9 x& M: S/ l
  240. //                CPU_Sn0 = *(__IO uint32_t*)(0x1FF1E800);
    / H- Q  h  k- L2 q0 L. m
  241. //                CPU_Sn1 = *(__IO uint32_t*)(0x1FF1E800 + 4);* R* D/ J, k1 l+ @) ]
  242. //                CPU_Sn2 = *(__IO uint32_t*)(0x1FF1E800 + 8);
    ) ]# R8 w1 t  a4 Z

  243. 8 }( i' T4 g  H; L5 u% L
  244. //                printf("\r\nCPU : STM32H743XIH6, BGA240, 主频: %dMHz\r\n", SystemCoreClock / 1000000);  G. D: b  [' C
  245. //                printf("UID = %08X %08X %08X\n\r", CPU_Sn2, CPU_Sn1, CPU_Sn0);1 Y7 c2 A& {; ]/ N1 f: z
  246. //        }  f, ], W% |8 Q# e6 z

  247. 7 h, v" N1 F* t% \" e6 ~9 M
  248.         printf("\n\r");  \( k9 D0 x+ D  t3 k
  249.         printf("*************************************************************\n\r");( E$ R" [1 D( r2 n) G9 C4 Y, x. @
  250.         printf("* 例程名称   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名称 */
    9 h& G; F7 G2 h- B1 }* l
  251.         printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */' y7 \0 s& b4 ]* m5 K
  252.         printf("* 发布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */- |9 P( t# {+ Z# m: `) C+ W

  253. : C6 p2 k* f/ T5 \
  254.         /* 打印ST的HAL库版本 *// C5 A& I3 Y) V0 [- \
  255.         printf("* HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)\r\n");0 R" n6 Y6 S) ^; m3 ^
  256.         printf("*************************************************************\n\r");
    2 j" ?# W' Z* ?5 A3 j
  257. }</span></span>
复制代码
5 Y  [7 i9 C* N/ u5 H! z' U
测试结果

, V- v% l1 S% Q
  1. *************************************************************1 ~1 L! m# o. J0 D: s4 O1 B
  2. * 例程名称   : V7-MiniLZO无损压缩算法移植和使用
    ' a  i. r! _+ `! v) s" U& J  \
  3. * 例程版本   : 1.08 L: _6 M  r! @) u! D
  4. * 发布日期   : 2019-10-11
    4 ]+ k  J! _: V3 M/ B2 F
  5. * HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)
    * J5 {3 J4 e/ v' j8 k  V. k
  6. *************************************************************9 ~5 u1 Y3 g) S5 a# d
  7. 操作提示:6 d# V6 H8 p' U9 L7 z. y) L
  8. 1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印
    - F0 N! L- v# I% ?: Y
  9. -----------------------------------6 p0 n% A: Z( N) f
  10. -----------------------------------! W6 P! ]- a  G& A
  11. 压缩 1024 字节为 561 字节,耗时328us7 C3 |0 s' `' ]
  12. 解压 561 字节为 1024 字节,耗时9us
      D% G  ]' K7 c7 k
  13. -----------------------------------8 Q) x; X  P9 Z  O' V
  14. -----------------------------------3 p) D+ e' [! ^4 c
  15. 压缩 2048 字节为 565 字节,耗时334us
    ! {- O' U4 j( f0 C
  16. 解压 565 字节为 2048 字节,耗时17us
    + v. p' _. L" g' i0 O$ ?
  17. -----------------------------------& v3 B$ W9 H$ p, a; [
  18. -----------------------------------
    6 ?) E8 Z; Z; x" z0 n8 T
  19. 压缩 3072 字节为 569 字节,耗时345us8 V# P9 W% e8 c; ?. a: w5 m( p
  20. 解压 569 字节为 3072 字节,耗时27us
    0 d: H( H0 N, j; S8 W1 e# J
  21. -----------------------------------3 ~8 _3 M9 j8 }# v1 ~4 g* l. \4 u
  22. -----------------------------------6 L3 z3 M- Q2 Y# L0 G$ G. a6 x
  23. 压缩 4096 字节为 573 字节,耗时357us, Z" M8 v+ K* ]4 F+ h- J, F
  24. 解压 573 字节为 4096 字节,耗时36us1 ~, v, X, U: _) ]
  25. -----------------------------------
    ( w: L6 Q  L6 F
  26. -----------------------------------) |. x- z4 A' ~( [. m
  27. 压缩 5120 字节为 577 字节,耗时367us& J' a: [5 r6 t  |# l8 Y4 T3 u
  28. 解压 577 字节为 5120 字节,耗时46us+ m$ A, Y5 N# S. ]6 ~
  29. -----------------------------------# v9 W, t5 R2 A" {& m
  30. -----------------------------------
    + c9 f/ S2 Z+ v# u( H# F" z* Y
  31. 压缩 6144 字节为 581 字节,耗时379us8 Q6 @" W# n: q7 ]4 G  `% I& ^
  32. 解压 581 字节为 6144 字节,耗时56us
    1 z+ u* b+ R9 X# Z- Y% k
  33. -----------------------------------6 c! X* y' `- O) d- e) P
  34. -----------------------------------
    ' ^7 Y# c7 x5 p' H9 u& ^! S
  35. 压缩 7168 字节为 585 字节,耗时391us5 g, ]9 x9 E2 d
  36. 解压 585 字节为 7168 字节,耗时66us9 h' j0 S/ e( [* }$ _
  37. -----------------------------------
    9 |; q% M# W! _: A3 Z
  38. -----------------------------------. h9 L! O( u! d6 ^& U/ I: ~
  39. 压缩 8192 字节为 589 字节,耗时596us
    , y" A/ w, U* E9 p
  40. 解压 589 字节为 8192 字节,耗时76us# C+ V. W$ E/ q' J4 I7 C
  41. -----------------------------------( y8 M% \( ~4 r2 U8 a
  42. -----------------------------------
    : u4 a1 ~2 b! g# q# O, j/ `
  43. 压缩 9216 字节为 593 字节,耗时585us
    - o2 E6 V1 T4 ?+ i9 x! C, A  Q
  44. 解压 593 字节为 9216 字节,耗时86us
    - l% t6 S; P/ p& @7 p2 {% ~* A4 a8 c
  45. -----------------------------------: a! K% _% y4 q3 V# x9 o
  46. -----------------------------------8 f. v; y# G6 e, y! R
  47. 压缩 10240 字节为 597 字节,耗时572us5 K7 ^7 C1 n2 g: N
  48. 解压 597 字节为 10240 字节,耗时96us3 ^! a2 ]5 h1 E% Q8 ^9 j
  49. -----------------------------------
    % a) i8 Z. R: I" m- n& A6 x
  50. -----------------------------------
    # \1 a# L0 O) E, g2 J( E! \" Z
  51. 压缩 11264 字节为 601 字节,耗时440us3 A  [' \& `5 b) s9 c
  52. 解压 601 字节为 11264 字节,耗时892us2 O( K$ Z3 N5 [* {6 w
  53. -----------------------------------+ u* A  h0 v2 {5 [' o: l) a% O
  54. -----------------------------------: Y( t8 F, q% n+ K
  55. 压缩 12288 字节为 605 字节,耗时548us
    6 G( K* I! ~) m6 o
  56. 解压 605 字节为 12288 字节,耗时116us- Y# Q& C2 c5 J: n" V- ~* e/ \
  57. -----------------------------------  s+ ?  y7 y# i. \: J5 P1 Q
  58. -----------------------------------
    9 {  _- g- D$ w
  59. 压缩 13312 字节为 609 字节,耗时534us% J2 D$ K; B7 |1 \* Q
  60. 解压 609 字节为 13312 字节,耗时128us* q0 N2 x) j# \5 f
  61. -----------------------------------; k$ @. b* r8 N
  62. -----------------------------------9 ]* @! D- Y" D0 P$ A, K* A4 a) k7 y8 N
  63. 压缩 14336 字节为 613 字节,耗时476us
    ; U% d2 S1 B( X0 ?& W+ [# ?3 H
  64. 解压 613 字节为 14336 字节,耗时859us3 x/ E: _2 H; @8 N1 B+ s6 I. ^
  65. -----------------------------------* C% _  T/ q0 x, a; s' V
  66. -----------------------------------
    & H9 ^- U2 S) H- ~! r
  67. 压缩 15360 字节为 617 字节,耗时510us
    * ~5 F5 ]" O3 I# A; M- T3 `: {
  68. 解压 617 字节为 15360 字节,耗时149us. N9 K# v. I8 e$ n) S
  69. -----------------------------------
    # V8 w$ @3 B% O8 D9 p
  70. -----------------------------------
    / G* C* m/ C# Q; ?4 e: l
  71. 压缩 16384 字节为 621 字节,耗时501us
    6 L3 v4 `+ y2 I) _3 {
  72. 解压 621 字节为 16384 字节,耗时162us$ F1 G6 o9 w8 h; J4 d
  73. -----------------------------------
    6 C- N/ u! [5 ]0 R) m
  74. -----------------------------------
    6 {. H0 B  _7 S) a2 r% C, N' ^9 |0 y
  75. 压缩 17408 字节为 625 字节,耗时513us0 t- \1 t7 M! ?3 u0 a/ |  p, m
  76. 解压 625 字节为 17408 字节,耗时173us
      A* q6 U& \: e) x- Q7 j( ]
  77. -----------------------------------
    : X4 s" m' Y* k- m7 n4 }- O
  78. ------------------------------------ i, g9 v0 Q; H4 ~, s; {; T
  79. 压缩 18432 字节为 630 字节,耗时525us
    5 S* P# c+ I3 X" M  L4 E" f: x
  80. 解压 630 字节为 18432 字节,耗时183us
    ) Q2 p1 K1 l7 J- x6 H- |9 |
  81. ------------------------------------ o( O+ Y8 c. k% \0 ~6 k% s
  82. -----------------------------------) a, A# z3 ?9 A# k& \9 |
  83. 压缩 19456 字节为 634 字节,耗时461us8 }4 u3 t0 o. i, ~6 W9 _5 `
  84. 解压 634 字节为 19456 字节,耗时194us# B# u* e; D; p, P; }) q6 s  P0 k
  85. -----------------------------------8 H0 ]; A8 c# C: ^  \
  86. -----------------------------------
    2 [# e$ X1 u" p3 V  E
  87. 压缩 20480 字节为 638 字节,耗时550us
    & E3 ?& U9 M- o& e, `
  88. 解压 638 字节为 20480 字节,耗时204us" j  X, ^/ y( y, L3 F
  89. 3 u' ?4 J4 R2 Y+ o  i
复制代码

: @9 p* A9 p' x/ K) |& q. G  \4 U& _0 n# v# y9 I6 E) [
收藏 评论0 发布时间:2021-12-16 22:00

举报

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