C: premenne static
Ladislav Vaiz
spam na nagano.cz
Pondělí Červenec 29 22:40:50 CEST 2024
Fungovat to bude stejně, ale v druhém případě se nedá vyloučit přístup k
proměnné z jiné funkce či z jiného modulu(zdrojáku).
L.
On 29.07.2024 22:27, Jan Waclawek wrote:
> [preposielam]
>
> Ahojte,
> chcel by som sa spytat tych znalejsich standardu C99 aky je rozdiel medzi
> premnnymi v nasledujucich dvoch fragmentoch kodu. Ide o kompilator XC8 a
> MCC-konfigurator. Pokial zapnem generovanie kodu a automaticky callback
> rutiny pri TMR0, tak to vygeneruje nasledovny fragment kodu:
>
> #define CALLBACK_COUNTER 10
>
> void __interrupt TMR0_OverflowISR(void) {
>
> static volatile unsigned char ISR_Counter = 0;
>
> if(++ISR_Counter >= CALLBACK_COUNTER) {
> CallBackRoutine();
> ISR_Counter = 0;
> }
> }
>
> Ja by som to napisal takto:
>
> #define CALLBACK_COUNTER 10
>
> volatile unsigned char ISR_Counter = 0;
>
> void __interrupt TMR0_OverflowISR(void) {
>
> if(++ISR_Counter >= CALLBACK_COUNTER) {
> CallBackRoutine();
> ISR_Counter = 0;
> }
> }
>
> Viete mi prosim vysvetlit niekto aky je rozdiel v C99 v premennych raz
> globalnych bez static a raz lokalnych s privlastkom static? Ako myslim, ze
> som pochopil, ze ta static lokalna zostane "ziva" aj po opusteni rutiny
> prerusenia, ale nie je mi to velmi jasne. Preto sa pytam. On totiz ten XC8
> v2.46 je uz asi moc C99 kompatibilny a ja nie som az taky dobry programator
> C, aby som jednotlive nuansy ovladal dokonale.
>
> Velmi pekne dakujem za odpovede a vysvetlenie.
>
> A.
Další informace o konferenci Hw-list