CCS sai Ti sai , jtag sai, hay em sai

vanthinhvt92

Thành Viên PIF
trời ơi , đoạn sau này chạy đúng rùi nhưng cái a hiển thị bị sai , biểu thức hiển thị theo a nên sai nhưng cái c lại chạy đúng , ko bít cái CCS bị gì nữa
Anh sẽ giải thích cho em hiểu tại sao a hiển thị sai, c ra đúng nhé:
Khi mà em khai báo tham số tham trị và biến cục bộ cho một hàm trong chương trình C, giá trị của tham số và các biến sẽ được ghi vào các thanh ghi của vi xử lý khi chương trình vừa nhảy vào hàm (8051 có 8 thanh ghi nhớ k? MSP430 cũng vậy). Khi em debug và watch một biến, nhiệm vụ của debugger sẽ là lấy giá trị tại địa chỉ trên vi xử lý của biến mà compiler biên dịch từ đầu (xem address của biến a kìa, register mấy đó thấy k?) lên hiển thị trên ô watch. Cho nên giá trị của a ở đây sai là vì sau khi step over câu lệnh tính c, chương trình hợp ngữ đã mượn thanh ghi chứa a để tính toán các giá trị | & << nên giá trị trong đó bị đổi. Khi debug thì mình chỉ thấy giá trị này còn giá trị gốc thì mất tiêu rồi. Biểu thức nó không ghi address ở đâu nghĩa là nó tính dựa vào giá trị truyền lên từ debugger thui cho nên nó đúng theo giá trị watch được của a.


Khai báo các biến a,b,c là toàn cục thì sẽ thấy được giá trị của tụi nó khi debug. Nhưng viết chương trình hiệu quả thì càng hạn chế biến toàn cục càng tốt, vì khó quản lý, tốn bộ nhớ, chậm.

Còn gì chưa hiểu thì hỏi lại nhé.

Túm lại trả lời cho câu hỏi của thread này: chả ai sai cả, chỉ là hienqsb chưa biết cách làm việc của tụi nó thui.
Anh Minh ơi, đọc cái này của anh ngộ ra nhiều điều thật, đây mới đúng là ngôn ngữ cấp cao nè .!
 
Top