dùng ngắt trở về địa chỉ 0000h??

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • toymaker
    Thành viên tích cực
    • Feb 2006
    • 351

    #16
    Theo tui, các bạn đừng dùng khởi tạo stack mặc nhiên là mov sp, #07 vì như vậy là bạn chỉ còn đúng 8 thanh ghi bank0 dùng cho chương trình của bạn, phần còn lại là stack!

    on_reset:
    mov sp, #50H ; khởi tạo stack pointer

    Bạn nên dùng đoạn code trên để khởi tạo stack, đương nhiên có thể gia giảm số 50H nhưng đại khái nó phải cao cao 1 tí.
    Và bài toán của thanhnguyen0 thì chỉ cần 1 lệnh jmp 0000 hoặc jmp on_reset là xong.
    Không cần tính toán thêm gì nữa cả. Vì vào chương trình chính bạn đã tạo lại SP rồi.
    Không biết các bạn thấy chưa ổn chỗ nào?
    Imagine all the people
    Living life in peace...

    Comment

    • thanhnguyen0
      Thành viên tích cực
      • May 2008
      • 102

      #17
      Nguyên văn bởi toymaker Xem bài viết
      Chương trình chính KHÔNG được có reti (Chả có luật nào bắt buộc phải có reti cả, vì bạn muốn reset CPU chứ đâu cần trở về chương trình chính ở điểm xử lý ngắt !)
      chào anh
      !!
      không bit ý câu nói trên của anh như thế nào. (nếu sử dụng ngắt) đã phục vụ xong trình phục vụ ngắt mà không có lệnh RETI thì sẽ tràn stack thì sao ạ??
      xin anh giải thích thêm!!
      kíh mong được học hỏi thêm ở anh
      =====================
      còn

      Comment

      • toymaker
        Thành viên tích cực
        • Feb 2006
        • 351

        #18
        Stack thì không sợ tràn đâu, nó chỉ tràn khi có quá nhiều lệnh call lồng nhau, và/hoặc quá nhiều lệnh push mà thôi.
        Vấn đề là ở chỗ nếu thiếu 1 lệnh reti thì cơ cấu xử lý ngắt sẽ treo ở ngắt đó.
        Việc nhảy về 0000 sẽ đưa CPU trở lại chương trình chính từ đầu nhưng có lẽ sẽ không còn chấp nhận ngắt nữa.
        Vì vậy an toàn nhất để reset trong ngắt là cách mà bạn pvkhai nêu ra ở đầu luồng, và bạn chipmickey đã cho đoạn code push gia trị 0000 vào stack trước khi reti.
        Tui thì giải bài toán theo cách khác với thanhnguyen0 là không dùng ngắt để reset.
        Trong chuơng trình chính tui kiểm tra cờ ngắt của ngắt đó (đương nhiên là phải khai báo cấm ngắt đó ở đầu chương trình chính).
        Nếu cờ ngắt tắt thì tiếp tục chương trình bình thường.
        Nếu cờ ngắt bật thì xóa cờ ngắt rồi nhảy về 0000, xem như đã reset CPU.
        Imagine all the people
        Living life in peace...

        Comment

        • toan258
          Thành viên tích cực
          • May 2011
          • 193

          #19
          em đọc các cách của các bác mà chẳng hiểu j cả.cuôi cùng là các bác có thể giải thích giùm em là:
          khi thực hiện xong ngắt mà muốn nó trở về một địa chỉ đặt sẵn thì làm thế nào(nhớ rõ là không phải quay về địa chỉ trước khi xảy ra ngắt mà pc đã lưu vào trong stack,mà nó sẽ nhảy về địa chỉ do mình đặt ra)
          đùa chứ tớ hơi ngu...thông cảm nha..heee...

          Comment

          • toan258
            Thành viên tích cực
            • May 2011
            • 193

            #20
            đùa chứ tớ hơi ngu...thông cảm nha..heee...

            Comment

            • toan258
              Thành viên tích cực
              • May 2011
              • 193

              #21
              em đọc các cách của các bác mà chẳng hiểu j cả.cuôi cùng là các bác có thể giải thích giùm em là:
              khi thực hiện xong ngắt mà muốn nó trở về một địa chỉ đặt sẵn thì làm thế nào(nhớ rõ là không phải quay về địa chỉ trước khi xảy ra ngắt mà pc đã lưu vào trong stack,mà nó sẽ nhảy về địa chỉ do mình đặt ra)
              đùa chứ tớ hơi ngu...thông cảm nha..heee...

              Comment

              • voiconvuive
                Thành viên tích cực
                • May 2010
                • 723

                #22
                Nguyên văn bởi toan258 Xem bài viết
                em đọc các cách của các bác mà chẳng hiểu j cả.cuôi cùng là các bác có thể giải thích giùm em là:
                khi thực hiện xong ngắt mà muốn nó trở về một địa chỉ đặt sẵn thì làm thế nào(nhớ rõ là không phải quay về địa chỉ trước khi xảy ra ngắt mà pc đã lưu vào trong stack,mà nó sẽ nhảy về địa chỉ do mình đặt ra)
                thoát ngắt thì nó trở về chương trình chính ,chỗ mà từ đó bạn ngắt ,nếu muốn trở về địa chỉ bạn đặt thì thêm cái lệnh cho nó nhảy ,e nghĩ thế >.<

                Comment

                • rptdnmqs
                  Thành viên tích cực
                  • Nov 2008
                  • 440

                  #23
                  Khởi tạo lại stack pointer rồi ở ngắt nhảy về đầu là được.Hoặc đầu chương trình đã khởi tạo stack.Ở ngắt chỉ việc nhảy.
                  , , ,

                  Comment

                  • toan258
                    Thành viên tích cực
                    • May 2011
                    • 193

                    #24
                    Nguyên văn bởi rptdnmqs Xem bài viết
                    Khởi tạo lại stack pointer rồi ở ngắt nhảy về đầu là được.Hoặc đầu chương trình đã khởi tạo stack.Ở ngắt chỉ việc nhảy.
                    bác nói rõ hơn đi được không khó hiểu quá.nếu mà nhảy thế thì có thoát dc ngắt không khi không qua lệnh kết thúc ngắt là reti
                    đùa chứ tớ hơi ngu...thông cảm nha..heee...

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...