تابع printf در فایل stdio.c پروژه آراکس هست. من خواستم نشون بدم که لازم نیست دنبال / بگردید خود کامپایلر به معادلش ترجمه می کنه. بعد کد من برای پرینت زمان دیباگ هست. برای من اهمیتی نداره که /n باشه یا /n/r . مهم اینه که بره خط بعد.عجله نکنید! دوستمون گفتن که میخواهند تابعی بنویسند که مانند printf رشته ای مثل "Hello World \n" را بتواند چاپ کند برای چاپ چنین رشته ای ما باید کاراکتر ها را یک به یک چاپ و بررسی کنیم که اگر یک \ و دقیقا پس از آن یک n دیدیم یعنی باید به خط بعد برویم. پس در اینصورت مثلا همانند آنچه که شما گفتید putch را بصورت زیر فراخوانی میکنیم. که تفاوتی ندارد که ما از 10 استفاده کنیم یا n\ در واقع همانطور که در کد شما هم دیده میشه شما در putch بررسی میکنید که آیا کاراکتر n\ ارسال شده و اگه شده به خط بعدی برویم. ولی فکر کنم جایی دیدم که r\ فقط به ابتدای خط جاری بر میگردد نه به ابتدای خط بعدی که در مورد کد شما این صدق نمی کند.
در مورد فایل ها این دو کاراکتر یعنی 13 و 10 بعنوان Carriage Return و Line Feed عمل میکنند. هنوز درگیر فایلینگ نشدم و منظور شما از بافر را هم فکر کنم بافری است که در زمان خواندن از فایل استفاده میشود و این دو کاراکتر اگر درست حدس زده باشم برروی این بافر اثر گذار خواهند بود.اگر منطورتون این هست:درسته توی فایلها بافر داریم اما اصلا بحث بافرینگ محدود به فایلها نیست. شما برای هر چیزی می تونید بافر داشته باشید. مثلا بافرهای استریم تا زمانی که eol رو دریافت نکن خالی نمی شن چون یه تابع می تونه کل فرمت استریم رو عوض کنه. و یا بافر پورت سریال می تونه برای جلوگیری از وقفه پشت سر هم باشه. یا بافر کی برد می تونه برای این باشه که چند تا برنامه بتونن محتویات رو بخونن و ....
۱. برای مانیتورهای CRT هستشCRT Monitor failures are violent in nature, and can explode and produce sharp glass fragments to fly at high speeds. It is possible to change frequency settings greater then the devices can handle. This may increase the chanches of a device or microchip to malfunction, producing unpredictable or desasterous results.
۲. در مورد فرکانس و اثر فرکانس هست. بله مانیتورهای CRT چون یک لایه فسفر دارن و تابش زیاد یا با اندازه قوی به لایه فسفر می تونه باعث شه خاصیتش از بین بره. مثلا توی بانکها که همیشه یه برنامه با مانیتور نمایش داده می شد قسمتهای خاصی از لایه فسفر رو می سوزوند.در نهایت بعد از اینکه مانیتور رو روشن کردی می تونستی رد برنامه رو ببینی بدون اینکه برنامه باز باشه. (اصلا برای همین بود که screen saver رو ساختن) اما در مورد میکرو چیپ و اثرات دیگه جدای اینکه عملا دیگه از این مانیتورها استفاده نمیشه. حتی مانیتورهایی هم که موجود هستن در مقابل اینجور موارد safe شده بودن.
می گم اگر موارد نرم افزاری باشه که باعث خرابی سخت افزاری بشه الان شما باید ماهی یکبار سخت افزار عوض می کردین. تنها آسیبی که میشه با نرم افزار به سخت افزار زد گرم کردن اون با استفاده ازش هست (حالا یا کار کشیدن ازش و یا بالا بردن فرکانس) که باز جدای اینکه بخاطر بار زیاد راحت کاربر می تونه متوجه بشه و ویروس کشهای رفتار شناس فورا متوجه جریان می شن. یه سیستم خنک کننده خوب می تونه جلوی اون رو بگیره. مثلا همین چند وقت پیش یه ویروس برای اندروید با استفاده از باز کردن دوربین full hd باعث می شد سخت افزار گوشیهایی مثل sony z3 گرم و کرش کنه. که البته بعد از کرش خود ویروس بر اساس خطای سخت افزاری. دوباره سخت افزار خنک می شد. سخت افزار های دیجیتالی تنها در صورت گرما می سوزن. حتی زمانی که شما بهش ولتاژ اضافه هم شی باعث میشه که جریان بیشتر بکشه و گرم شه و بسوزه. یعنی حتی با ولتاژ اضافه هم در صورت داشتن سیستم خنک کننده خود نمی تونید اون رو بسوزونید که اصلا همینکار (اعمال ولتاژ اضافه) یکی از راه های دیباگینگ سخت افزاری هست که بصورت لحظه ای اعمال می کنن که تا دما بالا نره. حتی فرکانس بالا هم خودش نمی سوزنه بلکه گرمای تولید شده از رابطه زیر هست که می تونه باعث سوختن بشه
h = v^2 * freq * c * num_tran
گرمای تولیدی = ولتاژ به توان دو * فرکانس * نشست خازنی * تعداد ترانزستور
خلاصه کلام اگر شما این گرمای تولید شده رو بتونید مهار کنید به هیچ عنوان سخت افزار دیجیتال شما آسیب نمی مینه. (مگر اینکه بهش ضربه بزنید).
جدای سخت افزار دیجیتال ما توی کامپیوترها سخت افزار موتوری هم داریم که شامل هارد و فلاپی دیسک و CD-Rom میشه و البته سخت افزار نوری و یکسری از سخت افزارهای آنالوگ.این سخت افزارهای با روشهای متفاوت میشه گفت در مقابل موارد نرم افزاری safe شدن. حالا از درایور خودشون بگیر تا نرم افزارهایی مثل سیستم عامل و ویروس کش.
یکی از دلیلهایی که من اصرار دارم که این آموزشها می تونن کمک کنن ولی کافی نیستن. همینه. شما بدون اینکه اطلاعات پایه در مورد سخت افزار و ... داشته باشید آموزش رو می بینید و جلو می رید و به نتیجه می رسید اما حتی بخوایین کار یک تابع اون رو هم عوض کنید نمی تونید چون اطلاعات پایه کافی در مورد کامپایلر و سخت افزار و ... رو ندارید. خود منم همین مشکلها برای پیش اومد یادم میاد که توی مولتی تسکیگ یه باگ داشتم که یک ماه وقت من رو گرفت و تنها دلیلش این بود که متوجه رفتار درست کامپایلر در کامپایل کد نشده بودم. تنها با پس و پیش کردن دو خط باگ حل شد. (در صورتی که در برنامه معمولی اصلا امکان نداشت تبدیل به باگ شه). تازه دلیل یکسری از conviction های کدینگ رو فهمیدم. حتی دلیل ساختار یکسری از زبانها مثل پاسکال رو که ازشون بدم می اومد.
خود من با اینکه توی آراکس جواب گرفته بودم و تجربه کافی رو از قدیم داشتم اما سال ۹۰ اینا بود که متوجه شدم باید بشینم بیشتر بخونم که باعث شد تست های زیادی از سخت افزار بگیرم (مثلا همین PITو PIC و ... رو قطعاتش رو از بازار تهیه کردم) یا اینکه سخت افزار ساختم برای خوندن کی برد و ... (هرچند که خیلی ساده بود) و ... از طرف دیگه روی کامپایلرها کار کردم و زبان اسکریپت خودم رو ساختم. همینطور روی پردازنده و معماری اون کار کردم.(مثلا اسمبلی ARM رو یاد گرفتم و یا اینکه ساختار داخلی خود پردازنده ها رو مثل پردازندههای قدیمی و یا حتی جدید مثل ARM و MIPS و ... رو مطالعه کردم) در کنار اون ساختار سیستم عاملهای دیگه رو با جزییات بیشتر مطالعه کردم.