PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : برنامه نویسی کرتکس ها بدون توابع cmsis



Aghaeifar
17-05-2012, 22:10
سلام.

اگر بخواهیم میکروهای cortex m3 رو بدون استفاده از این توابع اماده ی CMSIS برنامه بنویسیم چطوری هست؟ در واقع یه جورایی مستقیم با رجیستر ها سر و کار داشته باشیم.
یاد گیری و به خاطر سپردن این این همه توابع سخت تر از کارکردن با رجیسترها به طور مستقیم تر هست. ( اگر سرعت اجرای برنامه رو صرف نظر کنیم)

یعنی ودر واقع دنبال یه رفرنسی، منبعی هستم. چون مثل خود میکروهای سری 2000 در کیل دیگه دیگه نمیشه مستقیما اسم رجیستر رو نوشت و برابر مقدار خاص قرار داد و برای مثال برای قسمت GPIO داریم همچین چیزی:

LPC_GPIO0->FIOPIN;

یعنی این اسم LPC_GPIO0 رو برای سایر قسمت ها چطور سریعا میشه یافت.

منوالی، رفرنسی برای این موارد وجود نداره یا مستقیما بشه از منوال خود میکرو خوند.

البته من تجربه ام توی 1768 خیلی کمه شاید خیلی موارد رو جواب سوالم باشه هنوز توی خود منوال هم ندیدم. ممنون میشم راهنمایی کنید.

ma-bah
17-05-2012, 22:24
توی لینک زیر برای هر بخش مثالهایی زده شده و لایبرری هایی قرار داده شده بدون استفاده از cmsis
( به صورت اختصاصی برای mcb1700 مثال ها زده شده )
You can see links before reply

موفق باشید
:125::125:

shayanmelody
18-05-2012, 00:53
سلام
تو هدر اصلی میکرو که اول برنامه ادد میکنید تمام رجیستر ها قرار داره.فقط برای نحوه مقدار دهی یک رجیستر قسمت مربوطه تو یوزر منوال رو ببینید

Aghaeifar
18-05-2012, 02:08
سلام
تو هدر اصلی میکرو که اول برنامه ادد میکنید تمام رجیستر ها قرار داره.فقط برای نحوه مقدار دهی یک رجیستر قسمت مربوطه تو یوزر منوال رو ببینید

خوب منم منظورم همین هست که دقیقا به اسم رجیستر نیست که بخواهیم مستقیم از یوزرمنوال اسمش رو استخراج کنیم! باید یا برای هر بخش برم توی هدر فایل بگردم ببینم مثلا برای رجیستر فلان بخش adc باید چه نمادی رو بکار ببرم در برنامه! نمونش هم در همین پست اول نوشتم.

اگه اشتباه می کنم ممنون میشم یکی گوشزد کنه

alireza9900
18-05-2012, 11:33
سلام :hi:
من یه توضیحاتی اضافه می کنم به توضیحات دوستان:
خب اول یه قسمت از فایل مثلا هدر 1768 رو می ذارم(LPC17xx.h)

/************************************************** ****************************/
/* Peripheral declaration */
/************************************************** ****************************/
#define LPC_SC ((LPC_SC_TypeDef *) LPC_SC_BASE )
#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )
#define LPC_GPIO1 ((LPC_GPIO_TypeDef *) LPC_GPIO1_BASE )
#define LPC_GPIO2 ((LPC_GPIO_TypeDef *) LPC_GPIO2_BASE )
#define LPC_GPIO3 ((LPC_GPIO_TypeDef *) LPC_GPIO3_BASE )
#define LPC_GPIO4 ((LPC_GPIO_TypeDef *) LPC_GPIO4_BASE )
#define LPC_WDT ((LPC_WDT_TypeDef *) LPC_WDT_BASE )
#define LPC_TIM0 ((LPC_TIM_TypeDef *) LPC_TIM0_BASE )
#define LPC_TIM1 ((LPC_TIM_TypeDef *) LPC_TIM1_BASE )
#define LPC_TIM2 ((LPC_TIM_TypeDef *) LPC_TIM2_BASE )
#define LPC_TIM3 ((LPC_TIM_TypeDef *) LPC_TIM3_BASE )
#define LPC_RIT ((LPC_RIT_TypeDef *) LPC_RIT_BASE )
#define LPC_UART0 ((LPC_UART_TypeDef *) LPC_UART0_BASE )
#define LPC_UART1 ((LPC_UART1_TypeDef *) LPC_UART1_BASE )
#define LPC_UART2 ((LPC_UART_TypeDef *) LPC_UART2_BASE )
#define LPC_UART3 ((LPC_UART_TypeDef *) LPC_UART3_BASE )
#define LPC_PWM1 ((LPC_PWM_TypeDef *) LPC_PWM1_BASE )
#define LPC_I2C0 ((LPC_I2C_TypeDef *) LPC_I2C0_BASE )
#define LPC_I2C1 ((LPC_I2C_TypeDef *) LPC_I2C1_BASE )
#define LPC_I2C2 ((LPC_I2C_TypeDef *) LPC_I2C2_BASE )
#define LPC_I2S ((LPC_I2S_TypeDef *) LPC_I2S_BASE )
#define LPC_SPI ((LPC_SPI_TypeDef *) LPC_SPI_BASE )

اولین نکته اینکه کورتکس ها چون پیاده سازی رابط های برنامه نویسیشون بر پایه cmsis هست همشون از یه استاندارد پیروی می کنن. (مثلا الان توضیحاتی در مورد LPC می دم رو در ادامه یه بخش هایی از stm هارو هم می ذارم و می بینید که ساختار کار یکیه)
خب اینجا مثلا داریم LPC_GPIO0 که دیفاین شده به جای یه عبارت دیگه:

((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )

حالا اگه توی همون فایل به محل تعریف LPC_GPIO_TypeDef بریم داریم:

/*------------- General Purpose Input/Output (GPIO) --------------------------*/
/** @brief General Purpose Input/Output (GPIO) register structure definition */
typedef struct
{
union {
__IO uint32_t FIODIR;
struct {
__IO uint16_t FIODIRL;
__IO uint16_t FIODIRH;
};
struct {
__IO uint8_t FIODIR0;
__IO uint8_t FIODIR1;
__IO uint8_t FIODIR2;
__IO uint8_t FIODIR3;
};
};
uint32_t RESERVED0[3];
union {
__IO uint32_t FIOMASK;
struct {
__IO uint16_t FIOMASKL;
__IO uint16_t FIOMASKH;
};
struct {
__IO uint8_t FIOMASK0;
__IO uint8_t FIOMASK1;
__IO uint8_t FIOMASK2;
__IO uint8_t FIOMASK3;
};
};
union {
__IO uint32_t FIOPIN;
struct {
__IO uint16_t FIOPINL;
__IO uint16_t FIOPINH;
};
struct {
__IO uint8_t FIOPIN0;
__IO uint8_t FIOPIN1;
__IO uint8_t FIOPIN2;
__IO uint8_t FIOPIN3;
};
};
union {
__IO uint32_t FIOSET;
struct {
__IO uint16_t FIOSETL;
__IO uint16_t FIOSETH;
};
struct {
__IO uint8_t FIOSET0;
__IO uint8_t FIOSET1;
__IO uint8_t FIOSET2;
__IO uint8_t FIOSET3;
};
};
union {
__O uint32_t FIOCLR;
struct {
__O uint16_t FIOCLRL;
__O uint16_t FIOCLRH;
};
struct {
__O uint8_t FIOCLR0;
__O uint8_t FIOCLR1;
__O uint8_t FIOCLR2;
__O uint8_t FIOCLR3;
};
};
} LPC_GPIO_TypeDef;

خب همون طور که پیداست این استراکچر شامل تمام رجیستر هایی هست که توی یوزر منوال گفته شده.
و برای دسترسی به اونا هم که مثلا می زنیم GPIO0->FIOPIN . همین طور توی استراکچر اومده بعضی از رجیستر هارو از اونجایی که 4 بایت هستن به 2 بایت ریزتر هم خورد کرده مثلا FIOPINH و FIOPINL
پس عملا فقط نیازه ببینیم توی قسمت Peripheral declaration کد هدر هر میکرو چه چیزایی تعریف شده و با PreiphName->RegisterName به رجیستر بخش مورد نظر دسترسی داشته باشیم.

حالا یه بخشی از کد stm32f4xx رو هم می ذارم:

#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)

و کد مربوط به استراکت GPIO_TypeDef :

typedef struct
{
__IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */
__IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */
__IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */
__IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */
__IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */
__IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */
__IO uint16_t BSRRL; /*!< GPIO port bit set/reset low register, Address offset: 0x18 */
__IO uint16_t BSRRH; /*!< GPIO port bit set/reset high register, Address offset: 0x1A */
__IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */
__IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x24-0x28 */
} GPIO_TypeDef;

بازم ساختار به همون صورت هست و اینجا هم با ترکیب PriphName->RegisterName به رجیستر ها دسترسی داریم مثلا GPIOA->ODR

حالا اگه ide قابلیت code assistant یا همون code completion داشته باشه که دیگه کار خیلی راحت و بهتر میشه.

Aghaeifar
18-05-2012, 11:42
دستت درد نکنه علی رضا، بسیار عالی و شیوا گفتی و ساده حل کردی.

یه سوال: الان در مورد خود رجیستری مثل FIOSET0، خود همین رجیستر ادرس در کجا تعریف شده؟ مثلا در مورد lpc2148 توی هدر فایل ادرس هر رجیستر این شکلی تعریف شده بود


#define IO0DIR (*((volatile unsigned long *) 0xE0028008))


در مورد این حرفت:

حالا اگه ide قابلیت code assistant یا همون code completion داشته باشه که دیگه کار خیلی راحت و بهتر میشه. برای کامپایلر های کرتکس همچین موردی هست؟ من توی ویژوال استادیو وقتی کار می کردم همچین چیزی دیده بودم توی کیل نسخه جدید که ادیتورش رو بهتر کرده بود نبود.

alireza9900
18-05-2012, 11:59
دستت درد نکنه علی رضا، بسیار عالی و شیوا گفتی و ساده حل کردی.
در مورد این حرفت:


برای کامپایلر های کرتکس همچین موردی هست؟ من توی ویژوال استادیو وقتی کار می کردم همچین چیزی دیده بودم توی کیل نسخه جدید که ادیتورش رو بهتر کرده بود نبود.

خواهش می کنم علی جون.:hi:
آره کیل هنوز نداره این قابلیت رو ولی امیدوارم هرچه زودتر بذاره. eclipse این قابلیت رو داره. البته اکلیپس فقط ادیتوره و باید یه کامپایلر بهش وصل کرد(مثلا gcc یا حتی خود کامپایلر کیل هم میشه)

Aghaeifar
18-05-2012, 12:11
خواهش می کنم علی جون.:hi:
آره کیل هنوز نداره این قابلیت رو ولی امیدوارم هرچه زودتر بذاره. eclipse این قابلیت رو داره. البته اکلیپس فقط ادیتوره و باید یه کامپایلر بهش وصل کرد(مثلا gcc یا حتی خود کامپایلر کیل هم میشه)

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

در کیل نسخه جدید یعنی 4.5 ظاهرن ادیتورش بر مبنای Eclipseهست از اونجایی که در فولدر نصب کیل یه فولدر به اسم Eclipse وجود داره که پلاگین های مربوطه در اون قرار داره- البته اگه اشتباه نکنم. شاید بشه این ها رو بهتر از این به هم integrate کرد.

این تاپیک رو در سایت خود کیل در ارتباط با همین مبحث است
You can see links before reply

alireza9900
18-05-2012, 12:20
یه سوال: الان در مورد خود رجیستری مثل FIOSET0، خود همین رجیستر ادرس در کجا تعریف شده؟ مثلا در مورد lpc2148 توی هدر فایل ادرس هر رجیستر این شکلی تعریف شده بود

#define IO0DIR (*((volatile unsigned long *) 0xE0028008)) خب توی غیر کرتکس ها که ممکنه هر میکرو و هر شرکت یه چیزی زده باشه. ولی توی کرتکس ها که استاندارد هست توی چند مرحله هر رجیستر تعریف میشه. مثلا برای GPIO0 داریم:

#define LPC_GPIO0 ((LPC_GPIO_TypeDef *) LPC_GPIO0_BASE )خب اینجا اومده LPC_GPIO0_BASE رو به LPC_GPIO_TypeDef کست(cast) کرده. حالا داریم:

#define LPC_GPIO0_BASE (LPC_GPIO_BASE + 0x00000)خب از اینجا اون روند چند مرحله ای شروع میشه. اینجا اومده LPC_GPIO0_BASE رو تعریف کرده که آدرسش هست 0x00000 به اضافه LPC_GPIO_BASE.


#define LPC_GPIO_BASE (0x2009C000UL)خب حالا اینجا در واقع شروع آدرس مربوط به GPIO هاست.
پس اگه مراحل رو به عقب بریم برای GPIO0 آدرسش میشه: 0x2009C000UL + 0x00000
حالا می ریم سراغ رجیستر ها. رجیستر ها توی یه استراکت تعریف شده بودن دیگه. خب الان طبق کد زیر استراکت GPIO0 آدرس شروعش میشه 0x2009C000UL + 0x00000. حالا توی استراکت اومده به ترتیب رجیستر هارو تعریف کرده. مثلا:

__IO uint32_t FIODIR;بعدش هم مثلا هست:

__IO uint32_t FIOMASK;از اونجایی که هر رجیستر 4 بایته پس در واقع الان FIODIR میشه از 0x2009C000UL تا 0x2009C080UL + 0x
حالا باز دوباره FIODIR0 ~ FIODIR4 رو تعریف کرده هر کدوم از نوع uint8_t هست که میشه یک بایت. حالا اصل مطلب توی اون union هست. اگه اینا با هم union نمی شدن هر کدوم از FIODIRL و FIODIR0 و... برای خودشون حافظه اشغال می کردن و کلا آدرس رجیستر از محدودش خارج می شد. ولی دستور union به کامپایلر می گه که آقا اینایی که اینجا تعریف شدن همه یه آدرس دارن و همه با هم هستن و فقط اسماشون فرق داره.

یه نکته دیگه هم که الان یوزر منوال رو ببینی ترتیبی که برای رجیستر ها هست با ترتیب این کد یکیه. چون کد خط به خط اجرا میشه. اولین رجیستر که FIODIR باشه اول از آدرس 0x2009C000UL (که مربوط به GPIO0 هست) 4 بایت رو می گیره. بعد FIOMASK میاد 4 بایت بعدی رو می گیری و الا آخر. پس ترتیب تعریف اینا هم توی استراکت GPIO_TypeDef مهمه و اگه جاشون عوض آدرساشون هم عوض شده پس مثلا اگه جای FIODIR و FIOMASK رو عوض کنی وقتی توی LPC_GPIO0->FIODIR می نویسی در واقع توی آدرس FIOMASK می نویسه.

alireza9900
18-05-2012, 12:56
در کیل نسخه جدید یعنی 4.5 ظاهرن ادیتورش بر مبنای eclipseهست از اونجایی که در فولدر نصب کیل یه فولدر به اسم eclipse وجود داره که پلاگین های مربوطه در اون قرار داره- البته اگه اشتباه نکنم. شاید بشه این ها رو بهتر از این به هم integrate کرد.آره همون طور که گفتم میشه کیل رو به اکلیپس وصل کرد(حتی بدون این پلاگینی که توی این نسخه جدید داده). و البته این پلاگین اکلیپسی که داده رسما نکته خاصی نداره و زیاد به درد نمی خوره. من خودم یکی دو باز خواستم باهش کار کنم ولی هر کار کردم نتونستم باهاش کنار بیام!

alireza9900
18-05-2012, 13:33
الان من خودم فعلا از این روش استفاده می کنم:
اول یه پروژه کیل درست می کنم و یه سری فایل ها و تنظیمات اولیه رو توی خود کیل انجام می دم.
بعد یه پروژه c توی اکلیپس درست می کنم و بعد تمام فایل پروژه کیل رو توی فولدر پروژه اکلیپس کپی می کنم.
حالا اگه توی اکلیپس f5 بزنیم تمام فایل به workspace پروژه اضافه شده. کار بعدی اینه که include directories رو برای پروژه اکلیپس تعریف کنیم که میشه فولدر:


C:\Keil\ARM\RV31\INCو هر دایرکتوری دیگه ای که ازش include میشه توی پروژه.حالا خیلی راحت میشه توی اکلیپس کد زد و همزمان کیل هم باز باشه و باهاش بیلد و پروگرم و دیباگ کرد.

الان یه مدل پروژه که خودم الان باهاش روی stm32f407 کار می کنم رو ضمیمه کردم.
برای پروژه کیل که فایل stm32f4xx.uvproj مشخصه.
برای باز کردن پروژه با اکلیپس هم باید از طریق عمل کرد:


File->Import->General->Existing Projects Into Workspace
و فولدر پروژه رو وارد کنید.
حالا توی اکلیپس میشه با قابلیت code completion کد رو ویرایش کرد و بقیه کار ها هم توی کیل انجام میشه.:wink:
خیلی هم بهتر از پلاگین خوده کیله:018:

Aghaeifar
18-05-2012, 14:19
توی خود اکلیپس نمیشه کامپایل کرد؟
چون اکلیپس قابلیت اتوکامپایل داره و همینطور در هین کد زدن پیوسته کامپایل می تونه کنه و خطاها رو نشون بده.
من هم تست می کنم.

ممنون از راهنماییت.

alireza9900
18-05-2012, 14:42
توی خود اکلیپس نمیشه کامپایل کرد؟
چون اکلیپس قابلیت اتوکامپایل داره و همینطور در هین کد زدن پیوسته کامپایل می تونه کنه و خطاها رو نشون بده.
من هم تست می کنم.

ممنون از راهنماییت.

چرا میشه ولی دردسرش خیلی زیاده و اصلا نمی صرفه.
من یه تاپیک جدا زدم اونجا ریزتر در مورد این روش توضیح دادم و آخرش در مورد سوالت هم یه اشاره ای کردم.
Keil و قابلیت Code Completion - ایـــــــــران میـــــــکرو ™ (You can see links before reply)

alishekarriz
02-06-2012, 11:32
بياييم تك تك نامه بزنيم به كيل بگيم اين قابليت رو به برنامه اضافه كنه كه كد رو پيشنهاد بده و مثل avr studio - eclipse - mikro c و تمام برنامه هاي درست حسابي رفتار كنه

MIKROC PRO ARM رو كسي از دوستان تجربه داره .. ؟

mrm
02-06-2012, 13:58
سلام
به دوستان پیشنهاد میکنم برای اینکه از شر این همه دردسر برای استفاده از ide های مختلف و همچنین
برای ارم که struct زیادی داخلش هست که همچین کاری کنند ( من خودم با eclipse و کیل و چند تا ide دیگه هم کار کردم ولی تنها روشی که الان استفاده میکنم همین هست چون یه روز فقط به خاطر یه شرط ساده داخل کدویژن چیزی حدود یک ساعت یا بیشتر داشتم دنبال خطا داخل کد میگشتم ) بگذریم :
پیشنهاد من اینه که نسخه visual studio 2010 یا 2008 رودانلود کنید و یه نسخه از visual assist رو هم روش نصب کنید .بعد دایرکتوری های کدویژن ، پیک ، کیل و .. رو بهش اضافه کنید و از برنامه نویسی لذت ببرید.اینطوری کد مربوطه رو داخل ویژوال استودیو مینویسید و ctrl+s ذخیره میکنید و بعدش کیل رو باز میکنید و کامپایل . همین.

alishekarriz
02-06-2012, 19:31
اين راهكارها وجود داره ولي خب همه ميدونيم كه دور زدن كار هست

من موندم اين همه شركت توي دنيا با چه محيطهايي كار ميكنن

من هم با qt يا eclips يا هر محيط برنامه نويسي حرفه اي ديگه استفاده ميكنم وقتي لازم باشه

اما بايد راه اصلي رو بفهمم چيه اخر

behnam6500
03-06-2012, 00:38
دوستان چرا شما ها اینقده گیج میزنین آخه.cortex بدون cmsis اشتباهه.کامژایلر هم بدون coide اشتباهه.حالا هی من بگم شما بگید نه.البته ببخشید با دمپایی اومدم تو بحثتونا.ولی از من پیرمرد این نصیحت رو بپزیرین

پیرمرد! ادب هم رعایت کنی بد نیست!

هر انجمن اینترنتی، برای بحث و تبادل نظر پیرامون موضوع یا موضوعاتی بنا شده است.

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

اینکه مطلبی از نظر شما اشتباه باشه، دلیل بر این نیست که حرمت ها رو نادیده بگیرید و حتا به منزله شوخی، چنین جملاتی رو در یک انجمن به زبان بیارید!

esisafa
03-06-2012, 11:04
سلام به همه ی دوستان
یک سوال میپرسم و جوابش با خودتون.
شما همه از کدهای ساده در codevision راضی هستین؟

اگه هستین: که فقط یک بار وقت بزارین و یک هدر به اسم میکرویی که کار میکنین به سادگی دستورات کدویژن بسازین و تا آخر عمر خودتون رو راحت کنین.
اگه نیستین که برید و از همون دستورات طولانی خود کیل استفاده کنید.

ببینید مثلا چه دلیلی هست که وقتی ما میدونیم داریم از LPC استفاده میکنیم باز هر وقت بخوایم یک رجیستر رو مقدار بدیم از حروف lpc_ استفاده کنیم و اگه دقت کنیم خیلی چیزها در همه ی دستورات تکراری هست و خیلی چیزها هم لازم نیست.
باید اسم هر رجیستر رو در فایل هدر جدید خودمون یا ساده کرد یا به فرمت شبیه کدویژن تبدیل کرد.

در کدویژن شما یکبار اسم میکرو رو اینکلود میکنید و از دستور مثلا PORTA در همه ی میکرو ها استفاده میکنید. و دیگه نمینویسید atmega16_porta یا atmega8_porta

heydari
13-06-2012, 00:48
سلام به مهندسین محترم.من تازه شروع به یادگیری arm کردم و باید اعتراف کنم با خیلی سردرگم بودم تا اینکه با شما آشنا شدم.این آشنایی خیلی برام جالب و البته مفید بوده.از مطالبی که دوستان نوشتن خیلی استفاده کردم.از زحمات همه عزیزان تشکر میکنم.

sapiens110
30-06-2012, 15:04
الان من خودم فعلا از این روش استفاده می کنم:
اول یه پروژه کیل درست می کنم و یه سری فایل ها و تنظیمات اولیه رو توی خود کیل انجام می دم.
بعد یه پروژه c توی اکلیپس درست می کنم و بعد تمام فایل پروژه کیل رو توی فولدر پروژه اکلیپس کپی می کنم.
حالا اگه توی اکلیپس f5 بزنیم تمام فایل به workspace پروژه اضافه شده. کار بعدی اینه که include directories رو برای پروژه اکلیپس تعریف کنیم که میشه فولدر:


C:\Keil\ARM\RV31\INCو هر دایرکتوری دیگه ای که ازش include میشه توی پروژه.حالا خیلی راحت میشه توی اکلیپس کد زد و همزمان کیل هم باز باشه و باهاش بیلد و پروگرم و دیباگ کرد.

الان یه مدل پروژه که خودم الان باهاش روی stm32f407 کار می کنم رو ضمیمه کردم.
برای پروژه کیل که فایل stm32f4xx.uvproj مشخصه.
برای باز کردن پروژه با اکلیپس هم باید از طریق عمل کرد:


File->Import->General->Existing Projects Into Workspace
و فولدر پروژه رو وارد کنید.
حالا توی اکلیپس میشه با قابلیت code completion کد رو ویرایش کرد و بقیه کار ها هم توی کیل انجام میشه.:wink:
خیلی هم بهتر از پلاگین خوده کیله:018:



سلام
من include ها رو هم اضافه کردم به eclipse ولی کد که میزنم هینت نمیده.همه این کارارو کردم.مشکل از کجا می تونه باشه؟؟

alireza9900
30-06-2012, 15:24
سلام
شما اولا برای اینکه هینت بده باید ctrl+space رو بزنید بعد از اینکه یکی 2دو حرف رو تایپ کردید.(اگه مشکل این نیست):
توی این پست (You can see links before reply) من با جزئیات بیشتر توضیح دادم. اگه با اونم حل نشد باز بگید ببینم مشکل چیه.

sapiens110
30-06-2012, 17:46
مرسی حل شد

Doloop
01-07-2012, 00:20
سلام
مهندس من دانلود کردم ولی پیغام زیرو میده نصب نمیشه


You can see links before reply


بعد میشه همین کارو توی visual studio 2010 پیاده کرد؟
یا اونجا برنامه رو بنویسم بعد توی کیل کپی کنم؟

sigma-mx
01-07-2012, 00:31
مهندس شما رو سیستمت ماشین مجازی جاوا نصب نیست و چون ادیتور هایی مانند eclipse و netbeans با جاوا کار میکنن باید حتما اینو رو سیستم داشته باشی .... یا بسته JDK و یا JRE که حجمش یکم کمتره ... میتونی با ... شکن از سایت sun دانلود کنی . یا بگردی سایت های ایرانی هم حتما برای دانلود گذاشتنش ...

alireza9900
01-07-2012, 00:45
نسخه 32 بیتی (You can see links before reply)
نسخه 64 بیتی (You can see links before reply)
برای دانلود از این سایت نیاز به فیل... نیست
* فقط حتما با توجه به سیستم عامل دانلود کن. چون 32 بیتش مثلا روی 64 بیتی نصب میشه و حتما باید 64 روی سیستم عامل 64 بیت نصب شه.

mzarkoob
02-07-2012, 20:26
سلام
سیستم وقفه کرتکس با قبلی ها متفاوته و البته دستوراتش. مثلا اگه بخوای وقفه تایمر را فعال کنی با دستورات cmsis میشه این:

/************************************************** ****************************
Vectored Interrupt initialization
************************************************** ****************************/

NVIC_SetPriority(TIMER0_IRQn,0); /* Default priority group 0, can be 0(highest) - 31(lowest) */
NVIC_EnableIRQ(TIMER0_IRQn); /* Enable Timer0 Interrupt */
با این کار رجیستر مربوطه ست میشه و اگه تایمر سرریز شده میره در زیر روال وقفه:

You can see links before reply

با رجیستر انگار باید از NVIC->IP و NVIC->ISER استفاده کنیم. حالا سوال اینه که این دستورات دسترسی به این رجیسترها در فایل هدر نیست که!!

Aghaeifar
02-07-2012, 22:04
کدوم فایل هدر منظورته؟ lpc17xx.h اگه منظورته نه نیست
اگر سه لایه مربوط به cmsis رو به یاد بیاری قسمت مربوط به NVIC توی لایه ی Core Peripheral Access Layer (CPAL) قرار داره. پس باید فایل core_cm3.h رو یه نگاهی بکنی

ولی وقتی سوال می پرسی من لذت می برم روی سوال رو می خونم. خیلی خوب با شکل و کاملا توضیح میدی روی سوالت چیه. چه خوبه نحوه ی صحیح پرسیدن رو مثل اقای مهدی یاد بگیریم

mzarkoob
03-07-2012, 11:27
پس باید فایل core_cm3.h رو یه نگاهی بکنی.

سلام. بله همین جاست:

__STATIC_INLINE void NVIC_EnableIRQ(IRQn_Type IRQn)
{
NVIC->ISER[((uint32_t)(IRQn) >> 5)] = (1 << ((uint32_t)(IRQn) & 0x1F)); /* enable interrupt */
}
البته نحوه استفاده از رجیسترها اینجا نرمال به نظر نمی یاد ! انگار اینجا در این قسمت از همون دستورات cmsis استفاده بشه بهتر باشه:mrgreen:

mzarkoob
06-07-2012, 00:38
سلام
همون طور که یه بار در اینجا (You can see links before reply) گفتم در ARM7 به صورت ویژآل تری میشد تنظیمات اولیه کلاک و پاور واحد های مختلف را انجام داد:

You can see links before reply

درسته که این کار در cortex در قسمت system_LPC17xx.c انجام میشه ولی خوب دیگه فقط با رجیستر سر کار دارید و دیگه جنبه تصویری نداره که البته کاربر را با یه سری دیگه از رجیستر های دیگه ای که قبلا لزومی به کار کردن باهاشون نبود درگیر می کنه. این ضعفه یا قوت!!!؟؟

Aghaeifar
06-07-2012, 01:46
اینم که مثل همونه، چیزهایی که به صورت ویزارد اونجا بود اینجا هم هست یعنی اگه برای بخش کلاک نخوای می تونی خودت با همین قسمت ویزارد تنظیمش کنی و سراغ رجیستر نری. کجاش در 1768 کار با رجیستر ها شد ؟ من متوجهش نشدم.

mzarkoob
06-07-2012, 11:23
اینم که مثل همونه، چیزهایی که به صورت ویزارد اونجا بود اینجا هم هست یعنی اگه برای بخش کلاک نخوای می تونی خودت با همین قسمت ویزارد تنظیمش کنی و سراغ رجیستر نری. کجاش در 1768 کار با رجیستر ها شد ؟ من متوجهش نشدم.
بله دیدم. دیشب خسته بود چشام نمیدید!!!:mrgreen:

You can see links before reply

alishekarriz
03-09-2012, 09:32
اين مدل ويزارد رو فقط كيل ميشناسه ؟

من اين فايل رو به Atollic True STUDIO 3.1.0 اضافه كردم .. قسمت ويزاردش رو نشناخت

البته ديگه دارم از ويزارد نداشتن كلي چيز ياد ميگيرم . .همه تنظيمات رو خودم انجام ميدم