Thông báo

Collapse
No announcement yet.

Vì sao phải sử dụng ngắt?

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #31
    Đề nghị bác big_sky trình bày giải thuật Quét!

    Nguyên văn bởi big_sky Xem bài viết
    Mỗi người thì đúng sai hai mặt của nó.
    Tôi có thể chứng minh dùng các quét không ảnh hưởng đến thời gian thực hiện vòng quét hì sao? Và có thể nhấn phím liên tục mà không ảnh hưởng đến xuất led thì sao? Tức là vừa quét led vừa nhận phím mà không ảnh hưởng đến nhau đấy.
    Nếu thế thì tuyệt vời!
    Nếu bác quét LED + Bắt phím + Tạo Timer không cần dùng ngắt mà tính chính xác thời gian thực hiện các tác vụ thì tui đây tâm phục khẩu phục.
    Rất mong đợi.
    Chào đoàn kết.
    Một bông hồng cho những ai đang còn mẹ,
    Đang còn mẹ để lòng vui sướng hơn ..

    Comment


    • #32
      Nguyên văn bởi big_sky Xem bài viết
      Vây nếu có 100 phím nhấn thì sao bác HPECOM?
      Nếu có 100 phím nhấn thì phương pháp dùng ngắt càng thể hiện rõ lợi thế của mình, lý do thời gian bắt phím sẽ không đổi, chỉ có phần xử lý tăng mà việc tăng đó không làm ảnh hưởng đến chất lượng bắt phím.
      Nếu với 100 phím mà bạn quét thì sẽ rất chậm, chậm gấp 100 lần so với dùng ngắt.
      Chúng ta thảo luận nhằm đưa ra các giải pháp tốt nhất, không nhằm mục đích tranh cãi. Rất mong big_sky hiểu!
      Chào đoàn kết.
      Một bông hồng cho những ai đang còn mẹ,
      Đang còn mẹ để lòng vui sướng hơn ..

      Comment


      • #33
        Nguyên văn bởi HPECOM Xem bài viết
        Nếu có 100 phím nhấn thì phương pháp dùng ngắt càng thể hiện rõ lợi thế của mình, lý do thời gian bắt phím sẽ không đổi, chỉ có phần xử lý tăng mà việc tăng đó không làm ảnh hưởng đến chất lượng bắt phím.
        Nếu với 100 phím mà bạn quét thì sẽ rất chậm, chậm gấp 100 lần so với dùng ngắt.
        Chúng ta thảo luận nhằm đưa ra các giải pháp tốt nhất, không nhằm mục đích tranh cãi. Rất mong big_sky hiểu!
        Chào đoàn kết.
        Bác không nên cãi những người ghét dùng ngắt (ko biết có phải vì ko biết dùng hay không)! hihi!

        Comment


        • #34
          Nguyên văn bởi big_sky Xem bài viết
          Các bác nói nặng lời rồi.
          Tôi nói thay thế ở đây là trường hợp cụ thể nào đó mà ta có thể làm được. Và các trường hợp đó là do giải thuật của mình nghỉ ra thôi, Nếu các bác không biết thì hỏi tôi trả lời, sao lại nặng lời thế.
          Ví du: Chương trình hiễn thị đồng hồ trên led 7 đoạn dùng phương pháp quét, và có 3 phím tăng, giảm, chức năng:
          Giải thuật: đọc giá trị -> xuất led -> đọc phím -> xử lý phím -> quay lại.
          Tại chương trình đọc phím: Nếu phím nhấn thì ô nhớ nào đó =00h, nha ra thì =01h, trạng thái bình thường là trước khi nhấn =0ffh. Vậy khi xét 1 phím nào đó thì xem trước đó nó là mấy. Nếu =00h thì khi nha phím ra thì cho lên 1. Nếu =0ffh thì khi nhấn vào thì cho là 0.
          Sau đó chương trình xử lý phím thì chỉ xét nếu là 1 thì gọi làm công việc của phím nhấn đó thôi. rồi sau đó đặt lên 0ffh.
          Đây là 1 giải thuật tôi chợt nghi ra thôi, có gì không đồng ý thì các bác tự sưa nhé.
          Nhưng chắc chắn là sẽ có giải thuật thay thế được ngắt ở một phạm vi nhất đinh nào đó.
          Gia su: ở 1 hệ thống chạy với thời gian thực, và xuất led nếu các bác dùng ngắt nhiều quá, mổi lần ngắt thì trê 1 ít thời gian, quá nhiều lần như vậy thì không chấp nhận được.
          Sau này nếu gặp những trường hợp đó thì chắc các bác senho71 đến BIG_SKY.
          mình xin góp ý thế này, cách của bác là ok nếu như khi vào chương trình xử lý phím của bác nhỏ thôi, chứ nếu như mà xử lý lâu thì chắc chắn led7seg của bác sẽ tắt, lúc này chỉ có 1 led sáng mà thôi, như vâyh nếu bác làm một cái đồng hồ chẳng hạn thì khi người ta chỉnh giờ thì coi như thất bại ngay. thật sự ngắt thì rất hay, nó cho phép chúng ta làm nhiều công việc cùng một lúc (thật sự là không như vây). đối với mình thì mình thích dùng ngắt hơn, nó đảm bảo tính chính xác, ít tốn phần cứng bên ngoài, nói chung là ok hết, nhất là khâu quét led, xài timer là hết sẩy. nếu có gì sai xin bạn góp ý nhé
          hãy cố gắng dù vướn phải thất bại!!!!!!!!

          Comment


          • #35
            Nguyên văn bởi ngohaibac Xem bài viết
            Biết đâu, đây chính là cách lập trình Multi task trong main nhỉ??
            Chính xác. Hay còn gọi là "lập trình đa nhiệm". Còn về giải thuật cụ thể, thì chi mình xin không đưa ra ở đây. Nếu các bạn muốn tìm hiêu thì tìm xem tài liệu về multitasking nhé.
            Còn về ngắt thì nó vẫn không thể thiếu trong VXL vì nhiều điều kiện khác mà bất cứ lập trình nào cung không thay thế được. ví dụ trong trường hợp này:
            ...giả sử khi bạn can phải nhận xung kích khởi từ 1 nguồn nào đó , tín hiệu đó rất wan trọng thời gian kích thì rất nhanh nếu bỏ wa chỉ mot tin hiệu sẽ làm hỏng mọi chuyện.neu khi tin hiệu kích xảy ra mà ta đang mải mê trong 1 ctr nao do?????????
            Tôi chỉ nói là tôi ghét dùng ngắt, còn người khác thì tùy. Tồi không khuyên ai nên dùng cái này cái kia. Tôi chỉ đưa ra lập luận của tôi, các bạn không thích hay không tin thì thôi vậy.
            Bài viết của tôi có chô nào không đúng mong mọi người bo qua. Và có le đây là bài cuối tôi viết trong luồng này. Hẹn gặp ở vấn đề khác. Nhưng mong là mọi người đừng dùng lời le khiêu khích nua nhé, cho dù là với ai.

            Comment


            • #36
              Chào bác big_sky!

              Tui không tranh cãi cũng không khiêu khích, tôi rất thích học những cái mới, những điều hay.

              Tui hiểu bác muốn nói đến lập trình đa nhiệm, tuy nhiên tui muốn hiểu như thế nào là đa nhiệm. Đa nhiệm như thế nào để nhiều nhiệm vụ có thể hoàn tất cùng lúc mà không ảnh hưởng đến nhau?

              "Nếu các bác không biết thì hỏi tôi trả lời,"
              "Tôi có thể chứng minh dùng các quét không ảnh hưởng đến thời gian thực hiện vòng quét hì sao? Và có thể nhấn phím liên tục mà không ảnh hưởng đến xuất led thì sao? Tức là vừa quét led vừa nhận phím mà không ảnh hưởng đến nhau đấy."

              Rất mong đợi chứng minh và trả lời của big_sky!
              Chào đoàn kết.
              Một bông hồng cho những ai đang còn mẹ,
              Đang còn mẹ để lòng vui sướng hơn ..

              Comment


              • #37
                Chào các bạn trẻ. Tôi không lâpj trình VSL, nhưng thấy các bạn thảo luận sôi nổi quá nên cũng tham gia chút nhé.

                Trươc tiên mong big_sky không vì một vài lời kích động không thiện chí mà rời xa luồng trong khi anh em vẫn mong được học hỏi.

                Theo cách hiểu của PT thì chúng ta đang lập trình trên CPU đơn nhiệm thì chưa thể có lập trình đa nhiệm thực sự được. Và giải thuật của big_sky ở bài trước đó vẫn chỉ là giải quyết nhiều việc trong tuần tự thôi. Khi đa nhiệm thì bạn phải chia được CPU với các priority cho mỗi job khác nhau được cơ.

                Cũng theo tôi hiểu thì dùng ngắt tức là dạng "multi-monitoring". Dù đang làm gì, ở đâu ta vẫn luôn nghe ngóng xem có gì đột xuất không, có phải xử lí ngay và bỏ qua công việc hiên tại không (ngắt-quãng mà)?

                Ví dụ kế hoạch của bạn (main-prg) sáng nay đi HP chiều tối mới về. Do không có điện thoại di động, 12h trưa nguòi nhà bạn đi cấp cứu, bạn không hề biết. Mãi đến tối về bạn mới biết. Nhưng nếu bạn có di động (Ngắt đó) bạn đucowj thông báo, nếu đó là nghiêm trọng hơn, bạn có thể bỏ qua chuyến công tác mà về ngay HN vào lúc 13h để giải quyết việc nhà mà không cần quan tâm tới cong việc đng dở dang kia.

                Vậy đấy, theo bạn thì cái nào lợi hơn.

                Chúc đoàn kết!

                PT.
                Núi cao bởi có đất bồi
                Núi chê đất thấp, núi ngồi ở đâu?
                Muôn dòng sông đổ biển sâu
                Biển chê sông nhỏ, biển đâu nước còn?

                Comment


                • #38
                  Thôi thôi thôi, can các bạn.
                  Các bạn đã căng thẳng chỉ vì một ý kiến rất chủ quan của big_sky, trong khi bạn này đã không cho một ví dụ cụ thể trong một trường hợp đủ sức thuyết phục.

                  Tôi tin là big_sky mới chỉ lập trình một số chương trình, chưa phải là tất cả những ứng dụng mà MCU có thể đảm nhiệm được, nên chưa thấy hết vấn đề. Trong nhiều ứng dụng, hoàn toàn không cần dùng ngắt, nhưng cũng có nhiều ứng dụng, bạn không dùng ngắt sẽ không giải quyết được vấn đề.

                  Có những MCU hoàn toàn không có ngắt, nội và ngoại, và chúng luôn rẻ hơn các MCU cấu hình tương đương và có ngắt.

                  Có những MCU có 1, thậm chí 2, 3 ngắt nội, ngoài ra còn có ngắt ngoại nữa.

                  Những thiết kế MCU này được tối ưu qua nhiều thế hệ kỹ sư thiết kế, qua nhiều ứng dụng thực tế từ hàng chục năm nay, nên không thể chỉ từ một vài kinh nghiệm nhỏ, một vài tài liệu đã đọc qua (nhưng đôi khi chưa hiểu hết) của chính bản thân mình mà đã vội vàng phủ nhận một vấn đề lớn. Đây là một trong những sai lầm của tuổi trẻ, các bạn cần hết sức tỉnh táo và khách quan khi nhìn nhận vấn đề.

                  NamVN

                  Comment


                  • #39
                    giời, nếu mà quét cả trăm phím thì ta dùng nguyên 1 con vdk để quét phím có phải khoẻ hơn không!
                    !e

                    Comment


                    • #40
                      Chào các bạn!
                      Mình mới đang ký thành viên nên chỉ biết chút ít. Mình có ý kiến thế này nhé:
                      MCU chỉ là Đơn Nhiệm, Còn xử lý Đa nhiệm của MCU cũng đúng khi chúng đáp ứng thời gian thực. Tức là nói lập trình đa nhiệm là xử lý nhiều việc cùng lúc nhưng thực chất là một lúc 1 việc. Nhưng vì tốc độ quá nhanh nên ta ngộ nhận nó là đa nhiệm.
                      Ví dụ:
                      Ví dụ kế hoạch của bạn (main-prg) sáng nay đi HP chiều tối mới về. Do không có điện thoại di động, 12h trưa nguòi nhà bạn đi cấp cứu, bạn không hề biết. Mãi đến tối về bạn mới biết. Nhưng nếu bạn có di động (Ngắt đó) bạn đucowj thông báo, nếu đó là nghiêm trọng hơn, bạn có thể bỏ qua chuyến công tác mà về ngay HN vào lúc 13h để giải quyết việc nhà mà không cần quan tâm tới cong việc đng dở dang kia.
                      trong trường hợp này nếu main-prg cứ 1 phút (hay 1 tiếng gì đó) gọi về nhà 1 lần thì sao? Hay nói cách khác trong 1 đơn vị thời gian này thì t được gọi là trễ nhưng trong đơn vị thời gian khác thì t được gọi là đáp ứng thời gian thực.
                      Trong máy tính cũng vậy. Xử lý đa nhiệm thực chất cũng là đơn nhiệm. Khi 1 ứng dụng chạy thì sẽ có tốc độ 100M( ví dụ) nhưng khi 100 ứng dụng chạy thì mỗi ứng dụng chỉ chạy có 1 M.
                      Còn ngắt trong các trường hợp trên chỉ là làm cho chương trình không phải quán xuyến nhièu việc cùng lúc thôi. Nếu các bạn dùng ngắt thì cũng tốt nhưng nếu không thích dùng thì cũng đâu có sao miễn là đi đến kết quả cuối cùng là được.
                      Còn nều các bạn muốn đưa ra 1 ví dụ đủ sức thuyết phục thì các bạn ra đề đi. tôi làm cho, và đề phải chi tiết 1 chút.
                      |

                      Comment


                      • #41
                        Nguyên văn bởi lungtung Xem bài viết
                        Còn nều các bạn muốn đưa ra 1 ví dụ đủ sức thuyết phục thì các bạn ra đề đi. tôi làm cho, và đề phải chi tiết 1 chút.
                        Vậy xin bác lungtung giúp tôi việc sau:
                        Tôi có một lò sưởi gồm 2 thanh nhiệt được điều khiển bằng máy tính, có gắn kèm LCD và 4 phím để sử dụng khi máy tính hỏng.
                        _ Dùng 2 relay để đóng/ngắt 2 thanh nhiệt.
                        _ Đặt 1 cảm biến để đo nhiệt độ phòng, 2 cảm biến để đo nhiệt độ thanh nhiệt. Các cảm biến dùng loại PT100 được gắn bộ chuyển đổi tín hiệu thành điện áp từ 0 đến 5 volt ứng với thang nhiệt độ từ 0 đến 100 độ C.
                        _ Giao tiếp với PC bằng RS232.
                        _ Sử dụng bộ ADC on chip.
                        _ Điều khiển LCD dùng 8 bit dữ liệu.
                        Yêu cầu:
                        _ Cho phép cài đặt nhiệt độ phòng từ 40 đến 70 độ C (bằng cả PC và LCD).
                        _ Sai số cho phép giữa nhiệt độ phòng và nhiệt độ đặt là 3 độ C.
                        _ Hai thanh nhiệt sẽ luân phiên hoạt động (vì một thanh là đủ cấp nhiệt cho phòng). Sau mỗi 4 giờ sẽ đổi ca tự động nếu không thanh nào bị hỏng.
                        _ Khi khởi động lò cho phép cả 2 thanh cùng hoạt động.
                        _ Trong các quá trình phải tuân thủ quy tắc: Hai thanh khởi động phải cách nhau ít nhất 3 phút, Lần tắt trước và lần chạy sau của một thanh phải cách nhau 5 phút.
                        _ Khi một trong 2 thanh bị sự cố (cấp điện mà ko nóng) thì phải báo về PC đồng thời chạy thanh còn lại để thay thế.
                        _ Khi nhiệt độ môi trường quá thấp, 1 thanh không đủ cấp nhiệt cho phòng, quá trình nếu kéo dài quá 30 phút thì thanh còn lại phải chạy hỗ trợ để đủ cấp nhiệt.
                        _ Hiển thị nhiệt độ đặt, nhiệt độ phòng và nhiệt độ thanh nhiệt lên LCD và PC.

                        Tôi muốn chip không đứng yên chờ mà lúc nào cũng hoạt động kiểm tra liên tục. Tôi gặp các khó khăn sau:
                        _ Các cảm biến luôn dao động, giải thuật chờ như thế nào để không dừng tại chỗ mà số hiển thị trên LCD ổn định không bị nháy liên tục.
                        _ Truyền dữ liệu lên LCD phải chờ LCD thực hiện lệnh, tôi không muốn đứng yên đó chờ mà phải làm những công việc kiểm tra hệ thống trong lúc chờ đó.
                        _ Khi khởi động cả 2 máy cần chờ máy 1 khởi động 3 phút.
                        _ Nhận các tham số cài đặt từ PC phải chờ truyền đủ các số liệu.
                        Những công việc trên đan xen cực kỳ rắc rối, tôi đã mất rất nhiều thời gian vẫn chưa giải quyết tốt.
                        Mong rằng các bác giúp tôi cách giải quyết các vấn đề trên.
                        HPECOM thành thật cảm ơn!
                        Chào đoàn kết.
                        Một bông hồng cho những ai đang còn mẹ,
                        Đang còn mẹ để lòng vui sướng hơn ..

                        Comment


                        • #42
                          Cái này gọi là mới ra phố gặp núi. Đề này khó qua, để tôi về nhà suy nghi thêm. Nếu có bác SKY ở đây thì tốt quá...
                          |

                          Comment


                          • #43
                            Nguyên văn bởi big_sky Xem bài viết
                            Nhưng bây giờ lập trình có những kỹ thuật xử lý mà không cần dùng ngắt nưa.
                            Bác big_sky sai ở chỗ này. Tuy là những kỹ thuật đó giúp chúng ta không dùng ngắt , nhưng không phải là thay thế hoàn toàn. (tuy là đa số). VÀ tùy trường hợp nào đó nếu chúng ta dùng ngắt thì chương trình đơn giản hơn rất nhiều.
                            Tôi nghỉ là bác big sky tuy không tham gia nhưng vẫn đang theo dõi luồng này, nếu có gì không đứng thì mail cho tôi góp ý nhé.

                            mình xin góp ý thế này, cách của bác là ok nếu như khi vào chương trình xử lý phím của bác nhỏ thôi, chứ nếu như mà xử lý lâu thì chắc chắn led7seg của bác sẽ tắt, lúc này chỉ có 1 led sáng mà thôi, như vâyh nếu bác làm một cái đồng hồ chẳng hạn thì khi người ta chỉnh giờ thì coi như thất bại ngay. thật sự ngắt thì rất hay, nó cho phép chúng ta làm nhiều công việc cùng một lúc (thật sự là không như vây). đối với mình thì mình thích dùng ngắt hơn, nó đảm bảo tính chính xác, ít tốn phần cứng bên ngoài, nói chung là ok hết, nhất là khâu quét led, xài timer là hết sẩy. nếu có gì sai xin bạn góp ý nhé
                            Bác chipmickey không nhìn thấy vấn đề ở đây rồi.
                            Đã gọi là quét thì mỗi công việc chỉ thực hiện 1 thời gian nhất định nào đó thôi, không có chuyện chỉ 1 led sáng ở đây đâu ( nếu ta tính toán chính xác).
                            Đúng là ngắt đảm bảo tính chính xác, nhưng chưa chắc là ít tốn phần cứng bên ngoài hơn đâu ( trường hợp có nhiếu phím), có thể là ngược lại đó.
                            |

                            Comment


                            • #44
                              Bác hpecom cho hỏi cái này nhé:
                              trong 1s vòng quét các thứ của bác thực hiện 50 lần có được không? BÁc dùng CPU tốc độ bao nhiêu?
                              |

                              Comment


                              • #45
                                Chúc mừng năm mới cả nhà!
                                @lungtung
                                Vấn đề tốc độ tớ không đặt nặng mà vấn đề ở chỗ là tận dụng hết tài nguyên. Tôi dùng PIC16F877A thạch anh 20Mhz.
                                Một bông hồng cho những ai đang còn mẹ,
                                Đang còn mẹ để lòng vui sướng hơn ..

                                Comment

                                Về tác giả

                                Collapse

                                Puppy Tìm hiểu thêm về Puppy

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X