ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 8 از 8
  1. #1
    2018/07/10
    108
    28

    تفاوت بین define و pre define چیست؟؟؟

    با سلام خدمت همه اساتید.
    من تازه کار با پردازنده های dsp شرکت ti رو شروع کردم. هنگام خواندن دیتاشیت به مفهوم pre defined برخورد کردم. میخواستم بدونم فرق define و pre defined در چیست ؟؟؟
    و ایا اینکه در سایر پردازنده ها نیز چنین مفهومی وجود دارد یا نه؟؟؟
    عکس قسمتی از دیتاشیت که مربوط به این موضوع هست را در ادامه قرار داده ام.
    با تشکر.
  2. #2
    2014/05/29
    قدس
    1,228
    122

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    سلام - یه چیزی فعلا میگم - تا یه کسی که کارش اینه بیاد نظری درست حسابی بده - البته طبق چیزی که تو میکروکنترلر ها فهمیدم - شاید تو پروسسورها داستان فرق داشته باشه.
    define : یه سری ماکرو که کاربر تعریف میکنه ( کاربرد ماکرو define هم تو نت بزنی هستش )
    pre defined : یه سری ماکرو که توسط نرم افزار ( IDE ) یی که داری باهاش کار میکنی تعریف شده که برا دیدن لیست این موارد به اسناد نرم افزار فوق مراجعه میکنی.

    ماکروهای از پیش تعریف شده در دو نرم افزار/IDE معروف میکروکنترلرها

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ( ص 68 )
    و...

    اللَّهُمَّ صَلِّ عَلَى مُحَمَّدٍ وآلِ مُحَمَّدٍ وعَجِّلْ فَرَجَهُمْ

    اگه دوس دارید سریع به جواب برسید :
    1) قبل از پرسیدن سوال، بسرچید.
    2) سوالاتون رو با جزئیات کامل مطرح کنید.
  3. #3
    2018/07/30
    اهواز
    112
    59

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    • به اینا میگن preprocessor directive
    • هردو چیزی که مورد سواله، یه مفهوم هستن
    • هیچ ارتباط خاصی به میکروکنترلرها ندارن و یه مفهوم یا ابزار کلی تو C هستن.


    دو موردی که توی سوال پرسیدین، یکی هستن فقط محل اعمالشون فرق میکنه.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    فقط تو همون فایل سورسی که توش نوشته شده اثر داره. بصورت عمومی تو کل پروژه وجود نداره.
    به عنوان یه مثال میکروکنترلری، وقتی شما میخواید توی چند فایل سورس، از delay استفاده کنید و میخواید فرکانس cpu رو بنویسید، مجبورید تو همه سورس ها اینو

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    کنید.
    اما این امکان هم وجود داره که یجوری تعریفش کرد که همه ی سورس ها بهش دسترسی داشته باشن. که روشش همونطوریه که تو عکس مشخصه.
    مثلا برای اتمل، که باید F_CPU رو تعریف کنید میتونید از همین روش استفاده کنید. برید تو همون بخش مشخص شده بنویسید
    کد:
    -D F_CPU=12000000
    البته نیاز نیست -D رو بنویسید و صرفا همون تساوی کفایت میکنه. -D زمانی که از کامند لاین استفاده میکنید یا دستی میخواید تنظیمات build رو وارد کنید استفاده میشه.

    یکی دیگه از کاربردای تعریف عمومیش ، تعریف مدل کامپایلره (منظور شرکت سازنده س) تا سورس های مختلف که نیاز به دسترسی به یه سری ویژگی های تعریف شده خاص دارن، بفهمن که کاربر داره از کدوم IDE یا کامپایلر استفاده میکنه و مناسب اون، از دستورات خاص اون محیط استفاده کنن. این رو معمولا خود شرکت سازنده اعمال میکنه.
    همونطور که تو عکس هم مشخصه، شرکت ti گفته که اگر از یه لانچ پد استفاده میکنید، اسمشو اینجا اضافه کنید که تو همه سورس ها (اگر تمهیداتی برای این مدل لانچپد در نظر گرفته شده باشه) شناخته بشه و توابع اضافی مربوط به اون استفاده بشن. مثلا پایه ای که یه ال ای دی داره واس بلینک، واس این برد پایه 12 ه ولی برای بردای دیگه پایه 14 ه . اگر شما این روش رو استفاده نکنید، تو همه ی سورس ها باید برید عوضش کنید (یا

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    محلیش رو عوض کنید).
    ویرایش توسط tiranoid : 2019/07/22 در ساعت 13:13
  4. #4
    2018/07/10
    108
    28

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    نقل قول نوشته اصلی توسط tiranoid

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    • به اینا میگن preprocessor directive
    • هردو چیزی که مورد سواله، یه مفهوم هستن
    • هیچ ارتباط خاصی به میکروکنترلرها ندارن و یه مفهوم یا ابزار کلی تو C هستن.


    دو موردی که توی سوال پرسیدین، یکی هستن فقط محل اعمالشون فرق میکنه.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    فقط تو همون فایل سورسی که توش نوشته شده اثر داره. بصورت عمومی تو کل پروژه وجود نداره.
    به عنوان یه مثال میکروکنترلری، وقتی شما میخواید توی چند فایل سورس، از delay استفاده کنید و میخواید فرکانس cpu رو بنویسید، مجبورید تو همه سورس ها اینو

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    کنید.
    اما این امکان هم وجود داره که یجوری تعریفش کرد که همه ی سورس ها بهش دسترسی داشته باشن. که روشش همونطوریه که تو عکس مشخصه.
    مثلا برای اتمل، که باید F_CPU رو تعریف کنید میتونید از همین روش استفاده کنید. برید تو همون بخش مشخص شده بنویسید
    کد:
    -D F_CPU=12000000
    البته نیاز نیست -D رو بنویسید و صرفا همون تساوی کفایت میکنه. -D زمانی که از کامند لاین استفاده میکنید یا دستی میخواید تنظیمات build رو وارد کنید استفاده میشه.

    یکی دیگه از کاربردای تعریف عمومیش ، تعریف مدل کامپایلره (منظور شرکت سازنده س) تا سورس های مختلف که نیاز به دسترسی به یه سری ویژگی های تعریف شده خاص دارن، بفهمن که کاربر داره از کدوم IDE یا کامپایلر استفاده میکنه و مناسب اون، از دستورات خاص اون محیط استفاده کنن. این رو معمولا خود شرکت سازنده اعمال میکنه.
    همونطور که تو عکس هم مشخصه، شرکت ti گفته که اگر از یه لانچ پد استفاده میکنید، اسمشو اینجا اضافه کنید که تو همه سورس ها (اگر تمهیداتی برای این مدل لانچپد در نظر گرفته شده باشه) شناخته بشه و توابع اضافی مربوط به اون استفاده بشن. مثلا پایه ای که یه ال ای دی داره واس بلینک، واس این برد پایه 12 ه ولی برای بردای دیگه پایه 14 ه . اگر شما این روش رو استفاده نکنید، تو همه ی سورس ها باید برید عوضش کنید (یا

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    محلیش رو عوض کنید).
    ممنون از پاسختون.
    الان چند چیز برام مبهم شد.
    1- الان با توجه به چیزی گفتیدوتو عکسی که من قرار دادم جلوی pre-defined name داخل پرانتز نوشته شده define-- و D- یعنی میتونیم به جای اینکه وارد منوی properties بشیم در همون جایی که برنامه را مینوسیم از دو عبارت define-- و D- استفاده کنیم؟؟؟؟
    2-در اتمل استودیو وقتی D F_CPU=12000000 - را مینویسم خطا میگیرد. مشکل کجاست؟؟
    3-عکسی در زیر قرار دادم که مربوط به اتمل استودیو هست. ایا در قسمتی که درعکس مشخص کردم باید pre-defined ها رو مشخص کنم؟؟؟؟


    باز هم سپاس گذارم.
  5. #5
    2018/07/30
    اهواز
    112
    59

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    نه نه . نباید -D بذارید. اون -D مخصوص یه توضیح کلی بود کم پیش میاد نیاز باشه بنویسیدش.
    جایی که انتخاب کردین درسته.
    تو قسمتی که مشخص کردین، همونطور که بالاش نوشته شده خودش -D رو میذاره تو کامند لاین. اینجا فقط شما همون + رو بزنید و F_CPU=1200000 رو بنویسید. بدون هیچگونه فاصله یا علامت اضافه ای. اضافه ش میکنه زیر DEBUG تو تصویر
  6. #6
    2018/07/10
    108
    28

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    نقل قول نوشته اصلی توسط tiranoid

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    نه نه . نباید -D بذارید. اون -D مخصوص یه توضیح کلی بود کم پیش میاد نیاز باشه بنویسیدش.
    جایی که انتخاب کردین درسته.
    تو قسمتی که مشخص کردین، همونطور که بالاش نوشته شده خودش -D رو میذاره تو کامند لاین. اینجا فقط شما همون + رو بزنید و F_CPU=1200000 رو بنویسید. بدون هیچگونه فاصله یا علامت اضافه ای. اضافه ش میکنه زیر DEBUG تو تصویر
    باز هم ممنون از توضیح خوبتون.
    اگر امکان داره یه توضیحی بدید که چه مواقعی باید D- را قرار بدیم.(من تو اینترنت هم سرچ کردم ولی چیزی در این مورد ننوشته بود.)
    یه قسمت دیگه هم در همین کامپایلر code composer studio هست به اسم pre-include. میخواستم ببینم وقتی فایل ها را در اینجا include کنیم مثل pre-defined اون فایل به کلیه فایل های موجو در پروژه include میشه یا نه؟؟؟ (عکسش رو در ادامه قرار دادم.)


    باز هم سپاس گذارم.
  7. #7
    2018/07/30
    اهواز
    112
    59

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    تصویر زیر رو از کایل (keil) ببینید :




    ببینید اون پایین چی نوشته. کامپایلر کنترل استرینگ. اگه توجه کنید بخش های بالایی صفحه، صرفا یه نمایش گرافیکی برای متن پایین هستن. کاربرد اون -D زمانیه که بخوایم مستقیما تو اون متن بنویسیم.
    البته دقت کنید که keil C51 که برای 8051 هست، بجای -D ، میاد تعاریف رو به شکل DEFINE(def1,def2, ...) مینویسه ولی مشابه همون -D هست.

    در مورد سوال دوم، pre include فایل:

    همه ی چیزهایی که در مورد

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    گفته شد، این بار برای

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    بکار ببرید. توجه کنید

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    بخاطر داشتن # در ابتداش، مثل

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ، یه preprocessor directive محسوب میشه.
    اما مشکلی که برای اینکلود ها پیش میاد به مراتب بزرگتره.
    یه مثال براتون میزنم.

    ممکنه تا حالا به کتابخونه هایی، مثلا کتابخونه LCD کاراکتری معمولی برخورد کرده باشید که فقط یه فایل .h هستن. یعنی فایل سورس ندارن. خیلی از کسانی که دور و بر میکروکنترلر هستن، متاسفانه برنامه نویسی چندان اهمیت نمیدن و فایل سورس نمینویسن.
    وقتی فایل هدر رو اینکلود کنیم این مشکلات پیش میاد :

    1) همه ی توابع نوشته شده در اون اضافه میشن به میک فایل، و همه لینک میشن و در نتیجه همه حجم میگیرن از میکرو. بدون اینکه استفاده شدن باشن. البته یه سری از کامپایلرها (لینکرها) باهوشن و اینم تشخیص میدن. ولی خیلیا هم تشخیص نمیدن.
    2) فقط به یه فایل میشه اضافه ش کرد ! مثلا تو همون فایل اصلی که تابع main داره. اگر مثلا بخواید تو یه سورس دیگه اضافه ش کنید برنامه بهتون ارور میده و میگه همه ی این چیزایی که تو این فایل هست، قبلا یه بار نوشته شده (همون باری که تو مین وارد شده).
    نکته مهم : مشکل دوم ربطی به نوشتن یا ننوشتن فایل سورس نداره. در هر حال امکان اتفاق افتادن داره ولی وقتی فایل سورس نباشه، بیشتر احتمال اتفاقش هست چون کامپایلر نمیتونه از راه حل های گفته شده در زیر استفاده کنه.

    برای مشکل دوم چی میشه کرد ؟
    1) استفاده از پری پروسسور هایی مث

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    once و

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    که میگه این فایل هدر رو فقط یه بار تو برنامه شامل کن نه چن بار.
    2) استفاده از روشی که شما مطرح کردین. یعنی اضافه کردن یه فایل هدر کلی. اینطوری تو هر سورسی بدون اینکلود کردنش قابل استفاده س. اما حواستون رو جمع کنید. اگر فایل هدر، سورس نداره و مثل کتابخونه های درپیتی نوشته شده س (اتفاقا زیاد هم تو ایران هست) و لینکر هم مثلا به پیشرفته بودن ویژوال استودیو نیست، فایل به اندازه ی همه سورس ها کپی میشه .

    به عنوان یه راهنمایی عمومی در مورد انتخاب محیط برنامه نویسی همیشه دقت کنید :

    1) بهترین محیط، محیط رسمیه. اصلا رو محیط های دیگه مث کدویژن و اینا حساب نکنید. برای آرم کمی عمومی تره چون همه تقریبا یه کامپایلر دارن. برا آرم هم ترجیحا به همون کایل مایکروویژن بچسبید.
    2) هرچیزی که ویژوال استودیو داره، از ویژوال استودیو استفاده کنید. ویژوال استودیو (با اینکه سنگینه و دشمن زیاد داره !) نماد برنامه نویسی پیشرفته س. اصن مایکروسافت یه شرکت "کاملا برنامه نویس" محسوب میشه. اتمل استودیو بر پایه ویژوال استودیوه.
  8. #8
    2018/07/10
    108
    28

    پاسخ : تفاوت بین define و pre define چیست؟؟؟

    نقل قول نوشته اصلی توسط tiranoid

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    تصویر زیر رو از کایل (keil) ببینید :




    ببینید اون پایین چی نوشته. کامپایلر کنترل استرینگ. اگه توجه کنید بخش های بالایی صفحه، صرفا یه نمایش گرافیکی برای متن پایین هستن. کاربرد اون -D زمانیه که بخوایم مستقیما تو اون متن بنویسیم.
    البته دقت کنید که keil C51 که برای 8051 هست، بجای -D ، میاد تعاریف رو به شکل DEFINE(def1,def2, ...) مینویسه ولی مشابه همون -D هست.

    در مورد سوال دوم، pre include فایل:

    همه ی چیزهایی که در مورد

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    گفته شد، این بار برای

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    بکار ببرید. توجه کنید

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    بخاطر داشتن # در ابتداش، مثل

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    ، یه preprocessor directive محسوب میشه.
    اما مشکلی که برای اینکلود ها پیش میاد به مراتب بزرگتره.
    یه مثال براتون میزنم.

    ممکنه تا حالا به کتابخونه هایی، مثلا کتابخونه LCD کاراکتری معمولی برخورد کرده باشید که فقط یه فایل .h هستن. یعنی فایل سورس ندارن. خیلی از کسانی که دور و بر میکروکنترلر هستن، متاسفانه برنامه نویسی چندان اهمیت نمیدن و فایل سورس نمینویسن.
    وقتی فایل هدر رو اینکلود کنیم این مشکلات پیش میاد :

    1) همه ی توابع نوشته شده در اون اضافه میشن به میک فایل، و همه لینک میشن و در نتیجه همه حجم میگیرن از میکرو. بدون اینکه استفاده شدن باشن. البته یه سری از کامپایلرها (لینکرها) باهوشن و اینم تشخیص میدن. ولی خیلیا هم تشخیص نمیدن.
    2) فقط به یه فایل میشه اضافه ش کرد ! مثلا تو همون فایل اصلی که تابع main داره. اگر مثلا بخواید تو یه سورس دیگه اضافه ش کنید برنامه بهتون ارور میده و میگه همه ی این چیزایی که تو این فایل هست، قبلا یه بار نوشته شده (همون باری که تو مین وارد شده).
    نکته مهم : مشکل دوم ربطی به نوشتن یا ننوشتن فایل سورس نداره. در هر حال امکان اتفاق افتادن داره ولی وقتی فایل سورس نباشه، بیشتر احتمال اتفاقش هست چون کامپایلر نمیتونه از راه حل های گفته شده در زیر استفاده کنه.

    برای مشکل دوم چی میشه کرد ؟
    1) استفاده از پری پروسسور هایی مث

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    once و

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    که میگه این فایل هدر رو فقط یه بار تو برنامه شامل کن نه چن بار.
    2) استفاده از روشی که شما مطرح کردین. یعنی اضافه کردن یه فایل هدر کلی. اینطوری تو هر سورسی بدون اینکلود کردنش قابل استفاده س. اما حواستون رو جمع کنید. اگر فایل هدر، سورس نداره و مثل کتابخونه های درپیتی نوشته شده س (اتفاقا زیاد هم تو ایران هست) و لینکر هم مثلا به پیشرفته بودن ویژوال استودیو نیست، فایل به اندازه ی همه سورس ها کپی میشه .

    به عنوان یه راهنمایی عمومی در مورد انتخاب محیط برنامه نویسی همیشه دقت کنید :

    1) بهترین محیط، محیط رسمیه. اصلا رو محیط های دیگه مث کدویژن و اینا حساب نکنید. برای آرم کمی عمومی تره چون همه تقریبا یه کامپایلر دارن. برا آرم هم ترجیحا به همون کایل مایکروویژن بچسبید.
    2) هرچیزی که ویژوال استودیو داره، از ویژوال استودیو استفاده کنید. ویژوال استودیو (با اینکه سنگینه و دشمن زیاد داره !) نماد برنامه نویسی پیشرفته س. اصن مایکروسافت یه شرکت "کاملا برنامه نویس" محسوب میشه. اتمل استودیو بر پایه ویژوال استودیوه.
    ممنون از پاسخ و راهنمایی هاتون.
نمایش نتایج: از 1 به 8 از 8

موضوعات مشابه

  1. فرق #byte و #define
    توسط amanver در انجمن میکروکنترلرهای PIC
    پاسخ: 10
    آخرين نوشته: 2015/06/17, 22:56
  2. تفاوت بين typedef و define
    توسط sejil در انجمن C , C++ , C#
    پاسخ: 3
    آخرين نوشته: 2014/11/27, 12:11
  3. #ifndef و define و endif در سی ++
    توسط hosseinam در انجمن C , C++ , C#
    پاسخ: 1
    آخرين نوشته: 2014/08/28, 12:19
  4. #define
    توسط adc در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2011/10/14, 13:52
  5. define# یعنی چی؟
    توسط Dr.j در انجمن C , C++ , C#
    پاسخ: 2
    آخرين نوشته: 2009/05/03, 22:03

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •