请选择 进入手机版 | 继续访问电脑版

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

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

[复制链接]
STMCU小助手 发布时间:2021-12-16 22:00
源码移植注意事项
: t+ o$ ^" v6 `& n+ L工程中加入miniLZO源文件为
9 i* |- p: q, _# V4 |5 h. y$ A( X3 D- H! L
20191011210337436.png

6 M+ n# j5 |9 S' k5 K5 ^7 \, R8 Q4 u' [+ l
keil5中优化设置选项须设置禁止优化,否则压缩算法可能被优化导致无法正确运行。
% s6 @: A4 r7 {) w6 S
2 W* D5 t  X$ }+ |
20191011200145237.png
% ^$ q7 [3 p" b, g7 U2 U
5 Y9 V9 X  u* G8 _4 U$ A
测试程序
, \9 a& ?2 X  Y8 n( _
  1. #include "sys.h"9 f6 D2 f3 R) E% {
  2. #include "delay.h"
    0 L. G8 r* p) K! y, \, m
  3. #include "usart.h"* \* m* y- g' C" o- h5 F' S* d
  4. #include "led.h"
    6 u8 h4 y- Q' m/ \
  5. #include "key.h") O& d# V/ }! M0 S  s5 \4 x. t2 u
  6. #include "minilzo.h"" J  u( f# o! ^6 Q! d) R5 p
  7. #include <stdlib.h>' p6 t: P" k, g" ]  b  A! R
  8. " C. P4 E/ T2 f$ Q$ g. ]
  9. ! K2 @& l7 G: \% D' T- P4 W
  10. /************************************************" w% `3 e* F( X, K# @6 _) x/ C
  11. ALIENTEK 阿波罗STM32F7开发板 实验3
    0 M3 _) \; S& A* |# ]- p, m2 V
  12. 串口实验-HAL库函数版
    6 n6 ]; c# ~7 s
  13. 技术支持:<a href="http://www.openedv.com" target="_blank">www.openedv.com</a>+ v7 N1 c. ~$ v/ T
  14. 淘宝店铺:<a href="http://eboard.taobao.com" target="_blank">http://eboard.taobao.com</a>
    ( w+ H8 Z9 ]" u5 h
  15. 关注微信公众平台微信号:"正点原子",免费获取STM32资料。
    ' F' B) Y. U; a
  16. 广州市星翼电子科技有限公司  : `$ [6 J  w. x! o4 @9 b
  17. 作者:正点原子 @ALIENTEK4 ]" ?( B+ i: @+ K
  18. ************************************************/
    : E3 {: |. p9 K( }  d# i% k% i2 A
  19.   Z3 z5 e0 p  |0 }5 }0 T
  20. 6 R5 l: O- a: w& D
  21. /* 定义例程名和例程发布日期 */
    ' b3 G1 j! P+ q! _; @$ N
  22. #define EXAMPLE_NAME        "V7-MiniLZO无损压缩算法移植和使用"8 A' o2 u8 Q# l
  23. #define EXAMPLE_DATE        "2019-10-11"
    & q+ }: ~' c* `2 p& [% e' e
  24. #define DEMO_VER                "1.0"& {% i3 A: {6 @% H( i4 F# Z
  25. ( W( c' H& h  O. L! ?% x& }4 ~
  26. static void PrintfLogo(void);
    + I# @) X7 y+ J. r9 e7 {
  27. static void PrintfHelp(void);
    ) l) m4 j$ V0 s* }2 Y  c8 r
  28. static uint8_t TestMiniLZO(uint32_t _Len);
    $ s: |  F' [# p

  29. ( g9 @# r" q9 _

  30. 2 [7 S* w8 ~( ]3 T+ Q; F" e6 {, V
  31. /* 定义测试用的输入输出缓冲和大小 */% g3 M, S" a/ Q9 [* @
  32. #define IN_LEN      (20*1024ul)6 _2 d3 K7 N+ c
  33. #define OUT_LEN     (IN_LEN + IN_LEN / 16 + 64 + 3)5 Z9 ]: D) ~( @4 m8 F/ J# o+ ~
  34. static unsigned char __LZO_MMODEL in  [ IN_LEN ];
    ' ?! k8 H) |  r+ y5 _
  35. static unsigned char __LZO_MMODEL out [ OUT_LEN ];
    . F8 Y, Y, E- o( J

  36. ; L/ ~# q$ R6 \0 J# M  `1 y, @
  37. /* 压缩需要内存大小 */
    5 C: ]1 Q/ x) ]# d' W
  38. #define HEAP_ALLOC(var,size) \
    8 @3 C* o2 R) U1 @6 ^& q: r( w
  39.     lzo_align_t __LZO_MMODEL var [ ((size) + (sizeof(lzo_align_t) - 1)) / sizeof(lzo_align_t) ]
    6 P, C5 a% o3 b, H* T* M
  40. ) t' B$ E2 \( y; R) n' r( U
  41. static HEAP_ALLOC(wrkmem, LZO1X_1_MEM_COMPRESS);* E* G$ b! Y( B7 Q: R4 H2 _7 \
  42.         
    9 `, l0 u* r5 X! C% G7 Z+ h
  43. /* 定义个变量,避免警告 */
    / Z( m4 d0 W6 @# Y4 q" K7 A
  44. #if defined ( __CC_ARM )
    & V! B- l  ~7 }# P+ ~8 f: `
  45. __attribute__((section (".RAM_D1"))) uint8_t  InTempData[IN_LEN];
    6 _0 R& n% K9 Q6 t
  46. __attribute__((section (".RAM_D1"))) uint16_t TempValues1;) E( K2 B; A$ a0 M  d: q5 {
  47. __attribute__((section (".RAM_D2"))) uint16_t TempValues2;/ |7 V) y. {4 b3 ]3 W7 u' K% R' h
  48. __attribute__((section (".RAM_D3"))) uint16_t TempValues3;
    + V0 s! G& N: O& ~2 ]/ b4 p% }9 k" H; A
  49. #endif
      I7 P0 `' C! Q0 c1 v
  50. ( F: Z% h& L4 U
  51. 2 t+ o- O4 j: j. r0 E$ h3 n/ W7 ?+ [
  52. int main(void)- c; R" z3 o3 a5 \: u9 d) W( d
  53. {9 K. ~' c# W( m7 U- z0 U
  54.     u8 len;        
    & I& k9 W5 [, r
  55.                 u16 times=0; % _# _0 |8 N) Q
  56.     Cache_Enable();                 //打开L1-Cache
    7 x" v8 H5 u+ m& F
  57.     HAL_Init();                                        //初始化HAL库1 x, H: c+ Q; [/ v) g. C0 P  a
  58.     Stm32_Clock_Init(432,25,2,9);   //设置时钟,216Mhz
    ( {+ A# {. ]8 ]8 `
  59.     delay_init(216);                //延时初始化
    3 F2 ~/ A9 Z7 c, C, K6 I. e. Y
  60.                 uart_init(115200);                        //串口初始化
    ' S1 L$ i, r6 ^
  61.     LED_Init();                     //初始化LED! O' y, m1 h# }/ c8 z* l  P
  62.         ' y, r" O, ~. V4 j. M& a# F1 x! i
  63.         6 g' Y9 O/ l6 T# I0 W* u
  64. #if defined ( __CC_ARM )        
    / i9 z& y7 d$ f
  65.         TempValues1 = 0; /* 避免MDK警告 */  
    ) x8 n- J" J  J/ `  t' |0 N% q/ {
  66.         TempValues2 = 0;' J2 Y1 i" g( [$ |
  67.         TempValues3 = 0;               
    . B3 u" n( \4 c( S
  68. #endif+ q! u% ?3 z) `# y: m! a
  69.         : u8 v4 P- _! v( I" T0 p$ m( _, E
  70.         PrintfLogo();        /* 打印例程名称和版本等信息 */) \' K, u! `6 ^3 x+ d6 I
  71.         PrintfHelp();        /* 打印操作提示 */4 ^& }7 p' M3 p
  72.         
    ' i+ {1 |3 T5 Q* [
  73.         ) t4 W( X& n6 F' x4 L9 d6 G! W
  74.         /* 初始化 LZO */* Q; X- B/ E6 N6 y
  75.         if (lzo_init() != LZO_E_OK)& i* U7 k% K/ w
  76.         {
    $ ]' x8 E: R) A1 F& P; s
  77.                 printf("LZO初始化失败 \r\n");) ]/ ]2 I6 R2 e" G# u
  78.                 printf("一般是编译造成的操作,可以重新编译,并设置不做任何优化,同时使能-DLZO_DEBUG进行调试\r\n");" Z) a% ]6 E' a2 }4 |; u+ ]+ q
  79.         }& K2 [( R8 g. |

  80. 9 o, R. V5 i. C& Y
  81.         /* 测试数据的压缩和解压 */- [9 }/ s% J! A: O( Q. z  B
  82.         TestMiniLZO(1024*1);
    " i8 k9 D- O9 O6 O6 M# _# {
  83.         TestMiniLZO(1024*2);
    ' T% K& Z# l+ ?6 k. A" d
  84.         TestMiniLZO(1024*3);
    8 Y# @$ }8 H3 e( x0 z
  85.         TestMiniLZO(1024*4);  0 i3 C4 E6 {. I4 J' d
  86.         TestMiniLZO(1024*5);
    0 }) E( `5 h* p* z
  87.         TestMiniLZO(1024*6);  
    " N& ?  e- f! D1 D- u
  88.         TestMiniLZO(1024*7);
    - U; ?7 t/ k3 l# g
  89.         TestMiniLZO(1024*8);
    & n& b; S3 J8 N, k% W, Z) D& @
  90.         TestMiniLZO(1024*9);# z& f8 Y, U  l; a" W
  91.         TestMiniLZO(1024*10); % Z1 d0 l- i! X: F
  92.         TestMiniLZO(1024*11);" B, w) B1 R& k" @+ C
  93.         TestMiniLZO(1024*12); 6 x# D3 I; }- o7 `/ I% {$ L5 O- W
  94.         TestMiniLZO(1024*13);; s" O. b0 |" w! N9 g, e
  95.         TestMiniLZO(1024*14);  
    4 n# [9 l8 t; X5 ?
  96.         TestMiniLZO(1024*15);
    - k, O) H: M4 n- a* P9 h: p7 C
  97.         TestMiniLZO(1024*16);  4 L' B; O& E  |3 q6 [$ T' D
  98.         TestMiniLZO(1024*17);
    / y+ x* W* r( L8 b" t1 H
  99.         TestMiniLZO(1024*18);0 l+ g1 N& B$ t/ _( r
  100.         TestMiniLZO(1024*19);
    5 v+ H9 {/ T! `' a  W: y
  101.         TestMiniLZO(1024*20);
    $ W) ~. Q1 C1 o; N  n1 W4 ?
  102.         2 ]  C7 U$ _0 h5 s1 D
  103.     while(1)
    ) k2 y5 l+ m5 r, _2 c! V& [
  104.     {
    ' P. N5 V$ C) M0 V# F
  105.        if(USART_RX_STA&0x8000)
    ; O% \  P  u$ i) `( w: X+ \
  106.                         {                                           # }& ^' t/ o; {4 O7 K9 v
  107.                                 len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度
    4 K" i. m; X2 J; D
  108.                                 printf("\r\n您发送的消息为:\r\n");% V- y6 h; `* P; w8 |
  109.                                 HAL_UART_Transmit(&UART1_Handler,(uint8_t*)USART_RX_BUF,len,1000);        //发送接收到的数据
    3 p' q, R* A* ]; i* J. E
  110.                                 while(__HAL_UART_GET_FLAG(&UART1_Handler,UART_FLAG_TC)!=SET);                //等待发送结束+ o+ x' y0 o! |3 g, Y- H) A" |$ K, z
  111.                                 printf("\r\n\r\n");//插入换行% A1 r/ e. r5 c4 Z9 w( ?
  112.                                 USART_RX_STA=0;3 Z1 x, g6 Z' _0 n
  113.                         }else
    ' [4 z. M1 Y. d8 |! E
  114.                         {. u, ]9 t; h- F, y: i
  115.                                 times++;+ ~0 e/ B# c* r" f" d5 A1 t9 D
  116.                                 if(times%30==0)LED0_Toggle;//闪烁LED,提示系统正在运行.) S  Q6 ?' T+ H. |; h8 m+ Q
  117.                                 delay_ms(10);   
    " n) ]. ~% ]4 Q5 q% o
  118.                         }  L4 W  c* o" |( D
  119.         }2 N  @/ |8 V2 u/ R; W4 g, d6 l
  120. }
    " Y0 F, z! \+ m( j' v
  121. / J# U, Y1 t6 j5 M9 |4 p

  122. / Z# Y; A1 S: a! |3 C  S

  123. + m  Y* Q( E$ O* f9 T
  124. /*5 w* q3 N3 S4 Q& O: G% y
  125. *********************************************************************************************************0 W7 ~  h$ B* G$ R& v7 o
  126. *        函 数 名: TestMiniLZO
    $ u% e. l$ [" B
  127. *        功能说明: _Len 要压缩的数据量。
    - P4 S8 H" A6 v9 a, Y. `$ g- k# j
  128. *        形    参: 无+ R: y9 f; X8 w' L+ l
  129. *        返 回 值: 无8 a9 G3 w( p/ d) m1 }8 C$ L
  130. *********************************************************************************************************3 l# y0 k/ L, w
  131. */0 w% w; r1 g9 H( Z% K$ `
  132. static uint8_t TestMiniLZO(uint32_t _Len)+ R" g4 [9 B1 Y. X* {) W1 @
  133. {! k' a/ c4 q. D1 T4 p. I
  134.         uint32_t i;
    * w7 N0 [: d" `& u
  135.         int r;9 ?! X* S+ T' |$ v
  136.         lzo_uint in_len;
    1 M9 }, l6 k  D6 }
  137.         lzo_uint out_len;
    / |( D2 z) x) a
  138.         lzo_uint new_len;
    * [5 T$ Z! w* X9 w/ E/ P( l: Z
  139.         uint32_t start, end, cnt;$ f: L, G9 K  d+ m

  140. ; I6 V3 y; I. @! Z% g' j. Z/ A1 T
  141.         if(_Len > IN_LEN)
    $ g4 i" |6 y5 e- Y3 e- S% C
  142.         {
    / [9 [5 Z; d0 `" k4 Y
  143.                 printf("函数参数_Len超出允许的最大值%d\r\n", IN_LEN);9 T4 ^- U. b1 z2 e7 Q! B& S$ Y
  144.         }' O$ z  n' u1 V' }& b3 y, l* L
  145.         
      U" B" \9 M1 @5 Z2 p, {8 Z6 H# t
  146.         /* 准备要压缩的数据 */; d5 _& Q- F9 U4 _0 Y
  147.         in_len = _Len;
    5 z  Y# R: e" u! a- B, ]7 X8 \
  148.         4 Z5 i1 N) H8 N$ v% I) o: q
  149.         
    ) Y& F5 y1 I: _3 f
  150.         lzo_memset(in,0,in_len);
    ' J. ~6 a) _& L. D) S
  151.         + y; V, n  g3 d5 R. H7 N7 N7 h. q
  152.         for(i=0; i< in_len; i++)
    # f& U0 h' u" D3 G# L
  153.         {4 Q; e: h0 `6 f& C' I  c
  154.                 in<i> = rand()%256;
    7 l" c: p! _0 z
  155.               </i>  InTempData<span style="font-style: italic;"><span style="font-style: normal;"> = in</span><span style="font-style: normal;">;
    ; K5 {( Y* P4 g/ o& {9 K
  156.         }8 I  B& ^' X- o& l5 |! ^
  157. , A% |9 Q9 ]$ J% ~4 c% P& x
  158.         printf("-----------------------------------\r\n");
    4 t- `' Y4 U  S: f4 F) z
  159.         printf("-----------------------------------\r\n");% o& ^$ B. I% Q4 _5 I% o
  160.         
    2 m1 _( n/ [7 g, I. J
  161.         /* 将in数组中的数据压缩到out数组 */( _0 C5 l' D5 R" `3 d
  162.         start = SysTick->VAL;
    : r4 _/ Y2 ]" b& f0 ^7 y' k
  163.         r = lzo1x_1_compress(in,in_len,out,&out_len,wrkmem);
    ; Y$ u% q1 O% I" c: S
  164.         end = SysTick->VAL;
    9 i0 X# A' k2 W8 G1 N+ |
  165.         cnt = abs(end - start)/216;4 J' J5 I7 G2 _
  166.         ( b' i! @; ]' Z
  167.         if (r == LZO_E_OK)0 W3 Y/ j* ]' j, i4 y
  168.                 printf("压缩 %lu 字节为 %lu 字节,耗时%dus\r\n",
    . b, A" Q6 _" X$ `! {6 |/ x
  169.                 (unsigned long) in_len, (unsigned long) out_len, cnt);! S$ M" X# \$ o  I! y
  170.         else$ w8 d  s% p; D* ~  ~$ }
  171.         {
    4 }# x2 }! N% X+ z+ d  W
  172.                 printf("内部错误 - 压缩失败: %d\r\n", r);( p# h$ m/ c& o3 ]# x
  173.                 return 2;' b/ q4 t( J7 X4 C/ W) |1 K
  174.         }( ^! H5 ~$ @& f
  175.         
    ' D" g1 F! X3 ?- @
  176.         /* 检查是否有位解压的数据 */5 B; S% w1 B5 T$ {: A
  177.         if (out_len >= in_len)# {; X9 J" f$ D  t
  178.         {. ~7 V& [/ b* R4 ]( Z  }( v& b
  179.                 printf(" 有未解压的数据 \r\n");+ H0 e' o9 V7 w7 R
  180.                 return 0;- b$ U6 B3 I) P, `
  181.         }
    ( E0 F; z5 `# M7 ^5 H
  182. 5 W- c0 f$ i: M2 m# p/ q; m
  183.         /* 将压缩后的数组out,解压到in数组 */
    9 b5 a$ Y9 O( K4 C& i9 g9 X
  184.         start = SysTick->VAL;
    0 b1 N& A0 L* z/ R: ]
  185.         r = lzo1x_decompress(out,out_len,in,&new_len,NULL);
      g' y* }0 z) b- R5 q
  186.         end = SysTick->VAL;. n" L% C" J% J9 ]* j2 z- ^0 g
  187.         cnt = abs(end - start)/216;
    1 b$ c" E& f2 R5 Q5 d. F* d
  188.         if (r == LZO_E_OK && new_len == in_len)
    3 O0 Y$ a/ W9 Z  @, D- H
  189.                 printf("解压 %lu 字节为 %lu 字节,耗时%dus\r\n",
      d% [1 p& x& [) T& d
  190.                 (unsigned long) out_len, (unsigned long) in_len, cnt);
    5 `. u) q, f( x: T, o/ Z  z
  191.         else
    1 |  [; g3 h* ~& W3 M" \2 w
  192.         {) z9 `: F6 N; V0 n$ r, p: C$ M
  193.                 printf("内部错误 - 压缩失败: %d\r\n", r);+ K0 P1 g( p9 U9 Z6 h: S/ Z% C
  194.                 return 1;* d0 {% A# O/ _% J: N
  195.         }
    2 J" i) G7 P+ W* V) Y& {* g5 C
  196.         ! o, k  w! m- ]; H; ~
  197.         /* 校验压缩是否成功 */
    1 p! @% N+ e" A, J
  198.         for(i = 0; i < in_len; i++)
    % I* A# J) L/ U+ Q
  199.         {% n9 C8 M2 H8 e: m8 }
  200.                 if(InTempData</span><span style="font-style: normal;"> != in</span><span style="font-style: normal;">)* I" l9 X! |4 x
  201.                 {' b" z/ c- J1 w& Z
  202.                         printf("测试压缩失败\r\n");. W! V0 s4 D( I6 |4 ?
  203.                 }
    3 K7 z8 q1 \/ H/ ~, K
  204.         }
    , f3 r  L" p8 Z, V/ h$ ?% }
  205.         
    + V# L& D: K; _& ~& v0 L' {
  206.         return 0;  R# R3 f9 h$ F/ D1 A2 ~
  207. }5 c1 G2 {! b. S0 V7 I# S/ V, U
  208. ; u/ K+ W9 N( d% k
  209. : ^- C& ~4 c' V$ y; y3 t/ J8 D
  210. /*! F$ @- h$ ~3 u1 j: m6 |
  211. *********************************************************************************************************0 P+ _0 w2 t) v/ M$ Y
  212. *        函 数 名: PrintfHelp
      e, f- l/ S6 v" j- C# B6 v* A
  213. *        功能说明: 打印操作提示
    " k, ?/ ]$ n8 _
  214. *        形    参:无
    ( ?8 \7 P' ^5 Y7 e' Q( R& H2 H
  215. *        返 回 值: 无* P9 \* y; B$ l; q- Y
  216. *********************************************************************************************************
    , e6 {. ]0 F2 f' l0 l/ r$ q5 u
  217. */
    " q2 r: m$ n2 q+ d  L, Z
  218. static void PrintfHelp(void)
    ' Q5 X8 J1 [) i, ?
  219. {3 I$ t4 J5 F, Z& n$ c! a
  220.         printf("操作提示:\r\n");7 z) `! ?4 u! q+ p
  221.         printf("1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印\r\n");
    ' P$ B% q( ^; Y/ C3 f4 \
  222. }
    & c- f& s3 M8 e& W3 E! K
  223. ; E4 T/ P& D7 G' `: g( j3 n+ H
  224. /*+ N7 b, z+ u6 X0 Q
  225. *********************************************************************************************************
    * n* j! R3 E. J4 m+ l
  226. *        函 数 名: PrintfLogo  @( m, {9 N  u# @4 s. z) W6 d: Q
  227. *        功能说明: 打印例程名称和例程发布日期, 接上串口线后,打开PC机的超级终端软件可以观察结果
    7 `, @2 y! p/ a5 N, \
  228. *        形    参:无
    $ C. e; `9 y# Z6 }1 ]% s4 k9 {* Z
  229. *        返 回 值: 无
    " B, G% Z" [4 \* E: u
  230. *********************************************************************************************************
    8 o$ c  O- x/ X$ N7 h
  231. */
    7 _# x: Q  Y- z9 u: E( X6 M
  232. static void PrintfLogo(void)
    * R+ `0 b1 }3 M! m, _
  233. {4 c" E( ?1 s9 T  d1 A) T
  234.         printf("*************************************************************\n\r");3 |; B/ g! e' b) t" ?
  235.         4 I' i/ i1 y# c; I( l5 i
  236.         /* 检测CPU ID */
    ' r5 r9 U9 ~, ]3 G. e
  237. //        {6 X* G1 L7 T0 C0 g# K) [
  238. //                uint32_t CPU_Sn0, CPU_Sn1, CPU_Sn2;
    5 A& p+ W0 {7 m% N" w9 Z7 H
  239. //               
    & s# E# o+ {+ r1 x7 G8 m0 U
  240. //                CPU_Sn0 = *(__IO uint32_t*)(0x1FF1E800);3 N5 o) ^" H3 u& t! M
  241. //                CPU_Sn1 = *(__IO uint32_t*)(0x1FF1E800 + 4);; m! J6 G6 D; `  }$ g1 h2 _5 r2 n2 Z
  242. //                CPU_Sn2 = *(__IO uint32_t*)(0x1FF1E800 + 8);; c1 |: [+ h. S, i* p( }1 E

  243. : M: \0 L# {: i+ c( \1 _" G+ ~/ S
  244. //                printf("\r\nCPU : STM32H743XIH6, BGA240, 主频: %dMHz\r\n", SystemCoreClock / 1000000);/ |# u6 V; h8 j, \, f: O0 a
  245. //                printf("UID = %08X %08X %08X\n\r", CPU_Sn2, CPU_Sn1, CPU_Sn0);3 d9 }! o3 W/ \
  246. //        }! @1 x1 G' O3 m' K! c* J# R

  247. ; T. V- G  x* p+ ^- [: L0 O7 c
  248.         printf("\n\r");
    7 r0 _3 s" W5 D4 o2 |8 ^
  249.         printf("*************************************************************\n\r");
    : d" E8 c4 Z9 a" K
  250.         printf("* 例程名称   : %s\r\n", EXAMPLE_NAME);        /* 打印例程名称 */
    8 `* P$ R2 O8 |
  251.         printf("* 例程版本   : %s\r\n", DEMO_VER);                /* 打印例程版本 */6 G! i, m% j6 a+ A. @& c
  252.         printf("* 发布日期   : %s\r\n", EXAMPLE_DATE);        /* 打印例程日期 */9 {) }9 O9 @% a* [2 V! N

  253. $ j+ D  D, S( p. {, E* v3 a: |
  254.         /* 打印ST的HAL库版本 */
    ' W  y/ R9 B. Q# E
  255.         printf("* HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)\r\n");) m/ j$ N0 o& t" e' p+ ~3 ^; k% p
  256.         printf("*************************************************************\n\r");- }5 W, _- s# R' |) I% a
  257. }</span></span>
复制代码

  K5 z* Q, H, E5 f  _测试结果

  }1 [8 }# Z  P0 E( ]& V1 T
  1. *************************************************************
    6 u2 k$ ~; L5 s, N( o
  2. * 例程名称   : V7-MiniLZO无损压缩算法移植和使用# j# s, x0 L7 V) x+ x8 h# v' W  A
  3. * 例程版本   : 1.0
    0 i' n- u5 M0 H% n* u4 J$ ^: z
  4. * 发布日期   : 2019-10-11
    1 [9 J: N9 k8 }2 ^( [
  5. * HAL库版本  : V1.3.0 (STM32F7xx HAL Driver)
    5 ^3 I6 m2 R' g# `/ R
  6. *************************************************************) O  {0 d" Z  W
  7. 操作提示:
    - |5 N* T! N' _) [+ z& W% ~# u
  8. 1. 数据压缩和解压测试,请下载程序并重新给板子上电,上电后自动打印  B+ N$ x2 k% C& A
  9. -----------------------------------
    / K) l  j# J; A
  10. -----------------------------------, Y# b* C9 {2 }9 y8 ]4 O
  11. 压缩 1024 字节为 561 字节,耗时328us
    7 g0 a5 n- h! C2 W0 Y
  12. 解压 561 字节为 1024 字节,耗时9us4 e! [' h3 c; c# U& @
  13. -----------------------------------
    ) |: C3 s) X$ ^1 F
  14. -----------------------------------: b: n: Z6 X; X0 ^! W2 S
  15. 压缩 2048 字节为 565 字节,耗时334us: P' G( N  B, f& q
  16. 解压 565 字节为 2048 字节,耗时17us( ]; U8 u) |/ Q: R- W) x
  17. -----------------------------------" X/ ~6 U' g1 g4 |* b2 X# w
  18. -----------------------------------
    1 o4 ~3 Z! t) i) b9 r4 K9 L
  19. 压缩 3072 字节为 569 字节,耗时345us
    / m- d8 h" ]. ]1 J- ]
  20. 解压 569 字节为 3072 字节,耗时27us
    0 C# ?4 t) E$ ~# @- _: h
  21. -----------------------------------
    , r* P* {4 g* Q
  22. -----------------------------------
    9 i" ~( [& y2 \+ x) D
  23. 压缩 4096 字节为 573 字节,耗时357us
    5 c$ W+ L$ L' y5 c3 C- Y7 t! U
  24. 解压 573 字节为 4096 字节,耗时36us# D( ~; |! Q: l; |& M) ]! Z1 ^) o# I) ^
  25. -----------------------------------( `+ X* C1 o; P) D
  26. -----------------------------------" Q7 D+ O1 q2 K. j# r( L) }
  27. 压缩 5120 字节为 577 字节,耗时367us( e; g5 y3 p! ^7 N% Z
  28. 解压 577 字节为 5120 字节,耗时46us* q+ u2 D* I8 C5 N" L, q2 C
  29. -----------------------------------
    9 i/ n" C5 \  g3 T! }2 v( _+ B
  30. -----------------------------------
    5 d  C( R! j2 D( `) \- `/ e2 C
  31. 压缩 6144 字节为 581 字节,耗时379us
    : K' T: C  x8 i8 y' m7 W
  32. 解压 581 字节为 6144 字节,耗时56us
    . J8 O6 G. c7 W# @- }: S( D' _' u
  33. -----------------------------------" A' e& ]# `4 B7 t5 a- X; o1 P$ h& c
  34. -----------------------------------! M: z  E, l* J2 k$ D. N* s
  35. 压缩 7168 字节为 585 字节,耗时391us
    " D6 e% N$ v+ h7 \
  36. 解压 585 字节为 7168 字节,耗时66us& B) @% d3 p( v- n  |" Y: C+ |3 N
  37. -----------------------------------
    % w  U6 {0 t4 Y: y: [
  38. -----------------------------------
    7 ^* p4 u$ W% o6 f$ W
  39. 压缩 8192 字节为 589 字节,耗时596us
    4 z& T: K3 N) o% b7 d5 f6 b- V6 f) h! p8 I
  40. 解压 589 字节为 8192 字节,耗时76us
    , d6 ?+ K* U4 n1 j( |& ?
  41. -----------------------------------2 a, R) I1 H6 @/ D7 e
  42. -----------------------------------  j+ ~: {% ~+ W5 c
  43. 压缩 9216 字节为 593 字节,耗时585us( z$ g5 f' e7 c/ L6 b* |
  44. 解压 593 字节为 9216 字节,耗时86us* I) c8 T6 q1 G4 x7 D6 K- G9 v, x
  45. -----------------------------------
    # Q! M( o. o4 K- ~* p8 J1 h
  46. -----------------------------------  }5 g- k0 A, C; J
  47. 压缩 10240 字节为 597 字节,耗时572us; U6 _- `/ H9 l6 ^
  48. 解压 597 字节为 10240 字节,耗时96us
    9 u8 M8 d1 Z2 C
  49. -----------------------------------' Y/ Z* S9 r) K5 {5 j  F
  50. -----------------------------------
    6 s& u. H0 C4 I! K9 i. ]" |
  51. 压缩 11264 字节为 601 字节,耗时440us
    / Y' l! u0 K9 V2 E) e
  52. 解压 601 字节为 11264 字节,耗时892us
    2 Y* u- T' b8 h1 [' Q% p
  53. -----------------------------------7 o  b5 y3 T, y
  54. -----------------------------------& J% |" P. I$ }# B. Y
  55. 压缩 12288 字节为 605 字节,耗时548us% ~) O, D  A5 a; v% p
  56. 解压 605 字节为 12288 字节,耗时116us& s/ Y. P, M' ^2 L' v
  57. -----------------------------------( X2 t7 B: l& P# t
  58. -----------------------------------, l( \/ Y0 @8 n  @
  59. 压缩 13312 字节为 609 字节,耗时534us
      u, \1 L& `. v9 S9 ~
  60. 解压 609 字节为 13312 字节,耗时128us
    9 o# H8 j+ ~: i/ Q' \# D6 m- R
  61. -----------------------------------
    4 U5 ^: D( v0 @6 ]; p2 S: Y
  62. -----------------------------------+ J+ {" }/ ?% U( {) k9 |; k) [: C7 A
  63. 压缩 14336 字节为 613 字节,耗时476us: \4 Y. }% n/ ^& k8 ?# f
  64. 解压 613 字节为 14336 字节,耗时859us# ^! D5 m  k, `) p; Q4 u7 `
  65. -----------------------------------
    : H7 H2 n$ `! _9 e& X
  66. -----------------------------------
    9 T, L- B0 U! w. K7 P+ y
  67. 压缩 15360 字节为 617 字节,耗时510us
    " ?* w# L- ^( V$ @7 i( F% d
  68. 解压 617 字节为 15360 字节,耗时149us3 e; [# H% Y& z$ p0 J! A* o# I- [
  69. -----------------------------------
      T5 D' C4 h5 I6 n) Q! ~9 k& J. I8 [
  70. -----------------------------------
    ( K2 q: Q! D- r
  71. 压缩 16384 字节为 621 字节,耗时501us
    5 a8 w5 k% \! `6 d3 J" I4 R. ^
  72. 解压 621 字节为 16384 字节,耗时162us9 K) {* j  |( c( n) c& s" s
  73. -----------------------------------6 Q* ]& G% X$ ^; d# e2 W
  74. -----------------------------------
    & j& E+ _7 L& X: C' e" R0 ]* ^
  75. 压缩 17408 字节为 625 字节,耗时513us
    5 F0 p" e+ E7 U, ^) S1 G* y
  76. 解压 625 字节为 17408 字节,耗时173us
      n: I; H0 B  W0 ^! O
  77. -----------------------------------1 Y) L6 U- F6 l9 c, H
  78. -----------------------------------
    ( F" l; B+ \2 Q2 m. J  G
  79. 压缩 18432 字节为 630 字节,耗时525us
    8 X9 x5 M- C0 d$ ?
  80. 解压 630 字节为 18432 字节,耗时183us5 k" e6 z" \& [
  81. -----------------------------------7 v9 c' L! W7 U% B( x0 [* C0 x+ F
  82. -----------------------------------5 m$ n: A4 w; K- s- `/ y3 E* y/ M
  83. 压缩 19456 字节为 634 字节,耗时461us
    6 h, N8 p' B  b8 N4 F- s! q
  84. 解压 634 字节为 19456 字节,耗时194us
    # \( R: h/ o9 Q" L. S/ X; ?
  85. -----------------------------------
    $ s+ P# u' n  r" t3 [
  86. -----------------------------------4 T! J9 L  W9 j- P  u+ b2 d, r9 h
  87. 压缩 20480 字节为 638 字节,耗时550us0 v$ W- \' S/ i
  88. 解压 638 字节为 20480 字节,耗时204us& @, i8 \6 l/ b* T! K" D/ s
  89. ) F3 M1 y9 v8 Y6 w* [4 J
复制代码

% U# j" N0 s5 b. c# R+ h% O' y: ^* V
收藏 评论0 发布时间:2021-12-16 22:00

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版