سلام
مشکلم حل شد!
همینطور که تو شکل زیر نشون دادم تو قسمت کانفیگ rtx اون قسمت که زرد رنگ هست رو 2 بود برای همین 2 تا تسک رو بیشتر اجرا نمیکرد و ماکزیممش هم 88 هست که تو شکل میبینید
سلام
مشکلم حل شد!
همینطور که تو شکل زیر نشون دادم تو قسمت کانفیگ rtx اون قسمت که زرد رنگ هست رو 2 بود برای همین 2 تا تسک رو بیشتر اجرا نمیکرد و ماکزیممش هم 88 هست که تو شکل میبینید
فكر كنم تعداد تسك به ميزان sram بستگي داشته باشه. يعني اگر ميزان پشته هر تسك رو كم كني. تعدادش افزايش پيدا كنه.متاسفانه داخل مشخصات 1768 زده كه 64 كيلو رم داره اما ظاهرا تنها 32 كيلوي اون در دسترس هست و مابقي براي دستگاه ها هست ( يا شايد هم من اشتباه مي كنم).
نمي دونم چرا ميزان رم اين ميكرو كنترلرها اينقدر كمه!. مثلا چي مي شد يه چيزي حدود 512 كيلو رم داشت؟! (البته به غير از بحث قيمت)
سلام.
چطور میتونم یه متغییر تعریف کنم که بتونم تو تمام تسکها ازش استفاده کنم یا یه متغییر رو به عنوان خروجی یه تسک بگیرم؟؟
میخوام یه تسک داشته باشم برای خوندن adc و بعد این مقدار خونده شده رو تو یه تسک دیگه استفاده کنم
برای این کار شما دو راه داری ، یه راه حرفه ای و برای برنامه های بزرگ و یه راه غیر حرفه ای و برای برنامه های کوچیک .
من اول راه غیر حرفه ای رو میگم :
شما میاید توی برنامه و قبل از تابع main متغیری جهانی تعریف میکنید . این متغیر در همه جای برنامه ، حتی در تسک ها قابل دسترسه .
دوم راه حرفه ای :
شما میاید و از قابلیت mailbox سیستم عامل استفاده میکنید . با این قابلیت شما میاید یه میل باکس تعریف کرده و اطلاعات رو به ای میل باکس ارسال و از اون دریافت میکنید . برای جزئیات بیشتر در این مورد به رفرنس منوال مراجعه کنید .
سلام.
کسی با mailbox سیستم عامل RTX کار کرده؟؟
چند تا مثال رو اجرا کردم ولی نمیدونم چرا موقع دریافت با دستور os_mbx_wait گیر میکنه!!
این همون مثالی هست که تست کردم
http://read.pudn.com/downloads156/do...ailbox.c__.htm
سلام.
بله. مشکل رو پیدا کردم.
باید این دستور باید در اولین تسک (و نه در تابع main ) و پیش از اولین استفاده از mailbox قرار بگیره:
[PHP]os_mbx_init(MsgBox, sizeof(MsgBox));[/PHP]
شما این دستور رو در تسک send قرار داده اید و تا اینجا درست بوده. ولی os_dly_wait که قبل از این دستوره کار رو خراب کرده و موجب شده که تسک recieve اجرا بشه که توی اون تسک از mailbox خونده اید. به همین دلیل توی حالت wait_mbx میمونه.
دستور تاخیر رو به بعد از os_mbx_init انتقال بدید درست میشه
موفق باشید
سلام به همه دوستان ؛ بخصوص استاد منصوری عزیز و عرض خسته نیاشید به همتون.
اقا یسری تاپیک تو سایت ecaهست در مورد rtx . خیلی روونه و واضح . اینم یه فایل که can رو با این سیستم عامل پیاده سازی کرده.
سلام آقا علیرضا
واقعا" عالی بود.حرف نداره!
ممنون
سلام
ممنون از آموزش هاتون
این مقاله کل اموزش های داده شده:
بله واقعا !
در سمپل های خود کیل چند مثال هست که از rtx استفاده کرده برای انجام چند کار معمولی مثلا چشمک زن و .. ! ولی باز در سمپل هاس stm در پوشه MCBSTM32 تنوعش بیشتره. و در کل علاقه عجیبی به سمپل چشمک زن داشتند انکار کار مهمی غیر این نیست. مثالی که یه کار درست حسابی انجام بده نگذاشته. مثلا یه برنامه دارید که به صورت معمول داره کارای زیر را باهم انجام میده:
-کار معمولش اینه مثلا یه تایمر را فعال کرده داره روی یه پایه به صورت سخت افزاری خودش پالس میده یا از ADC هر چی خوند رو LCD نشون میده. یا رو یه پای هایی داره PWM میده یا هر کار دیگه ای ...
-اگه یه وقفه خارجی اومد میره یه چیزی رو یه جایی مثلا lcd یا uart نشون میده که وقفه اومده.
- اگه یه چیزی روی پورت سریال اومد با توجه به اینکه وقفه uart فعاله میره در زیروال وقفه و کاراکتر دریافت می کنه و اگر اینتر زده شد رشته کامل شده قابل استفاده هست و مثلا این رشته را روی sd ذخیره میکنه یا هر کار دیگه در آنجا انجام میده
- هر چند ثانیه یک بار یه کار دیگه بکنه مثلا هر سه ثانیه یک بار روی پورت سریال یه چیزی بفر سته
خوب همان طور که گفته شد این کارا به صورت معمول در یک برنامه قابل انجام است و در برنامه اصلی کارای اصلی داره انجام میشه و به کمک وقفه ها، باقی وظایف قابل انجامه. حالا سوال اینه که یه همچین برنامه هایی که ما قبلا به کمک وقفه ها انجام می دادیم در این RTX به چه صورت انجام میشه؟
در مثالها به غیر از دستورات گفته شده از چند دستور دیگه هم استفاده شده است :
[PHP]OS_MUT mut_GLCD; /* Mutex to controll GLCD access */
os_mut_init(mut_GLCD);
os_mut_wait(mut_GLCD, 0xffff);
[/PHP]
ویرایش توسط mzarkoob : 06-11-2013 در ساعت 10:09
در این برنامه که ضمیمه شده
[PHP]void USART1_IRQHandler (void) {
volatile unsigned int IIR;
char data;
IIR = USART1->SR;
if (IIR & USART_SR_RXNE) { /* read interrupt */
USART1->SR &= ~USART_SR_RXNE; /* clear interrupt */
data=(USART1->DR & 0x1FF);
rx_buffer[rx_wr_index]=data;
if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
};
os_evt_set (0x0001, t_readkey); /* send event to task 'task' */
}
[/PHP]که از همون دستور os_evt_set در وقفه استفاده شده! برعکس نگفتید!؟
سلام به همه دوستان
اقا من اومدم با ین سیستم عامل کار کنم همون ول کار وایستادم.من برای lpc1768 میخوام ولی توی پوشه ptx فایلی کانفیگ برای 17xx نیست. اینو میگم RTX_Conf_LPC23xx.c حالا باید چکار کنم.دوستان کسی رو 1768 کار کرده ؟
جواب با همین هدر LPC23XX راه اندازی شد.فقط LPC17XX.H به هدر اظافه شود
ویرایش توسط arvin2009 : 03-02-2014 در ساعت 14:45
کاشکی با cmsis rtos هم مقاله بدی....
فیلم آموزش emWin با LPC1788
شامل مثال های مختلف جهت راه اندازی emWin به طور مستقل و به همراه سیستم عامل RTX و راه اندازی تاچ
تاپیک ویژه راهنمای خریداران فیلم :http://www.iranmicro.ir/forum/showth...2695#post92695
Hardware & Software designer
Telegram:@y_r_z
سلام دوستان من یک مشکل دارم این برنامه کار نمی کنه
اگه کسی از دوستان کمک کنه ممنون می شم
#include <LPC23xx.H>
#include <rtl.h>
OS_TID tsk_ID1, tsk_ID2;
__task void task_init(void);
__task void task1(void);
__task void task2(void);
void blink1(void);
void blink2(void);
int main()
{
os_sys_init(task_init);
while(1){}
return 0;
}
__task void task_init(void)
{
IODIR0 =0x3;
IOSET0 = 0x3;
tsk_ID1 = os_tsk_create(task1, 1); //priority:1
tsk_ID2 = os_tsk_create(task2, 1); //priority:1
os_tsk_delete_self(); //necessary
}
__task void task1(void)
{
int i = 0;
while(1){
for (i = 0; i < 0x7ffff; i++);//process
blink1();
}
}
__task void task2(void)
{
int i = 0;
while(1){
for (i = 0; i < 0x8ffff; i++);//process
blink2();
}
}
void blink1(void)
{
IODIR0 =0x3;
IOSET0 = 0x3;
}
void blink2(void)
{
IODIR0 =0x3;
IOSET0 = 0x3;
}
با سلام و عرض خسته نباشید.
اقا ایا می شود در سیستم rtx در یک تسک بیاییم و از مقدار موجود در متغیری که در یک تسک دیگر است، استفاده کنیم؟ اگر اره، روش ان به چه صورت می باشد؟ در صورت امکان راهنمایی ام بفرمایید. با تشکر
سلام
الان دقیقا یادم نیست ولی فکر کنم با Mailbox میشه این کارو کرد.
ممنون اقا مهدی. توضیحات بیشتر این مورد را از کجا می توانم پیدا کنم؟
یک پی دی اف هست در کیل برای شرح rl همین طور
\C:\Keil\ARM\Hlp فایل rlarm
و به طور جداگانه در نت همMailbox را سرچ کنید
ممنون