楼主: ssclark

HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

[复制链接]

该用户从未签到

3

主题

12

帖子

0

新手上路

Rank: 1

积分
26
最后登录
1970-1-1
发表于 2012-1-11 15:31:56 | 显示全部楼层 |阅读模式
HCS08系列
MC9S08AC32单片机
CodeWarrior IDE
这片子的RAM地址是0070-086F,在建立工程后(工程项目是C和汇编混合的),在MC9S08AC32.inc文件里可以看到如下定义:
ROMStart:                equ   $00008000  
ROMEnd:                   equ   $0000FFAF
Z_RAMStart:          equ   $00000070
Z_RAMEnd:             equ   $000000FF
RAMStart:                 equ   $00000100
RAMEnd:                    equ   $0000086F
ROM1Start:             equ   $0000FFC0
ROM1End:                equ   $0000FFC5
........................
小弟有几个问题一直搞不懂,故发帖来请教大家了:
1、从这个定义可以看到RAM区被分成了两个区域(0070-00FF,0100-086F),请问高手指点下这两个区域有什么区别????
2、如果在汇编里用 DS 来申请变量的话,如果不加ORG标明地址的话,默认是从哪个地址申请的?0070?0100?
3、SECTION    SHORT   是什么用处啊?用来做什么的呢??
如果看到此帖的大侠们,知道的话希望能指点一下,先表示感谢了,谢谢啊~~~
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-1-11 17:28:46 | 显示全部楼层

    RE:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    1、有一个RAM空间是用来存放寄存器等数据的,另外一个是用来存放常量等数据。
    2、从0x100,第一个是不允许用户使用的。
    3、这个具体功能,你可以到帮助里面搜索一下。是用来定义空间的。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    23

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    1970-1-1
    发表于 2012-1-11 20:20:07 | 显示全部楼层

    回复:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

     
                                        1、从这个定义可以看到RAM区被分成了两个区域(0070-00FF,0100-086F),请问高手指点下这两个区域有什么区别????
                 
                答:0x0070 - 0x00FF只需要8-bit地址寻址,也就是Short类型,需要的指令更短。一般用于堆空间,作为变量定义使用。0x100-0x086F需要16-bit地址寻址,需要更长的指令来访问,高地址部份一般用来做栈空间。C的变量一般缺省放在0x0100以上的空间,如果需要定义在0xFF或更低的地址可以使用2种方式: 1)使用#program来由编译器分配空间,2)使用@0xXX来固定分配,如unsigned char data@0xF0;(一般不提倡,除非开发者自己能够保证不会和别的空间冲突)。
                 
                2、如果在汇编里用 DS 来申请变量的话,如果不加ORG标明地址的话,默认是从哪个地址申请的?0070?0100?
                 
                答:缺省状态下使用DEFAULT_RAM,即从0x100开始。如果有需要可以使用_DATA_ZEROPAGE,MY_ZEROPAGE或者Z_RAM来指定使用0x00~0xFF之间的空间。可以参考PRM文件的使用。
                 
                3、SECTION    SHORT   是什么用处啊?用来做什么的呢??
                 
                答:见1的回答,用于访问0x00~0xFF空间,用于快速的变量访问。
                 
                如果看到此帖的大侠们,知道的话希望能指点一下,先表示感谢了,谢谢啊~~~
                
                
                
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    1970-1-1
     楼主| 发表于 2012-1-12 10:35:16 | 显示全部楼层

    回复:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    回复第 3 楼 于2012-01-11 12:20:07发表:
     非常感谢您的回复,仔细看了下.prm文件,虽然还不能完全看懂里面的东西,但是至少知道了这个文件涉及了
    一些RAM和ROM地址分配的一些东西,非常感谢,目前通过修改.prm文件把遇到的问题解决了~~
    之前在工程里搜索 MY_ZEROPAGE 等关键字,总是找不到.prm文件里的东西,虽然能找到的话,可能不会搞
    这么久了,非常感谢这位大侠出手相助。谢谢~~~
    如果有相关文档来说明.prm文件的使用方法就好了~~~
     
                                        1、从这个定义可以看到RAM区被分成了两个区域(0070-00FF,0100-086F),请问高手指点下这两个区域有什么区别????
                 
                答:0x0070 - 0x00FF只需要8-bit地址寻址,也就是Short类型,需要的指令更短。一般用于堆空间,作为变量定义使用。0x100-0x086F需要16-bit地址寻址,需要更长的指令来访问,高地址部份一般用来做栈空间。C的变量一般缺省放在0x0100以上的空间,如果需要定义在0xFF或更低的地址可以使用2种方式: 1)使用#program来由编译器分配空间,2)使用@0xXX来固定分配,如unsigned char data@0xF0;(一般不提倡,除非开发者自己能够保证不会和别的空间冲突)。
                 
                2、如果在汇编里用 DS 来申请变量的话,如果不加ORG标明地址的话,默认是从哪个地址申请的?0070?0100?
                 
                答:缺省状态下使用DEFAULT_RAM,即从0x100开始。如果有需要可以使用_DATA_ZEROPAGE,MY_ZEROPAGE或者Z_RAM来指定使用0x00~0xFF之间的空间。可以参考PRM文件的使用。
                 
                3、SECTION    SHORT   是什么用处啊?用来做什么的呢??
                 
                答:见1的回答,用于访问0x00~0xFF空间,用于快速的变量访问。
                 
                如果看到此帖的大侠们,知道的话希望能指点一下,先表示感谢了,谢谢啊~~~
                
                
                
     
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    1970-1-1
     楼主| 发表于 2012-1-12 10:36:34 | 显示全部楼层

    回复:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    回复第 2 楼 于2012-01-11 09:28:46发表:
     
    谢谢您的回复,三楼说得更详细一些,哈哈,非常感谢~~~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-9-14 09:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    70

    主题

    329

    帖子

    0

    高级会员

    Rank: 4

    积分
    952
    最后登录
    2021-1-4
    发表于 2012-1-12 10:56:43 | 显示全部楼层

    RE:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    1、从这个定义可以看到RAM区被分成了两个区域(0070-00FF,0100-086F),请问高手指点下这两个区域有什么区别????
    freescale的S08系列是SFR/RAM/ROM统一编制的,很多SFR都定义到了0-0x100以内,这部分的空间已经很小了而且可能不连续,最好不要用。当然你可以用这个地方的RAM,使用这片RAM区域的程序执行速度快,空间占用少。有的类型的芯片SFR/RAM/ROM不是统一编址,你可以充分利用这里的RAM改善程序的速度或所占空间。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    12

    帖子

    0

    新手上路

    Rank: 1

    积分
    26
    最后登录
    1970-1-1
     楼主| 发表于 2012-1-12 12:15:24 | 显示全部楼层

    回复:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    回复第 6 楼 于2012-01-12 02:56:43发表:

    谢谢哈~~
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    23

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    1970-1-1
    发表于 2012-1-13 11:42:25 | 显示全部楼层

    回复:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    回复第 6 楼 于2012-01-12 02:56:43发表:
    1、从这个定义可以看到RAM区被分成了两个区域(0070-00FF,0100-086F),请问高手指点下这两个区域有什么区别????
    freescale的S08系列是SFR/RAM/ROM统一编制的,很多SFR都定义到了0-0x100以内,这部分的空间已经很小了而且可能不连续,最好不要用。当然你可以用这个地方的RAM,使用这片RAM区域的程序执行速度快,空间占用少。有的类型的芯片SFR/RAM/ROM不是统一编址,你可以充分利用这里的RAM改善程序的速度或所占空间。
     
    没看明白什么叫统一编址,哪个S08器件的地址不连续了?
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-9-14 09:26
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    70

    主题

    329

    帖子

    0

    高级会员

    Rank: 4

    积分
    952
    最后登录
    2021-1-4
    发表于 2012-1-13 14:01:29 | 显示全部楼层

    RE:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    哪个S08器件的地址不连续了?
    很多SFR的保留地址其实是可以用的,这些地址不连续,如果在这些地址定义一些变量就比较麻烦,如定义unsigned long.
    没看明白什么叫统一编址?
    freescale 的s08和51,microchip的16f/18f的地址分配一样吗?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    23

    帖子

    0

    新手上路

    Rank: 1

    积分
    43
    最后登录
    1970-1-1
    发表于 2012-1-13 14:12:12 | 显示全部楼层

    RE:HCS08(MC9S08AC32单片机)C语言和汇编混合时RAM里变量申请问题

    [很多SFR的保留地址其实是可以用的,这些地址不连续,如果在这些地址定义一些变量就比较麻烦,如定义unsigned long.]
    所谓的变量实际是指用户变量,也就是只存放用户数据的,所以都放在RAM里头。S08里面一般头上有若干寄存器外,后面的都是大片连续RAM。因此,不会引起不良的麻烦。相反,放在高地址有一个坏处是空间有可能和栈内容发生冲突,因为S08的压栈之后的空间是向下走的。
    [freescale 的s08和51,microchip的16f/18f的地址分配一样吗?]
    显然不一样,严格意义上来将,不会有两个不同的处理器的地址分配是一样的。但是在一个体系架构里面,编址原则会相对固定,除非发生比较大的变革。S08的的编址是相对还是比较一致的。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-3 18:02 , Processed in 0.099301 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表