Thông báo

Collapse
No announcement yet.

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

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

  • #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


    • #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


      • #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


        • #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


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

            Comment


            • #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


              • #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


                • #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


                  • #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...
                    X