查看: 5019|回复: 7

[其他] 再问prm文件设置

[复制链接]

该用户从未签到

8

主题

49

帖子

0

新手上路

Rank: 1

积分
187
最后登录
1970-1-1
发表于 2012-8-13 12:02:07 | 显示全部楼层 |阅读模式
网上已有很多关于prm文件设置的介绍,但似乎很多说的都是大同小异,没有找到能解决我问题的。
我使用codewarrior6.3开发MC9S08MM128,目前代码量已接近64K,请问应如何正确设置工程里的 .prm文件?原来未使用USB_CDC功能时,我的设置是可以正确运行的,现在增加了USB_CDC,代码量大了差不多10K,不想改动官方的USB_CDC,但不知如何设置.prm文件了。如果代码超过64K呢?是否应在建立工程时选择代码模式为Banked的呢?但我试过了,编译能通过,但运行不了,不知是哪里不对。以下分别为建立工程时选择Small模式,Banked模式与我未增加USB_CDC前修改的.prm文件不同之处。
 
Small模式(默认):
/* This is a linker parameter file for the mc9s08mm128 */
NAMES END /* CodeWarrior will pass all the needed files to the linker by command line. But here you may add your own files too. */
SEGMENTS /* Here all RAM/ROM areas of the device are listed. Used in PLACEMENT below. */
    Z_RAM                    =  READ_WRITE   0x00B0 TO 0x00FF;
    RAM                      =  READ_WRITE   0x0100 TO 0x17FF;
    RAM1                     =  READ_WRITE   0x1920 TO 0x1A1F;
    RAM2                     =  READ_WRITE   0x1A20 TO 0x30AF;
    /* unbanked FLASH ROM */
    ROM                      =  READ_ONLY    0xC000 TO 0xFF9D;
    ROM1                     =  READ_ONLY    0x40B2 TO 0x7FFF;
 /* INTVECTS                 =  READ_ONLY    0xFF9E TO 0xFFFF; Reserved for Interrupt Vectors */
    /* banked FLASH ROM */
    PPAGE_0                  =  READ_ONLY    0x008000 TO 0x008FFF;
    PPAGE_0_1                =  READ_ONLY    0x009000 TO 0x00BFFF;
    PPAGE_1                  =  READ_ONLY    0x018000 TO 0x0180B1;
    PPAGE_2                  =  READ_ONLY    0x028000 TO 0x02BFFF;
    PPAGE_4                  =  READ_ONLY    0x048000 TO 0x04BFFF;
    PPAGE_5                  =  READ_ONLY    0x058000 TO 0x05BFFF;
    PPAGE_6                  =  READ_ONLY    0x068000 TO 0x06BFFF;
    PPAGE_7                  =  READ_ONLY    0x078000 TO 0x07BFFF;
 /* PPAGE_1_0                =  READ_ONLY    0x0180B2 TO 0x01BFFF; PAGE already contained in segment at 0x40B2-0x7FFF */
 /* PPAGE_3                  =  READ_ONLY    0x038000 TO 0x03BFFF; PAGE already contained in segment at 0xC000-0xFFFF */
END
PLACEMENT /* Here all predefined and user segments are placed into the SEGMENTS defined above. */
    DEFAULT_RAM,                        /* non-zero page variables */
                                        INTO  RAM,RAM1,RAM2;
    _PRESTART,                          /* startup code */
    STARTUP,                            /* startup data structures */
    ROM_VAR,                            /* constant variables */
    STRINGS,                            /* string literals */
    VIRTUAL_TABLE_SEGMENT,              /* C++ virtual table segment */
    NON_BANKED,                         /* runtime routines which must not be banked */
    DEFAULT_ROM,
    COPY
                                /* copy down information: how to initialize variables */
                                        INTO  ROM; /* ,ROM1: To use "ROM1" as well, pass the option -OnB=b to the compiler */
    PAGED_ROM                           /* routines which can be banked */
                                        INTO  PPAGE_0_1,PPAGE_1,PPAGE_2,PPAGE_4,PPAGE_5,PPAGE_6,PPAGE_7,ROM1,PPAGE_0;
    _DATA_ZEROPAGE,                     /* zero page variables */
    MY_ZEROPAGE                         INTO  Z_RAM;
END
STACKSIZE 0x200
VECTOR 0 _Startup /* Reset vector: this is the default entry point for an application. */
CHECKSUM
    CHECKSUM_ENTRY
        METHOD_CRC_CCITT
        INIT    0x8D9D
        OF      READ_ONLY   0x009000 TO 0x00BFFF
        OF      READ_ONLY   0x018000 TO 0x0180B1
        OF      READ_ONLY   0x040B2 TO 0x07FFF
        OF      READ_ONLY   0x028000 TO 0x02BFFF
        OF      READ_ONLY   0x0C000 TO 0x0FF73
        OF      READ_ONLY   0x0FF80 TO 0x0FF9F
        OF      READ_ONLY   0x0FFC0 TO 0x0FFFF
        OF      READ_ONLY   0x048000 TO 0x04BFFF
        OF      READ_ONLY   0x058000 TO 0x05BFFF
        OF      READ_ONLY   0x068000 TO 0x06BFFF
        OF      READ_ONLY   0x078000 TO 0x07BFFF
        INTO    READ_ONLY   0xFFB8 SIZE 2
        UNDEFINED 0xff
    END
END
 
 
Banked模式:
    NON_BANKED,                         /* runtime routines which must not be banked */
    
    COPY                               
/* copy down information: how to initialize variables */
                                        INTO  ROM; /* ,ROM1: To use "ROM1" as well, pass the option -OnB=b to the compiler */
    DEFAULT_ROM, PAGED_ROM              /* routines which can be banked */
                                        INTO  PPAGE_0_1,PPAGE_1,PPAGE_2,PPAGE_4,PPAGE_5,PPAGE_6,PPAGE_7,ROM1,PPAGE_0;

 
未增加USB_CDC前修改的.prm文件:
    DEFAULT_ROM,
    COPY                                /* copy down information: how to initialize variables */
                                        INTO  ROM; /* ,ROM1: To use "ROM1" as well, pass the option -OnB=b to the compiler */
    PAGED_ROM                            /* routines which can be banked */
                                        INTO  PPAGE_0,PPAGE_0_1,PPAGE_1,PPAGE_4,PPAGE_5,PPAGE_6,PPAGE_7;  //修改了这部分,同时增加了以下说明部分
//********************修改了这部分20120619*************************************// 
    MY_ROM                              INTO  ROM1,PPAGE_2;
//可能是因软件是限制版,只支持到64K,所以MY_ROM4~MY_ROM7还不能使用//
//*************TNND的折腾了我那么久,网上的都行不能通,不知怎回事!!!***************//   

    _DATA_ZEROPAGE,                     /* zero page variables */
    MY_ZEROPAGE                         INTO  Z_RAM;
END
STACKSIZE 0x300                         //修改了堆栈大小,由原来的200改成300
 
同时,蓝色标注部分我还未真正了解,编译器里是有一项关于这个-OnB的“Disable Branch Optimizer”,默认是不打钩的,是打还是不该打?
我知道答案 目前已有7人回答
回复

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-8-13 14:42:35 | 显示全部楼层

    RE:再问prm文件设置

    我理解的是,蓝色部分是用来选择试用那个ROM区域.你的空间不够用,首选要确定你使用的芯片ROM是多大的,然后根据你的ROM范围来修改下面2个地址范围.如果用的是ROM,就将ROM的空间调大.
    ROM                      =  READ_ONLY    0xC000 TO 0xFF9D;
    ROM1                     =  READ_ONLY    0x40B2 TO 0x7FFF;
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    49

    帖子

    0

    新手上路

    Rank: 1

    积分
    187
    最后登录
    1970-1-1
     楼主| 发表于 2012-8-13 15:44:43 | 显示全部楼层

    回复:再问prm文件设置

    回复第 2 楼 于2012-08-13 14:42:35发表:
    我理解的是,蓝色部分是用来选择试用那个ROM区域.你的空间不够用,首选要确定你使用的芯片ROM是多大的,然后根据你的ROM范围来修改下面2个地址范围.如果用的是ROM,就将ROM的空间调大.
    ROM = READ_ONLY 0xC000 TO 0xFF9D;
    ROM1 = READ_ONLY 0x40B2 TO 0x7FFF;
     

    没有看明白你的话。ROM与ROM1两块区域地址并没有连续,两块区域都已经很接近16K了,还能调大吗?(这个芯片的全部ROM是128K的)    另外,工程里自动生成的一个文件ansiis.lib,编译后有12.4K左右,这个是不是也会占用默认的ROM?如果是这样,那是不是说默认设置的ROM全部16K只能有几K是能给用户使用的? 对飞freescal的内存管理表示很难理解,为何这些还要用户手动设置?何况这方面的介绍资料似乎并不多。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-8-13 15:55:21 | 显示全部楼层

    RE:再问prm文件设置

    ansiis.lib不占用空间,有的芯片是2个ROM,这个在你建立工程的时候,你应该选择128K的芯片,这个会自动变大.如果您对这个还有不理解的,您可以到CE的HELP帮助里面查找READ_ONLY,双击第一个READ_ONLY,选择第4个选项,您可以看到关于ROM和其他空间在这里的使用说明.
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    49

    帖子

    0

    新手上路

    Rank: 1

    积分
    187
    最后登录
    1970-1-1
     楼主| 发表于 2012-8-13 16:46:04 | 显示全部楼层

    回复:再问prm文件设置

    谢谢 安!我会看下。但刚才飞思卡尔的技术支持来信说超过32K的代码一定要用Banked模式的,不知是不是他写错,应该是64K吧? 我都再试下。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    49

    帖子

    0

    新手上路

    Rank: 1

    积分
    187
    最后登录
    1970-1-1
     楼主| 发表于 2012-8-20 10:08:32 | 显示全部楼层

    回复:再问prm文件设置

    这个问题已经解决了,是使用Banked模式。之前使用过不对是因为当时的中断入口设置不对。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    7

    帖子

    0

    新手上路

    Rank: 1

    积分
    17
    最后登录
    1970-1-1
    发表于 2014-12-30 11:03:33 | 显示全部楼层
    安 发表于 2012-8-13 15:55
    ansiis.lib不占用空间,有的芯片是2个ROM,这个在你建立工程的时候,你应该选择128K的芯片,这个会自动变大.如 ...

    ansiis.lib 占用RAM空间吗?最近用MC9S08DZ60跑了下ucos
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2014-12-31 11:11:14 | 显示全部楼层
    likai0923 发表于 2014-12-30 11:03
    ansiis.lib 占用RAM空间吗?最近用MC9S08DZ60跑了下ucos

    ansiis.lib不占用RAM空间,但会占用一部分ROM空间。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-23 05:08 , Processed in 0.102390 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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