اطلاعیه

Collapse
No announcement yet.

کمک برای برنامه نویسی c

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

    کمک برای برنامه نویسی c

    سلام
    اقا یه راهنمایی میشه در مورد این کد زیر بفرمایید
    من شدیدا در قسمت هایی که اشاره گر استفاده شده مشکل دارم یعنی اون قسمت هایی که ستاره پشت متغیر قرار داده شده ، اگه بشه توضیح بدبد مثلا من اگر بخوام به جای این *s یک متغیر بزارم چی کار باید بکنم!!!!!؟؟؟؟؟ چون خیلی به مشکل برخوردم
    ممنون از راهنماییتون
    کد:
    void UART0_SendString (unsigned char *s) 
    {
     	while (*s != 0) 
    	{
      		UART0_SendByte(*s++);
    	}
    }
    // -------------------------------------
    int UART0_Getstring (char *str) 
    {
    	int i = 0;
     char *temp = str;
    	
    	do{
    		*temp = UART0_GetChar();
    		i++;
    	}while(*(temp++) != 0x0D);
    	*(temp-1) = 0;
     	return i;
    }
    پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
    ------------------------------------------------------------ - - -
    صبرت که تمام شد نرو!
    "معرفت"
    تازه از آن لحظه آغاز می شود...

    #2
    پاسخ : کمک برای برنامه نویسی c

    سلام،
    اول یه پیشنهاد : کار کردن با اشاره گر ها خیلی جاها به داد آدم می رسه، از زیر مسلط شدن بهش در نرو
    خب، نمی تونی متغیر بذاری که، تابع send string یه رشته رو ارسال می کنه! *s هم اشاره گر اون رشته هست.
    نحوه فراخوانی تابع
    کد:
    char test[10]="Salam";
    UART0_SendString(test);
    اینجا test اشاره گر آرایه ای هست که ساخته شده، اینم میدونیم که هر آرایه با یه NULL یا همون مقدار 0 به پایان می رسه،
    وقتی شما این اشاره گر رو به تابع می دی داخل تابع اسمش میشه s
    شرط while غیر صفر بودن کاراکتر هست *s++ هم تو هر سری ارسال اشاره گر رو یکی زیاد میکنه!

    قسمت دریافت هم شما یه آرایه داری که می خوای چیزی که از سریال میگیری رو اونجا بریزی، مثل بالا اشاره گر اون آرایه رو میدی به تابع و .... تابع دریافت ار سریال رو تا وقتی که به کاراکتر اینتر 0x0D نرسیده ادامه میده. و در انتها هم تعدعد بایت هایی رو که دریافت کرده رو برمیگردونه

    اگه بخوای جای آرایه یه کاراکتر تنها رو ارسال کنی که فک کنم منظورت از گذاشتن متغیر جای *s همین بود، از خود تابع UART0_SendByte استفاده کن.
    دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
    گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
    من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
    قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
    مولانا

    دیدگاه


      #3
      پاسخ : کمک برای برنامه نویسی c

      اقا بابت پاسختون ممنون
      من یک سوال دیگه هم داشتم مثلا در این کد من دیدم برای استفاده اینطوری استفاده میشد
      کد:
      UART0_SendString (unsigned char *s)
      قرار دهی درون پرانتز
      کد:
      UART0_SendString ("hello")
      اینطوری میشه، خوب من سوالم اینه اشاره گر مگه ادرس حافظه رو ذخیره نمی کنه ،و یا مثلا * که محتوای ادرس رو برمیگردونه ،خوب حالا این "hello" چه ربطی به s* داره و یا اضافه کردن s* فقط ادرس رو اضافه می کنه دیگه با محتوا که کاری نداره!!!!!
      البته من از اول گفتم چون من با بیسیک کار می کردم در مورد اشاره گر خیلی وارد نیستم خلاصه گفتم اگه سوالم پیش پا افتاده است منو ببخشید
      در ضمن از این که منو راهنمایی کنید و منو از این سر در گمی در بیارید خیلی خیلی متشکر میشم
      پیروزی یعنی : توانایی رفتن از یک شکست ، به شکستی دیگر بدون از دست دادن اشتیاق . . .
      ------------------------------------------------------------ - - -
      صبرت که تمام شد نرو!
      "معرفت"
      تازه از آن لحظه آغاز می شود...

      دیدگاه


        #4
        پاسخ : کمک برای برنامه نویسی c

        سلام و خواهش میکنم!
        شما وقتی تو C مستقیم آرایه رو می نویسید و به جای آرگومان یه تابع، اون آرایه از نوع Flash ساخته میشه، و خود کامپایلر اشاره گر آرایه رو به تابع میده، و احتمالا یه Warning هم میده که Type ورودی با Type تعریف شده سازگار نیست! که اهمیتی نداره.

        بپرس آقا بپرس، این حرفا چیه!
        دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
        گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
        من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
        قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
        مولانا

        دیدگاه


          #5
          پاسخ : کمک برای برنامه نویسی c

          سلام یه زمان اشاره گر برایم تازه جا افتاده بودش تو اتوبوس داشتم همش بهش فکر می کردم یه مثال توپ براش پیدا کردم :
          شرت کات در ویندوز هستش
          یعنی از نظر من یعنی شما یک شرت کات می سازی!!!
          امروز هم استادمون آمد به بچها بفهمونه اینجوی مثال زد اینم بامزه هستش
          مثلا : گفت : من اینو تخته پاکن را می دهم می گم بدش به رضا :biggrin:
          منظورش اینکه اسمش را صدا می زنم.
          خلاصه پونتر خیلی مهمه
          دکتر چمران در 1311 در تهران متولد شد
          وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
          او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.

          دیدگاه


            #6
            پاسخ : کمک برای برنامه نویسی c

            نوشته اصلی توسط elec200
            اقا بابت پاسختون ممنون
            من یک سوال دیگه هم داشتم مثلا در این کد من دیدم برای استفاده اینطوری استفاده میشد
            کد:
            UART0_SendString (unsigned char *s)
            قرار دهی درون پرانتز
            کد:
            UART0_SendString ("hello")
            اینطوری میشه، خوب من سوالم اینه اشاره گر مگه ادرس حافظه رو ذخیره نمی کنه ،و یا مثلا * که محتوای ادرس رو برمیگردونه ،خوب حالا این "hello" چه ربطی به s* داره و یا اضافه کردن s* فقط ادرس رو اضافه می کنه دیگه با محتوا که کاری نداره!!!!!
            البته من از اول گفتم چون من با بیسیک کار می کردم در مورد اشاره گر خیلی وارد نیستم خلاصه گفتم اگه سوالم پیش پا افتاده است منو ببخشید
            در ضمن از این که منو راهنمایی کنید و منو از این سر در گمی در بیارید خیلی خیلی متشکر میشم
            سلام.
            این مربوط میشه به اینکه اصلا ما به چی میگیم رشته و چجوری میشه با اشاره گر آرایه هم ساخت :agree:
            خوب قاعدتا توی پردازنده چیزی به عنوان رشته نباید داشته باشیم چون فقط 0 1 داریم و عدد میتونیم ذخیره کنیم. رشته درواقع کاراکتر های کناره همه. یعنی یک آرایه از کاراکتر ها. حالا شما میتونید این رشته رو به دو صورت بسازید :

            کد:
            char str[5];
            str[0] = 'h'
            str[1] = 'e'
            str[2] = 'l'
            str[3] = 'l'
            str[4] = 'o'
            روش دیگه هم اینه که شما آدرس یک بایت از حافظه رو داشته باشید. یعنی دقیقا یک char* داشته باشید. بعد بگید اون بایت برابر 'h' بایت بعدی برابر 'e' و .... . و تا وقتی به '\0' نرسیدیم میریم جلو تا رشته تموم شه. حالا وقتی خاستیم یک آرایه ( که رشته هم یک آرایه از بایت هاست ) رو به یک تابع بفرستیم میتونیم فقط آدرس بایت اول رو به تابع بفرستیم. در این مثال آدرس بایتی رو که 'h' قرار داره میفرستیم. بعد توی تابع از روی آدرس اون بایت بایت های بعدی رو هم تا جایی که برسه به '\0' یعنی آخر رشته میخونه. و اینطوری میتونیم یک رشته رو به یک تابع بفرستیم. ببخشید اگه نتونستم خوب توضیح بدم :redface:
            غفلت از یار, گرفتار شدن هم داد
            از شما دور شدن, زار شدن هم دارد
            هرکه از چشم بی افتاد, محلش ندهند
            عبد آلوده شدن, خوار شدن هم دارد
            عیب از ماست, که هر سال نمی بینیمت چشم بیمار شده, تار شدن هم دارد ...

            دیدگاه

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