اطلاعیه

Collapse
No announcement yet.

درخواست راهنمایی-مشکل عجیب در کدنویسی سی- ترتیب اعلان متغیرهای عمومی؟!

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    درخواست راهنمایی-مشکل عجیب در کدنویسی سی- ترتیب اعلان متغیرهای عمومی؟!

    دوستان سلام
    مشکلم رو اینجا مطرح می کنم. شدیداً به کمک نیاز دارم...
    یه سیستم مانیتورینگ طراحی کردم. Atmega 32 ، دو سنسور SHT-15 ، رام اکسترنال I2C ، ساعت، ال سی دی گرافیکی، کی پد 4*4
    مسلماً سیستم پیچیده شده و تعداد زیادی متغیر داره

    مشکل اصلی:
    تعدادی از متغیر های عمومی موجود در SRAM بعد از فراخوانی بعضی توابع تغییر مقدار می دن. به نظر میاد متغیرهای محلی بعضی توابع با متغیرهای عمومی تداخل دارن.
    متوجه شدم که با جابه جا کردن متغیر ها در لیست اعلان (یعنی عوض کردن تقدم اعلان) یک سری از متغیرها به حالت اصلی بر می گردن ولی متغیر های دیگری دچار تداخل می شن.
    فرض کنید مقادیر ساعت و تاریخ داخل 5 متغیر قرار میگیره و روی ال سی دی نمایش داده میشه. بعد از فراخوانی تابع ایکس مقادیر این پنج متغیر دستکاری میشن.

    Chip: ATmega32
    Clock frequency: 8.000000 MHz
    Program type: Application
    Memory model: Small
    Optimize for: Size
    (s)printf features: int, width
    (s)scanf features: int, width
    Promote 'char' to 'int': No
    'char' is unsigned: Yes
    global 'const' stored in FLASH: Yes
    8 bit enums: No
    Enhanced core instructions: Yes
    Automatic register allocation: Yes
    Smart register allocation: Yes

    Build: ...
    4919 line(s) compiled
    No errors
    10 warning(s)

    Bit variables size: 0 byte(s)

    Data Stack area: 200h to 3FFh
    Data Stack size: 512 byte(s)
    Estimated Data Stack usage: 69 byte(s)

    RAM Global variables area: 400h to 497h
    RAM Global variables size: 152 byte(s)

    Hardware Stack area: 498h to 85Fh
    Hardware Stack size: 968 byte(s)

    Heap size: 0 byte(s)

    EEPROM usage: 204 byte(s), 19.9% of EEPROM
    Program size: 11308 words (22616 bytes), 69.0% of FLASH

    لطفاً درخواست بازبینی کد برنامه رو نداشته باشید. کد اصلی شامل 2682 سطره، و مرورش زمان زیادی می طلبه.
    کد ها کاملاً اصولی نوشته شدن و مشکل فقط باید به تخصیص حافظه مربوط باشه.

    پیشاپیش از به اشتراک گذاری اطلاعات ارزشمندتون تشکر می کنم.

    #2
    پاسخ : درخواست راهنمایی-مشکل عجیب در کدنویسی سی- ترتیب اعلان متغیرهای عمومی؟!

    با تشکر از معدود دوستانی که این پست رو خوندن
    متاسفانه باز کس نخاراند پشت من...
    و خوشبختانه مشکل حل شد

    مشکل رو مطرح می کنم که تجربه ای شد برای خودم و نکته ای برای دوستان

    یک متغیر از نوع string با طول پنج کاراکتر تعریف کرده بودم به نام str1[5] . متغیری از نوع Float با دستور ftoa به متغیر رشته ای تبدیل شده و داخل str1 قرار می گرفت. کاشف به عمل اومد که بر اثر یک ارور سخت افزاری نهایتاً متغیر str1 سرریز شده و متغیرهایی که در آدرس های بعدی قرار گرفته بودند(دو متغیر برای ساعت و دقیقه) رو می پوشوند.
    str1 --> 0x0316 SRAM
    hour -->0x031B
    minute --> 0x031C

    اگر چه هنوز این ابهام وجود داره که چطور رشته ای با طول ثابت ممکنه سرریز کنه، به صورتی که طولش افزایش پیدا کنه؟

    دیدگاه

    لطفا صبر کنید...
    X