找回密码
 注册
关于网站域名变更的通知
查看: 259|回复: 1
打印 上一主题 下一主题

SOC开发中volatile限定词与编译器的优化!!!!

[复制链接]
  • TA的每日心情
    开心
    2019-11-19 15:19
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-4-15 10:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    SOC开发中volatile限定词与编译器的优化!!!!

    4 Y- {( m$ E; L+ U7 Q% y* b# n  H( T6 {& V

    ( L5 r$ l' ]0 u. R( R7 w最近上手nios软核处理器,入门自然少不了流水灯,开始按照“NIOS2那些事儿”写的流水灯程序,但是然后函数是自己写的,结果所有等都是一直长亮,死活不能流水。5 a+ _' q) f1 V) ?9 _

    4 S9 i/ ]: X3 M% g1 f代码如下:% W1 k& R" ?6 n# v4 u
    ( y; m9 i9 [$ w% a- f+ W4 C) k

    0 k' \$ W3 I  x+ I( L' ?. D& e: P& [5 B' Y" H. i/ P$ L& \

    8 I/ {2 X" G) U/*  p8 C' P; o# r- u) s1 u) u: @
    6 x+ C: t6 r% C6 b. D1 Q: T
    * main.c
    3 }) P+ q2 x3 W, o+ P+ |; T2 C: ~/ Y0 p- Z5 S8 y. J  \5 X0 f! [
    *
    , o. j8 P  [4 U7 B# O
    - |( S  u4 N; S8 E*  Created on: 2015-4-14
    % y9 Q* ^9 d: W+ a$ N  N9 G: Y
    5 C' P5 p- f/ Z7 v! o# N*      Author: meicai
    ! N. U# r( I% K! F6 T% F2 m
    ! V8 {1 [& p' q7 |# |*/  K  L# ^4 D4 Z# j3 N+ q0 E9 ~. _- v1 S

    ) w) ]; R: a7 W#include "../inc/sopc.h"
    ! u0 t2 o3 P; ~. `. V+ A# z3 o; t( \/ J1 X. F. ^2 a7 U8 Z4 L
    #include "system.h"
    * C) d( f  u2 u3 s2 g  m: W8 I9 ~8 M2 j: Y7 }
    7 H" [: `% U/ k; `. c, u8 T4 d

      \  \  |1 l5 ?: X1 a3 u" X9 qvoid delay(void);
    % s4 F+ y5 p. u9 S7 |. v( q4 s' g+ ~) Q' G" s
    ! j- Z( O9 n4 q

    3 t: ^0 }5 j' D, D. i
    : k: p0 e2 H7 M* |
      F2 d! x* e  f6 V8 M5 z! jint main(void){3 U. X& Z# Y$ B; ^) a! o1 _
    9 y5 f- ~7 c2 i  t* H. {5 [. [
    1 L- @$ K* j# ~3 E
    ' u' m+ @4 A6 R: Q
    # b* y/ |& R# B' c, @

    / ?( K' D* X( P8 d8 h        while(1){
    ! y- ?7 T# @8 c$ Q/ _6 T0 \
    * m+ T; d4 T* _* E/ ?2 t
    6 t; g  _) p. [5 O' p6 E3 W9 ^& f4 ~
                    LED->DATA =0x01;
    ( e7 t5 i+ G& {1 P# ~: `3 U  X$ O8 }# a% e+ g

    4 k3 L+ T4 [' r6 n- B
    8 M& ~2 D8 Q* T; p                delay();8 Y7 O$ Q- Z8 _7 y4 k

      y& V2 R$ ]) H* |+ L
    2 Q5 C3 c: t7 M, f, \. M' }+ N+ b- J2 d% p+ F! A6 R) \' W
                    LED->DATA =0x02;5 Q. u% z! f, C) d1 |3 d4 I7 F7 F

    ; n: v; N1 r$ L7 q  l% ^
    9 s$ g' t$ L# X) k7 D* K
    1 j) Q9 H$ p" @) ]" t/ z' U( @5 d                delay();6 s; D; Q7 P0 _) @0 E
    " q3 D; ^9 S! K2 Z

    . @6 N( H  R* W& U
    6 }# t5 A$ ?. w. A        }& e) W9 w0 \' Z+ [

    " T% L' L5 B: _, N/ e9 I- k5 D7 N- n        return 0;
    & r: b8 ]7 ~) v" |. \' D& I9 W
    ( o4 c: h6 @* \3 G3 y( `: C}* i5 F2 b6 v% @3 n) q2 H: p: N
    & }* Y& t& n& F( X1 d. p, a

    , K, {" ~# j  w* U$ G0 k
    4 ^- |$ r& m: ?' R& Dvoid delay(void)
    ( T3 x- k) W  A5 V& `2 k
    0 |& X6 p, Z8 |- q; n  f! O{
    1 H: x; {0 r; S0 |. E1 [' V$ L6 A, I- F7 B2 B. M
            int i;
    & D* X$ K+ M. n& Z$ n
    ! N+ L/ D( U9 K, e, j1 @* [
    ) h2 j; Q6 u  W4 y; I) z" G* K" N/ d( q+ X
            for(i = 0; i < 400000; i++ );, Y3 d! P1 T! X
    & u( E7 U8 b6 U7 i5 m

    5 d# s( E- S" \# {. m& \) F) T/ n8 L8 h  N- [2 j" b$ V
    }. Q" J$ L6 j4 @3 \0 ~( r5 q% i
    % Z( k* z: l, x4 a
    ' G# Q/ F$ ~: R

    . [2 ]! n* n# c
    8 [. a8 z2 T! r# s+ C, C后来发现是delay函数中的变量 i 被编译器优化掉了,甚是郁闷,通过观察其他人的代码发现在变量声明的时候都会加上volatile,我也效仿了一下,在delay函数中声明变量 volatile int i;嘿,果然就好了。后来翻书找到了volatile的解释。如下:
    # e7 d* U2 E0 k' L, c0 r% _& C+ Y5 |9 K* L0 c
    voaltile用于强制某个实现屏蔽可能的优化。, Q* N9 Q- X" S; d- b/ ~
    / h9 l/ [+ D3 E

    7 r; p: W2 C. E& H- E
    3 L' p# D$ \0 y0 E/ h9 A4 @另外要注意的一点是,我使用的开发板上led灯灯饰阳极接电源,引脚拉低点亮,然而移位操作是用0补的,这就导致所有led灯都会一直亮。, ]8 ?  l. k: Q

    该用户从未签到

    2#
    发表于 2019-4-15 17:09 | 只看该作者
    讲的非常好 赞一个
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-30 06:49 , Processed in 0.125000 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表