Chào các bạn!
Mình đang sử dụng Keil để lập trình 8051. Mình có một số thắc mắc:
1. Mình sử dụng volatile cho biến trong hàm ngắt, nhưng khi truy cập đến biến trên trong chương trình chính thì giá trị biến đó ko thay đổi. Như vậy hàm volatile không có tác dụng báo hiệu cho trình biên dich biết biến trong hàm ngắt đã bị thay đổi? Trong khi đó nếu đổi kiểu dữ liệu thành DATA thì lại có thể truy cập được bình thường( mình cấu hình biên dịch bộ nhớ là XDATA). Như vậy có phải là khi biên dịch các biến sẽ mặc định trong XDATA nên biến trong hàm ngắt nên đặt ở DATA, như vậy thì giá trị biến đó sẽ thay đổi sau khi thực hiện xong hàm ngắt?
2. Khi tối ưu ở mức cao (level 8-9) thì hàm delay() với vòng lặp for(i=0;,i<10000;i++) {} thì trình biên dịch vẫn nhận biết được và không tối ưu. Tại sao lại có hiện tượng này?
Mình đang sử dụng Keil để lập trình 8051. Mình có một số thắc mắc:
1. Mình sử dụng volatile cho biến trong hàm ngắt, nhưng khi truy cập đến biến trên trong chương trình chính thì giá trị biến đó ko thay đổi. Như vậy hàm volatile không có tác dụng báo hiệu cho trình biên dich biết biến trong hàm ngắt đã bị thay đổi? Trong khi đó nếu đổi kiểu dữ liệu thành DATA thì lại có thể truy cập được bình thường( mình cấu hình biên dịch bộ nhớ là XDATA). Như vậy có phải là khi biên dịch các biến sẽ mặc định trong XDATA nên biến trong hàm ngắt nên đặt ở DATA, như vậy thì giá trị biến đó sẽ thay đổi sau khi thực hiện xong hàm ngắt?
2. Khi tối ưu ở mức cao (level 8-9) thì hàm delay() với vòng lặp for(i=0;,i<10000;i++) {} thì trình biên dịch vẫn nhận biết được và không tối ưu. Tại sao lại có hiện tượng này?
Comment