PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   RTOS và Thuật toán với PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=33)
-   -   RTOS của Microchip (http://www.picvietnam.com/forum/showthread.php?t=11346)

Duong_Act 01-10-2011 05:13 PM

RTOS của Microchip
 
Mình đang tìm hiểu RTOS nhưng là Free của CCS.
Theo những gì mình thu lượm được thì khi 2 hay nhiều task chạy thì các task sẽ được chạy đan xen với nhau.
Thời gian mỗi task chạy trước khi chuyển sang task khác là rate = n.minor_cycle.
Nhưng khi thực hiện mình thấy để đúng thì minor_cycle min phải có giá trị >= thời gian của hoàn thành 1 task ngắn nhất . Như vậy nếu gặp 1 task có thời gian khá dài thì giá trị minor_cycle phải khá lớn làm ảnh hưởng tới các task khác và tính đáp ứng của RTOS.
Vậy các bác có cách nào giải quyết vấn đề này ko ? Cái đó do RTOS của CCS hay do cách mình viết Code nhỉ ?

Ví dụ :
......
#use rtos(timer=1, minor_cycle=t)

#task (rate = t, max=1ms,queue=5)
void chuongtrinhmot()
{
///......
}

#task (rate = 2.t, max=1ms,queue=5)
void chuongtrinhhai()
{
///......
}
......
Nếu chương trình 1 hoặc 2 là 1 chương trình cần nhiều thời gian để hoàn thành như xuất kí tự lên LCD mất 50ms thì minor_cycle >=50ms. Do đó rate của các task rất lớn => RTOS không đáp ứng dc thời gian thực :(
Nhờ các cao nhân chỉ giáo :)

bien_van_khat 01-10-2011 06:56 PM

Mình ko rõ cái RTOS của CCS có phải là preemptive RTOS hay ko.

Nếu có thì task có priority cao nhất sẽ luôn được thực khi nó cần. Nói đơn giản là OS sẽ dừng task đang chạy nếu có 1 hay nhiều task có priority cao hơn cần thực thi, sau đó chuyển quyền sử dụng CPU cho task có priority cao nhất cần thực thi.

Nếu không thì có thể coi các task đều có priority như nhau, khi đó điều bạn muốn chỉ có thể thực hiện bằng cách chia nhỏ task ra thành nhiều bước. VD sau mỗi lần đẩy 1 ký tự ra LCD thay vì chờ LCD sẵn sàng nhận ký tự tiếp, bạn suspense task đó để task khác được chạy.

Duong_Act 02-10-2011 06:28 PM

Thôi thì cũng đành "băm" cái task đó nhỏ ra vậy :( Tuy là code có dài và lâu hơn nhưng chắc hết cách :(

hoangtuthanh 27-10-2011 09:56 PM

chào các bạn mình đang làm dk tốc độ động cơ và có hiển thị LCD đo số vòng của nó nhưng mình muốn nó xử lý liên tục thì làm như thế nào. mình mới tìm hiểu thôi. Ai bik thì giúp dùm nhe!! thanks you!!

Duong_Act 26-01-2012 12:12 AM

Xin chào các bác :)
Năm mới chúc các bác dồi dào sức khỏe,thành công và hạnh phúc.
Chúc 4rum ngày càng phát triển mạnh hơn nữa.
__
Tình hình là em lại có 1 vụ phải nhờ đến các bác :(
Số là đầu xuân mang CCS ra khai trương đầu năm, cũng ko phải công việc gì,chỉ là viết cho nó đỡ quên. Em chọn PIC24... và dùng ngay cái RTOS có sẵn của CCS ốp cho PIC24.
Hình như là RTOS ấy chỉ dành cho PIC16 và PIC18( em đoán thế thôi). Compile không lỗi nhưng RTOS không chạy. Nó không thực hiện một task nào cả. Nó chỉ chạy các lệnh trước
rtos_run();
Nhân tiện hỏi các bác là nguyên nhân do đâu :( Nếu là do RTOS ấy không dùng đc cho PIC24 (trở lên) thì các bác thường sử dụng RTOS nào.
Đầu xuân làm ko dc nó hơi bị cay mũi, xin nhờ các bác giúp em :(

toan_320.vn 15-04-2014 10:06 AM

Anh Duong_ACt đã tìm hiểu từ lâu . Vậy anh có đề tài nào về RTOS cho pic 18f hay tài liệu nào nói về cái này ko ạ, em đang tìm hiểu để làm đề tài tốt nghiệp ứng dung rtos này. Xin cảm ơn anh !

trungsonkmt 06-01-2015 02:01 PM

Tuy chủ đề đã cũ, nhưng hy vọng có ích cho người mới :-)
http://youtu.be/S7Mv9smGfcQ


Múi giờ GMT. Hiện tại là 05:40 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam