با سلام
من همین 1 هفتس شروع کردم کار با arm و از همین تاپیک ها وارسال هایی که افراد با تجربه تو انجمن زده بودن برای شروع کمک گرفتم.
چند سوال داشتم در مورد مدیریت حافظه.
بچه های دانشگاهمون و یکی از اساتید مراجعه کردم کسی اطلاعی نداشت. براشون جدید بود. تو اینترنت هم گشتم ولی چون یکم تخصصیه راحت پیدا نمی شه. یک سرنخ های کوچیکی تو user manual میکروکنترلر پیدا کردم.
می خوام با میکرو کنترلر lpc2103 کار کنم اونم تو شبیه ساز پروتئوس. با keil. بدون این برنامه های از قبل نوشته شده پیچیده.
دوستان من انتظار پاسخ کامل ندارم. اگه یک اشاره کنید که لپ کلامو بفهمم(مثل اثبات طولانی که فقط چند نکته کوچیک داره) یا یک منبع سریح معرفی کنید ممنون می شم.
1_ سرعت خوندن از روی حافظه فلش چه قدره؟ با رم فرق می کنه؟ سرعت خوندن , نه نوشتن.(در datasheet و user manual چیزی نبود) اگه سرعت خوندن از فلش میکروکنترلر بیشتر از حافظه رم هستش چه تکنیکی وجود داره که برنامه رو بعد از بارگذاری از حافظه فلش بندازیم تو حافظه رم و خظ اجرای برنامه رو ببریم رو رم؟ یعنی برنامه لود بشه و اجرا بشه. دقیقا شبیه همون چیزی که سیستم عامل میاد یک فایل exe رو بازگذاری می کنه روی رم. در مورد ram memmory allocation مشکلی ندارم تست کردم کار کرد. فقط heap رو تنظیم کردم و از تابع malloc() استفاده کردم.
2_برای پروگرم کردن فلش نوشته بود می تونین به روش IAP استفاده کنیم. من تو اینترنت دیدم یکسری برنامه های بزرگ و هدر های حجیم و پر اضافات بودن که همچین کاری کنن ولی من می خوام اولا یک چیزی یاد بگیرم دوما چیزی بنویسم که دقیقا مناسب یک کار تخصصی خاص که می خوام برنامشو بنویسم باشه. نه یک چیز جامع. (یکبار نشستم تو C CONSOL از 0 رابط کاربری گرافیکی مثل Windows 3 نوشتم. مثل گرافیک bios ـ 2000 خط شد)
اصلا من مرض دارم می خوام چرخو از اول بسازم. :rolleyes:
من چه طور می تونم روی flash بنویسم؟ تو codevisionavr که برای نوشتن رو EEPROM فقط کافی بود تعریف کنیم متغیر eprom و مثل بقیه متغیر ها از روش بخونیم و بنویسیم و سیستم خودش کاراشو می کرد. اینجا باید چیکار کرد؟ register خاصی داره؟ یا باید معمولی رو آدرس حافظه بنویسیم؟
3_ چه الگوریتمایی برای تخصیص حافظه و مدریتش وجود داره؟ یعنی یک تابع بنویسم مثل malloc() برام بیاد حافظه فلش رو بلوک بندی کنه و بلوک های استفاده شده و خالی رو بدونه و هروقت خواستم چند بلوکو آزاد کنه یا چند بلوک بهم بده. برای هر دسته بلوک هم اگر لازم شد یک اسم مثل فایل در نظر بگیره. بعدم اگر لازم داشتم بزنم حافظه رو دیفرگ کنه.
4_ من heap و stack رو می دونم تو سیستم pc چی هستن ولی نمی فهمم وقتی میکروکنترلر سیستم عامل نداره این 2 چه معنی دارن؟
یک تنظیم سخت افزاریه؟ یا توی برنامه startup یکسری برنامه شبهه سیستم عامل گذاشتن؟ یعنی چی که حتما باید heap تعیین کنیم که بتونیم allocation انجام بدیم؟؟؟ ثانیا حافضه stack در سیستم های pc خودش یکجور heap سطح پایین تر allocate شده توسط سیستم عامل است.اصلا کل حافظه ram به غیر از بخش اصلی که مربوط به سیستم عامل می شه heap است.
حالا ایناشو دیگه واقعا نفهمیدم چرا stack یکسری تنظیمات داره؟ این تنظیمات دیگه چیه؟6 تا تنظیم داره تو keil قسمت startup که نوشته فلان فلان mode.
stack ... mode دیگه چیه؟ اصلا کلا حافظه رو میدادن دست خود کاربر , خودم یک برنامه واسه مدیریتش می نوشتم منظم تر می شد.
5_من لازم دارم یک سری lookup table بزرگ جهت انجام محاسبت سریع ریاضی و یکسری الگو های 2 بعدی یا چند بعدی مثل تصویر بریزم داخل حافظه فلش ( حالا فراخوانیش به رم که کاری نداره )
مثلا این اطلاعات رو میام تو کامپیوتر با یک برنامه ای می سازم و میریزم تو یکسری فایل با پسوند BIN . حالا می خوام این فایل هارو کنار برامه اصلی با پروگرامر بریزم توی حافظه فلش میکروکنترلر که اولا آدرسشو داخل برنامه داشته باشم دوما این اطلاعات حجیم نیفتن روی برنامه اصلی.
چه باید کرد؟ کسی نظری تجربه ای چیزی داره؟ یک راه حل ساده اینه که بیایم یک دونه متغیر تعریف کنیم و تو یک هدر بزاریم ولی فکر کنم اگه اطلاعات فقط 20kb رو بزارم توش تو موقع کپی پیست که یک دور سیستم هنگمی کنه و شاید complie هم یک ساعتی طول بکشه. بعد اگه بخوام دیباگ کنم دیگه وقت نمی شه.
من همین 1 هفتس شروع کردم کار با arm و از همین تاپیک ها وارسال هایی که افراد با تجربه تو انجمن زده بودن برای شروع کمک گرفتم.
چند سوال داشتم در مورد مدیریت حافظه.
بچه های دانشگاهمون و یکی از اساتید مراجعه کردم کسی اطلاعی نداشت. براشون جدید بود. تو اینترنت هم گشتم ولی چون یکم تخصصیه راحت پیدا نمی شه. یک سرنخ های کوچیکی تو user manual میکروکنترلر پیدا کردم.
می خوام با میکرو کنترلر lpc2103 کار کنم اونم تو شبیه ساز پروتئوس. با keil. بدون این برنامه های از قبل نوشته شده پیچیده.
دوستان من انتظار پاسخ کامل ندارم. اگه یک اشاره کنید که لپ کلامو بفهمم(مثل اثبات طولانی که فقط چند نکته کوچیک داره) یا یک منبع سریح معرفی کنید ممنون می شم.
1_ سرعت خوندن از روی حافظه فلش چه قدره؟ با رم فرق می کنه؟ سرعت خوندن , نه نوشتن.(در datasheet و user manual چیزی نبود) اگه سرعت خوندن از فلش میکروکنترلر بیشتر از حافظه رم هستش چه تکنیکی وجود داره که برنامه رو بعد از بارگذاری از حافظه فلش بندازیم تو حافظه رم و خظ اجرای برنامه رو ببریم رو رم؟ یعنی برنامه لود بشه و اجرا بشه. دقیقا شبیه همون چیزی که سیستم عامل میاد یک فایل exe رو بازگذاری می کنه روی رم. در مورد ram memmory allocation مشکلی ندارم تست کردم کار کرد. فقط heap رو تنظیم کردم و از تابع malloc() استفاده کردم.
2_برای پروگرم کردن فلش نوشته بود می تونین به روش IAP استفاده کنیم. من تو اینترنت دیدم یکسری برنامه های بزرگ و هدر های حجیم و پر اضافات بودن که همچین کاری کنن ولی من می خوام اولا یک چیزی یاد بگیرم دوما چیزی بنویسم که دقیقا مناسب یک کار تخصصی خاص که می خوام برنامشو بنویسم باشه. نه یک چیز جامع. (یکبار نشستم تو C CONSOL از 0 رابط کاربری گرافیکی مثل Windows 3 نوشتم. مثل گرافیک bios ـ 2000 خط شد)
اصلا من مرض دارم می خوام چرخو از اول بسازم. :rolleyes:
من چه طور می تونم روی flash بنویسم؟ تو codevisionavr که برای نوشتن رو EEPROM فقط کافی بود تعریف کنیم متغیر eprom و مثل بقیه متغیر ها از روش بخونیم و بنویسیم و سیستم خودش کاراشو می کرد. اینجا باید چیکار کرد؟ register خاصی داره؟ یا باید معمولی رو آدرس حافظه بنویسیم؟
3_ چه الگوریتمایی برای تخصیص حافظه و مدریتش وجود داره؟ یعنی یک تابع بنویسم مثل malloc() برام بیاد حافظه فلش رو بلوک بندی کنه و بلوک های استفاده شده و خالی رو بدونه و هروقت خواستم چند بلوکو آزاد کنه یا چند بلوک بهم بده. برای هر دسته بلوک هم اگر لازم شد یک اسم مثل فایل در نظر بگیره. بعدم اگر لازم داشتم بزنم حافظه رو دیفرگ کنه.
4_ من heap و stack رو می دونم تو سیستم pc چی هستن ولی نمی فهمم وقتی میکروکنترلر سیستم عامل نداره این 2 چه معنی دارن؟
یک تنظیم سخت افزاریه؟ یا توی برنامه startup یکسری برنامه شبهه سیستم عامل گذاشتن؟ یعنی چی که حتما باید heap تعیین کنیم که بتونیم allocation انجام بدیم؟؟؟ ثانیا حافضه stack در سیستم های pc خودش یکجور heap سطح پایین تر allocate شده توسط سیستم عامل است.اصلا کل حافظه ram به غیر از بخش اصلی که مربوط به سیستم عامل می شه heap است.
حالا ایناشو دیگه واقعا نفهمیدم چرا stack یکسری تنظیمات داره؟ این تنظیمات دیگه چیه؟6 تا تنظیم داره تو keil قسمت startup که نوشته فلان فلان mode.
stack ... mode دیگه چیه؟ اصلا کلا حافظه رو میدادن دست خود کاربر , خودم یک برنامه واسه مدیریتش می نوشتم منظم تر می شد.
5_من لازم دارم یک سری lookup table بزرگ جهت انجام محاسبت سریع ریاضی و یکسری الگو های 2 بعدی یا چند بعدی مثل تصویر بریزم داخل حافظه فلش ( حالا فراخوانیش به رم که کاری نداره )
مثلا این اطلاعات رو میام تو کامپیوتر با یک برنامه ای می سازم و میریزم تو یکسری فایل با پسوند BIN . حالا می خوام این فایل هارو کنار برامه اصلی با پروگرامر بریزم توی حافظه فلش میکروکنترلر که اولا آدرسشو داخل برنامه داشته باشم دوما این اطلاعات حجیم نیفتن روی برنامه اصلی.
چه باید کرد؟ کسی نظری تجربه ای چیزی داره؟ یک راه حل ساده اینه که بیایم یک دونه متغیر تعریف کنیم و تو یک هدر بزاریم ولی فکر کنم اگه اطلاعات فقط 20kb رو بزارم توش تو موقع کپی پیست که یک دور سیستم هنگمی کنه و شاید complie هم یک ساعتی طول بکشه. بعد اگه بخوام دیباگ کنم دیگه وقت نمی شه.
دیدگاه