Biến trong KeilC

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • bockhoi
    Thành viên mới
    • Nov 2007
    • 13

    #1

    Biến trong KeilC

    Các bác ơi ! em không phải chuyên ngành, mà chỉ ham mê điện tử.
    Có vần đề về khai bao biến trong KeilC em muốn nhờ các bác giúp đỡ:
    Các bác cho em hỏi các biến: idata , static unsigned char , unsigned char , khác nhau ở chỗ nào ,biến static unsigned char thì được dùng trong trường hợp nào?

    Và biến idata được lưu ở bộ nhớ nào của VDK. vì em khai báo mảng nhiều phần tử kiều idata , nhiều hơn rất nhiều bộ nhớ RAM của VDK mà trình dịch vẫn dịch tốt và VDK cũng chạy tốt. mà tất cả các biến idata đó vần thay đổi được giá trị, vậy nó ở bộ nhớ ROM hay bộ nhớ RAM.
    Mong các bác chỉ giúp!
    Em xin cảm ơn!
    Last edited by bockhoi; 04-03-2010, 09:24.
  • anhhnt
    Thành viên chính thức
    • Nov 2008
    • 88

    #2
    Nguyên văn bởi bockhoi Xem bài viết
    Các bác ơi ! em không phải chuyên ngành, mà chỉ ham mê điện tử.
    Có vần đề về khai bao biến trong KeilC em muốn nhờ các bác giúp đỡ:
    Các bác cho em hỏi các biến: idata , static unsigned char , unsigned char , khác nhau ở chỗ nào ,biến static unsigned char thì được dùng trong trường hợp nào?

    Và biến idata được lưu ở bộ nhớ nào của VDK. vì em khai báo mảng nhiều phần tử kiều idata , nhiều hơn rất nhiều bộ nhớ RAM của VDK mà trình dịch vẫn dịch tốt và VDK cũng chạy tốt. mà tất cả các biến idata đó vần thay đổi được giá trị, vậy nó ở bộ nhớ ROM hay bộ nhớ RAM.
    Mong các bác chỉ giúp!
    Em xin cảm ơn!
    Các biến idata được lưu trữ trong bộ nhớ truy xuất gián tiếp
    http://www.keil.com/support/man/docs...1_le_idata.htm

    static unsigned char / unsigned char / char khi được lưu trên bộ nhớ không khác gì nhau cả, nhưng cách dùng thì sẽ khác nhau.
    nếu để unsigned thì khi cộng trừ, compiler sẽ xử lý số đó như là số không dấu
    static thì mình ko nhớ

    Comment

    • bluechip
      Thành viên chính thức
      • Oct 2007
      • 85

      #3
      Bạn cẩn thận IDATA nếu khai báo nhiều quá nó cũng không báo lỗi hay cảnh báo gì hết nhưng khi lưu trữ thì dữ liệu lưu không được đâu, bạn nên kểm tra kỹ, mô phỏng lại xem các vùng nhớ thế nào, chứ IDATA lưu trên RAM nội mà ram nội của 8051 chỉ có 128 byte thôi.
      Kiểu khai Static chỉ cho xử dụng trong file đó thôi chứ không cho liên kết qua các file khác bằng từ khóa extern được.
      vài lời cùng bạn không biết có đúng không nữa ai thấy sai sửa dùm nha!!!

      Comment

      • dungimi43
        Thành viên chính thức
        • Aug 2007
        • 64

        #4
        IDATA là 128 byte cao của RAM dòng 8051
        89C51 chỉ có 128 byte RAM, do đó IDATA không có tác dụng
        89C52, 89C55, 89S52 là có 256 byte RAM nên mới dùng được IDATA

        nếu dùng KeilC, khi dịch code ra file .HEX nó sẽ báo RAM cao, RAM thấp, RAM ngoài đã dùng hết bao nhiêu byte

        cách khai báo như bình thường thôi
        ví dụ: a là biến cần khai báo trong RAM

        unsigned char a; //biến a nằm ở 128 byte RAM thấp
        unsigned char IDATA a; //biến a nằm trong 128 byte cao
        unsigned char XDATA a; //biến a nằm ở RAM ngoài

        Comment

        • bockhoi
          Thành viên mới
          • Nov 2007
          • 13

          #5
          Cam on cac bac ! em da hieu.

          Comment

          • anhhnt
            Thành viên chính thức
            • Nov 2008
            • 88

            #6
            còn rất nhiều cách khai báo nữa,ví dụ khai báo có thêm từ khóa code, thì dữ liệu sẽ đc lưu trữ ở bộ nhớ chương trình, lưu được rất nhiều giá trị

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...