论坛

旧版:MiniIDE和HC9S12D64

开始于 warm38spl 2009年9月24日
我正在使用用HC11汇编器编写的旧程序并移植到 使用MiniIDE并使用TwinPeeks2.0作为监视器的HC9S12D64汇编器 at $F000-$FFFF.

该程序正在增长,我在Flash中需要额外的空间。我如何编程 并访问PPAGE = $ 3D?可以使用MiniIDE和TwinPeeks完成此操作吗?

当MiniIDE检测到FFFF以外的ORG语句时,它将开始生成S2记录 而不是S1记录。但是这样做的时候,页面变得混乱了:
3C:8000位于$ 0000
3D:8000定位在$ 4000
3E:8000(通常为4000美元)位于8000美元
3F:8000(通常为$ C000)停留在$ C000

TwinPeeks看到S2记录并将地址的第一个字节作为页面,但是 然后寻址变得非常奇怪,因为我对$ 4000-7FFF的所有访问权限 $ C000-DFFF在翻译中迷路了

然后是EEPROM争夺。 EEPROM代码现已编程为$ 0400 驻留在$ 8400,与放入$ 8400的代码(其中 是原本应该在$ 4400的价格)。

我是否需要将该程序分成多个文件,每个页面一个,一个 EEPROM,并通过TwinPeeks对它们进行编程?

我确实将启动代码和部分代码转换为ICC12 v7(标准, 最多可处理64K闪存),但我所花的几乎不占用全部闪存 而没有进入$ 3D页面,我还没有弄清楚该怎么做。所以 移至ICC则需要移至HC9S12D256芯片并升级至 更昂贵的ICC。哎呀,新董事会等等。

涉水

“ warm38spl”写道:

>我正在使用HC11编写的旧程序 汇编程序并移植到
>HC9S12D64汇编程序,使用MiniIDE并使用TwinPeeks2.0作为监视器
>居住在$ F000- $ FFFF。
>
>该程序正在增长,我在Flash中需要额外的空间。我如何编程
>和访问PPAGE = $ 3D?可以使用MiniIDE和TwinPeeks完成此操作吗?
>
>当MiniIDE检测到FFFF以外的ORG语句时,它将开始生成S2
>记录而不是S1记录。但是这样做时,页面会
> scrambled:
>3C:8000位于$ 0000

您是怎么发现的? D64在$ 0和$ 3FFF之间没有闪存。

>3D:8000定位在$ 4000
>3E:8000(通常为4000美元)位于8000美元
>3F:8000(通常为$ C000)停留在$ C000
>
>TwinPeeks看到S2记录,并将地址的第一个字节作为
>页,但随后的寻址变得很奇怪,因为我对
>$ 4000-7FFF和$ C000-DFFF在翻译中丢失
这个^^与TwinPEEKs手册有点相反:

“ S2记录根据飞思卡尔准则使用***线性***地址。
MC9S12D64的有效地址范围从0xF0000(0x3C *
16KB)并以0xFFFFF(0x40 * 16 KB-1)结尾。”

因此,最高顺序的S2地址字节不作为ppage。 Ppage值可以是
通过线性S2地址除以页面大小($ 4000)计算得出。

>
>然后是EEPROM争夺。 EEPROM代码编程为$ 0400
>现在的价格为$ 8400,与放入的代码冲突
>$ 8400(原价为$ 4400)。
>
>我是否需要将程序拆分为多个文件,每页一个
>一个用于EEPROM,并通过TwinPeeks对它们进行编程?

我猜MiniIDE会创建存储的S2记录(ppage +偏移量),而不是线性的
S2记录。您可能需要转换它们。 P&E Log2Phy实用程序可以做到。

>
>我确实将启动代码和部分代码转换为ICC12 v7
>(标准,最多可处理64K闪存),但我所花的几乎几乎
>无需进入页面$ 3D即可完成所有闪存操作,而且我还没有弄清楚如何
>做到这一点。因此,要迁移到ICC,就需要迁移到HC9S12D256芯片
>并升级到价格更高的ICC。哎呀,新董事会等等。
据我所知,ICC12 V7 STD处理无限量的非页面调度 memory
($ 0 .. $ FFFF)和最多64K的分页代码(在使用CALL可以调用的例程中为64K)
说明)。 STD应该处理所有可用的D64内存,甚至3/4的
D128闪光灯。
>
> 涉水

爱德华

---在6 ...中,《爱德华·卡皮兹》写道:
>
> “ warm38spl”写道:
>
> >我正在使用用HC11汇编器编写的旧程序并移植到
> >HC9S12D64汇编程序,使用MiniIDE并使用TwinPeeks2.0作为监视器
> >居住在$ F000- $ FFFF。
> >
> >该程序正在增长,我在Flash中需要额外的空间。我如何编程
> >和访问PPAGE = $ 3D?可以使用MiniIDE和TwinPeeks完成此操作吗?
> >
> >当MiniIDE检测到FFFF以外的ORG语句时,它将开始生成S2
> >记录而不是S1记录。但是这样做时,页面会
> > scrambled:
> >3C:8000位于$ 0000
>
>您是怎么发现的? D64在$ 0和$ 3FFF之间没有闪存。

#1经验。
---------------
在我的第一次尝试中,我将一小段代码放在$ FFFF之上。当我加载 S19文件(包含S2记录)没有显示“ ORG $ 8000”的代码。 “ ORG $ C000”的代码显示为$ C000。出现“ ORG $ 4000”的代码 在$ 8000。我在任何地方都找不到3D代码。

#2文档S12FTS64KV1 / D pdf文件第18页表3-2内存映射摘要“块 相对地址”与我在看到S2记录时看到的内容一致 与TwinPeeks一起使用以加载S2记录。

MCU PPage Block Rel
$ 4000 3E $ 8000(ouch)
$ 8000 3C $ 0000(哎呀)
3D $ 4000(哎呀)
$ C000 3F $ C000

因此,无论我尝试在我的asm文件,汇编器和S2中设置什么地址, 对TwinPeeks的影响使地址混乱。

为了使TwinPeeks放置在正确的位置,我必须使用

$ 4000 = ORG $ xx8000
$ 8000 = ORG $ xx0000
3D = ORG $ xx04000
$ C000 = ORG $ xxC000

我没有注意到在ORG中用什么代替“ $ xx” 语句,因为它是确定我设置时是否显示的最后4个 PPAGE。现在,这真的搞砸了我去哪里调用函数ar访问 constant. :-b

哦,MiniIDE会发出300多个警告,表明3字节地址已被截断 到两个字节的地址。 (但位置错误)。

> >3D:8000定位在$ 4000
> >3E:8000(通常为4000美元)位于8000美元
> >3F:8000(通常为$ C000)停留在$ C000
> >
> >TwinPeeks看到S2记录,并将地址的第一个字节作为
> >页,但随后的寻址变得很奇怪,因为我对
> >$ 4000-7FFF和$ C000-DFFF在翻译中丢失
>这个^^与TwinPEEKs手册有点相反:
>
>“ S2记录根据飞思卡尔准则使用***线性***地址。
>MC9S12D64的有效地址范围从0xF0000(0x3C *
>16KB)并以0xFFFFF(0x40 * 16 KB-1)结尾。”
>
>因此,最高顺序的S2地址字节不作为ppage。 Ppage值可以是
>通过线性S2地址除以页面大小($ 4000)计算得出。

在跟踪TwinPeeks源代码清单时,我发现它只是 忽略了地址的第一个字节,即与MiniIDE一样的截断,但是在 至少它显示了我期望的位置-现在只有所有参考 scrambled.

> >
> >然后是EEPROM争夺。 EEPROM代码编程为$ 0400
> >现在的价格为$ 8400,与放入的代码冲突
> >$ 8400(原价为$ 4400)。
> >
> >我是否需要将程序拆分为多个文件,每页一个
> >一个用于EEPROM,并通过TwinPeeks对它们进行编程?
>
>我猜MiniIDE会创建存储的S2记录(ppage +偏移量),而不是线性的
>S2记录。您可能需要转换它们。 P&E Log2Phy实用程序可以做到。

MiniIDE为EEPROM生成S214000400 ...记录。但是TwinPeeks是 一位抱怨已经编程了$ 8400。告诉我000400 转换为008400,该文件也支持S12FTS64KV1 / D pdf文件。 :-b

是P&电子工具可下载并免费?我工作的公司有一家 CyclonePro,但我没有。

> >
> >我确实将启动代码和部分代码转换为ICC12 v7
> >(标准,最多可处理64K闪存),但我所花的几乎几乎
> >无需进入页面$ 3D即可完成所有闪存操作,而且我还没有弄清楚如何
> >做到这一点。因此,要迁移到ICC,就需要迁移到HC9S12D256芯片
> >并升级到价格更高的ICC。哎呀,新董事会等等。
>据我所知,ICC12 V7 STD处理无限量的非分页内存
>($ 0 .. $ FFFF)和最多64K的分页代码(在使用CALL可以调用的例程中为64K)
>
> D128闪光灯。

现在,如果我只知道如何在ICC中执行分页的内容,那我就定了。 :-)
我使用$ 4000- $ DFFF没问题,但是不涉及分页。
对如何在ICC中执行分页代码来解决我的问题有任何建议?

> >
> > 涉水
> >
> > 爱德华
>

“ warm38spl”写道:

>---在6 ...中,《爱德华·卡皮兹》写道:
>>
>> “ warm38spl”写道:
>>
>> >我正在使用用HC11汇编器编写并移植的旧程序
>> >to
>> >HC9S12D64汇编程序,使用MiniIDE并使用TwinPeeks2.0作为监视器
>> >居住在$ F000- $ FFFF。
>> >
>> >该程序正在增长,我在Flash中需要额外的空间。我如何
>> > program
>> >和访问PPAGE = $ 3D?可以使用MiniIDE和
>> > TwinPeeks?
>> >
>> >当MiniIDE检测到FFFF以外的ORG语句时,它将开始生成S2
>> >记录而不是S1记录。但是这样做时,页面会
>> > scrambled:
>> >3C:8000位于$ 0000
>>
>>您是怎么发现的? D64在$ 0和$ 3FFF之间没有闪存。
>
> #1经验。
> ---------------
>在我的第一次尝试中,我将一小段代码放在$ FFFF之上。当我
>加载S19文件(充满S2记录)的代码“ ORG $ 8000”从不
>出现。 “ ORG $ C000”的代码显示为$ C000。的代码
>“ ORG $ 4000”出现在$ 8000。我在任何地方都找不到3D代码。
我没有尝试过S12 Elmicro / Elektronikladen板,但是没有尝试过MC912DG128。它也是 came
使用TwinPEEks。 S1记录直接转换为未分页的CPU内存。
线性S2记录转换为ppage + page窗口偏移量。你写
eeprom S记录下面的内容如下:

S214000400

=>PPAGE = 0,CPU地址8400。D64有4页,这意味着上面的PPAGE位
bit1-bit0位将被忽略。 PPAGE 0与PPAGE 3C相同。

现在,如果组织C000也被放置在错误的线性地址00C000上,则PPAGE将为3
(与3F相同),您将在C000看到您的代码。
4000-PPAGE 3D
0-第3C页
8000-第3E页

我认为您应该将地址从银行格式转换为线性格式,
或告诉MiniIDE不要产生S2记录。
>
>#2文档S12FTS64KV1 / D pdf文件第18页表3-2内存映射摘要
>“块相对地址”与我在S2时看到的内容一致
>记录与TwinPeeks一起使用以加载S2记录。
>
>MCU PPage Block Rel
>$ 4000 3E $ 8000(ouch)
>$ 8000 3C $ 0000(哎呀)
>3D $ 4000(哎呀)
> $ C000 3F $ C000
>
>因此,无论我尝试在asm文件,汇编器和
>S2对TwinPeeks的影响使地址混乱。
>
>为了使TwinPeeks放置在正确的位置,我必须使用
>
>$ 4000 = ORG $ xx8000
>$ 8000 = ORG $ xx0000
>3D = ORG $ xx04000
>$ C000 = ORG $ xxC000
>
>我没有注意到我将“ $ xx”放在
>ORG语句,因为它是最后四个确定出现的语句
>当我设置PPAGE时。现在那真的弄乱了我去调用函数的位置
>ar访问一个常量。 :-b
>
>哦,MiniIDE发出300多个警告,表明3字节地址是
>截断为两个字节的地址。 (但位置错误)。
>
>> >3D:8000定位在$ 4000
>> >3E:8000(通常为4000美元)位于8000美元
>> >3F:8000(通常为$ C000)停留在$ C000
>> >
>> >TwinPeeks看到S2记录,并将地址的第一个字节作为
>> >页面,但是寻址变得很奇怪,因为我所有的访问
>> > to
>> >$ 4000-7FFF和$ C000-DFFF在翻译中丢失
>>这个^^与TwinPEEKs手册有点相反:
>>
>>“ S2记录根据飞思卡尔使用***线性***地址
>> guidelines.
>>MC9S12D64的有效地址范围从0xF0000(0x3C *
>>16KB)并以0xFFFFF(0x40 * 16 KB-1)结尾。”
>>
>>因此,最高顺序的S2地址字节不作为ppage。 Ppage值可以是
>>通过线性S2地址除以页面大小($ 4000)计算得出。
>
>在跟踪TwinPeeks源代码清单时,我发现它只是
>忽略了地址的第一个字节,即像MiniIDE一样被截断,
>但至少它显示了我期望的位置-只是所有参考
> now 乱七八糟。
我对此表示怀疑。如果是S1,则可能并且应该“丢弃”最高位字节
记录。
>
>> >
>> >然后是EEPROM争夺。 EEPROM代码编程为
>> > $0400
>> >现在的价格为$ 8400,与放入的代码冲突
>> >$ 8400(原价为$ 4400)。
>> >
>> >我是否需要将程序分解为多个文件,每个文件一个
>> > page
>> >一个用于EEPROM,并通过TwinPeeks对它们进行编程?
>>
>>我猜MiniIDE会创建存储的S2记录(ppage +偏移量),而不是
>> linear
>>S2记录。您可能需要转换它们。 P&E Log2Phy实用程序可以做到。
>
>MiniIDE为EEPROM生成S214000400 ...记录。但是TwinPeeks是
>抱怨8400美元已经编程的人。那告诉我
>000400被转换为008400,这也支持
>S12FTS64KV1 / D pdf文件。 :-b
>
> 是P&电子工具可下载并免费?我工作的公司有一家
>CyclonePro,但我没有。

看看www.pemicro.com。应该是免费的
>
>> >
>> >我确实将启动代码和部分代码转换为ICC12 v7
>> >(标准,最多可处理64K闪存),但是我所花的很少
>> > almost
>> >全部闪存而没有进入页面$ 3D,我还没有弄清楚如何
>> > to
>> >做到这一点。因此,移至ICC将需要移至HC9S12D256
>> > chip
>> >并升级到价格更高的ICC。哎呀,新董事会等等。
>>据我所知,ICC12 V7 STD处理无限量的非页面调度
>> 记忆
>>($ 0 .. $ FFFF)和最多64K的分页代码(在使用
>> CALL
>>
>> D128闪光灯。
>
>

在编译器选项对话框中,选中“启用扩展内存”。同时检查制作
分页功能默认值。如果您不希望所有功能都被分页或
非分页的,要强制对特定功能进行分页/非分页,请使用编译指示,例如
这个:

#pragma paged_function foo1 // foo1()将被分页
foo1()
{
}

#pragma nonpaged_function foo2 // foo2()将被强制不分页
foo2()
{
}

>使用$ 4000- $ DFFF没有问题,但是没有 paging involved.
>对如何在ICC中执行分页代码来解决我的问题有任何建议?
>
>> >
>> > 涉水
>> >
>> >
>>
>> 爱德华
>>

爱德华

---在6 ...中,《爱德华·卡皮兹》写道:
>
> “ warm38spl”写道:
>
> >---在6 ...中,《爱德华·卡皮兹》写道:
> >>
> >> “ warm38spl”写道:
> >>
> >> >我正在使用用HC11汇编器编写并移植的旧程序
> >> >to
> >> >HC9S12D64汇编程序,使用MiniIDE并使用TwinPeeks2.0作为监视器
> >> >居住在$ F000- $ FFFF。
>
>我没有尝试过S12 Elmicro / Elektronikladen板,但是 MC912DG128。也来了

该公司购买了cards12 D64板,其CPU板基于该板 design.

>使用TwinPEEks。 S1记录直接翻译 到未分页的CPU内存。
>线性S2记录转换为ppage + page窗口偏移量。你写
>eeprom S记录下面的内容如下:
>
> S214000400
>
> =>PPAGE = 0,CPU地址8400。D64有4页,这意味着上面的PPAGE位
>bit1-bit0位将被忽略。 PPAGE 0与PPAGE 3C相同。
>
>现在,如果组织C000也被放置在错误的线性地址00C000上,则PPAGE将为3
>(与3F相同),您将在C000看到您的代码。
> 4000-PPAGE 3D
> 0-第3C页
> 8000-第3E页
>
>我认为您应该将地址从银行格式转换为线性格式,
>或告诉MiniIDE不要产生S2记录。

行。综上所述,我尝试了一些实验,然后开始工作:

步骤1:
设置为“正常” $ 4000-DFFF
将3D代码放在末尾,然后输入“ ORG $ 8000”
在ASM12的命令行上杀死“ -page”
编译它
第2步:
用第二个$ 8000除去代码末尾
使用TwinPeeks加载该代码(Y命令; X命令; L命令)
验证是否存在3C代码(以及$ 4000和$ C000)并且3D为空
P 3D
D 8000(全为“ FF FF ...”)
P 3C
D 8000(请参阅代码)
D 4000(请参阅代码)
D C000(请参阅代码)
D 0400(请参阅EEPROM)
第三步:
将3D代码更改为“ ORG $ 4000”
将“ -page”放在ASM12的命令行上
编译它
步骤4:
删除第一行和最后一行开始之间的所有内容 以S214xx4000XXXXX开头的代码(与xx中的内容无关,因为 4000决定了它的去向)
搜索该S19文件(仅使用L命令)

TwinPeeks现在出现提示“ 00>S2记录加载后
输入“ P 3C”和“ D 8000”,然后输入正确的代码
输入“ P 3D”和“ D 8000”,然后输入正确的代码

TwinPeeks做了我想做的事。 TwinPeeks不在乎什么是“页面” 在S2中。根据S12FTS64KV1 / D,它仅查看“块相对地址” pdf file page 18.
BTW,我为之工作的公司授权TwinPeeks来源。他做了很多工作 在那个显示器上。该公司仅对该代码做了非常小的修改 for their use.

我曾经尝试过3D8000,它说8000已经被编程(通过 seen in $4000/PPage>)。如果我删除S1134000的S1记录... S2143D8000记录加载正常,但是位置错误。

好吧,无论如何,爱德华,您已经帮助我完成了我需要完成的工作 使用并将HC12 asm代码加载到Page 3D中。

谢谢!如果您不理我,我真的做不到 和逻辑。您让我寻找/思考了除我狭narrow之外的其他可能性, 沮丧的看法(“一定要这样!”)。
> >#2文档S12FTS64KV1 / D pdf文件第18页表 3-2内存映射摘要

> >
> >在跟踪TwinPeeks源代码清单时,我发现它只是
> >忽略了地址的第一个字节,即像MiniIDE一样被截断,
> >但至少它显示了我期望的位置-只是所有参考
> > now 乱七八糟。
>我对此表示怀疑。如果是S1,则可能并且应该“丢弃”最高位字节
> 记录。
> >
> >> >
> >> >然后是EEPROM争夺。 EEPROM代码编程为
> >> > $0400
> >> >现在的价格为$ 8400,与放入的代码冲突
> >> >$ 8400(原价为$ 4400)。
> >> >
> >> >我是否需要将程序分解为多个文件,每个文件一个
> >> > page
> >> >一个用于EEPROM,并通过TwinPeeks对它们进行编程?
> >>
> >>我猜MiniIDE会创建存储的S2记录(ppage +偏移量),而不是
> >> linear
> >>S2记录。您可能需要转换它们。 P&E Log2Phy实用程序可以做到。
> >
> >MiniIDE为EEPROM生成S214000400 ...记录。但是TwinPeeks是
> >抱怨8400美元已经编程的人。那告诉我
> >000400被转换为008400,这也支持
> >S12FTS64KV1 / D pdf文件。 :-b
> >
> > 是P&电子工具可下载并免费?我工作的公司有一家
> >CyclonePro,但我没有。
>
>看看www.pemicro.com。应该是免费的

我将。谢谢。

> >> >我确实转换了启动代码和 the code to ICC12 v7
> >> >(标准,最多可处理64K闪存),但是我所花的很少
> >> > almost
> >> >全部闪存而没有进入页面$ 3D,我还没有弄清楚如何
> >> > to
> >> >做到这一点。因此,移至ICC将需要移至HC9S12D256
> >> > chip
> >> >并升级到价格更高的ICC。哎呀,新董事会等等。
> >>
> >>
> >>据我所知,ICC12 V7 STD处理无限量的非页面调度
> >> 记忆
> >>($ 0 .. $ FFFF)和最多64K的分页代码(在使用
> >> CALL
> >>说明)。 STD应该处理所有可用的D64内存,甚至是3/4 of
> >> D128闪光灯。
> >
> >
>
>在编译器选项对话框中,选中“启用扩展内存”。同时检查制作
>分页功能默认值。如果您不希望所有功能都被分页或
>非分页的,要强制对特定功能进行分页/非分页,请使用编译指示,例如
> 这个:
>
>#pragma paged_function foo1 // foo1()将被分页
> foo1()
> {
> }
>
>#pragma nonpaged_function foo2 // foo2()将被强制不分页
> foo2()
> {
> }

现在,它已作为文本文件保存在我的ICC12v7目录中,我将以 我的ASM资料运行正常后...

爱德华,你是一个极好的资源。谢谢!

> >使用$ 4000- $ DFFF没有问题,但是没有 paging involved.
> >对如何在ICC中执行分页代码来解决我的问题有任何建议?
> >
> >> >
> >> > 涉水
> >> >
> >> >
> >>
> >> 爱德华
> >> 爱德华
>

此说明并不能直接帮助解决此问题,但可以为您提供一些帮助 背景和文字来描述寻址。

当EEPROMS和闪存与68HC12A4放在不同的芯片中时, 程序文件是为分别对 separate EEPROM.

为此,他们需要在之后使用外部EEPROM的寻址。 通过HC12内存控制进行翻译。此寻址称为“物理” 这就是您要报告的内容。

当带有机载闪光灯的HC12零件到达时,此寻址继续 用于较新的零件。

最终,编译器和Flash编程方法结合在一起 页寄存器值与普通HC12使用的16位地址的比较 说明。由于历史上丢失的原因,此寻址称为“线性”或 各种文档中的“逻辑”。

(我不能为任何一个名称辩护,但名称就是文档中的名称。它 并非完全线性,其中有大孔,并且出现了一些闪光位置 在两个不同的地址。对于某人来说,这可能是“合乎逻辑的”,但似乎 产生一些非常违反直觉的结果。)

为了解决这个问题,最新的部分采用了“全局”地址, 但是,MC9S12X *中“全局”寻址的定义非常不同 零件和MC9S12P128。

史蒂夫

---在6 ...中,“ warm38spl”写道:
>
>我正在使用用HC11汇编器编写的旧程序并移植到 使用MiniIDE并使用TwinPeeks2.0作为监视器的HC9S12D64汇编器 at $F000-$FFFF.
>
>该程序正在增长,我在Flash中需要额外的空间。我如何编程 并访问PPAGE = $ 3D?可以使用MiniIDE和TwinPeeks完成此操作吗?
>
>当MiniIDE检测到FFFF以外的ORG语句时,它将开始生成S2记录 而不是S1记录。但是这样做的时候,页面变得混乱了:
>3C:8000位于$ 0000
>3D:8000定位在$ 4000
>3E:8000(通常为4000美元)位于8000美元
>3F:8000(通常为$ C000)停留在$ C000
>
>TwinPeeks看到S2记录,并将地址的第一个字节作为页面, 但是寻址变得很奇怪,因为我所有对$ 4000-7FFF的访问 和$ C000-DFFF在翻译中迷路了
>
>然后是EEPROM争夺。 EEPROM代码现已编程为$ 0400 驻留在$ 8400,与放入$ 8400的代码(其中 是原本应该在$ 4400的价格)。
>
>我是否需要将该程序分成多个文件,每个页面一个, 一个用于EEPROM,并通过TwinPeeks对其进行编程?
>
>我确实将启动代码和部分代码转换为ICC12 v7(标准, 最多可处理64K闪存),但我所花的几乎不占用全部闪存 而没有进入$ 3D页面,我还没有弄清楚该怎么做。所以 移至ICC则需要移至HC9S12D256芯片并升级至 更昂贵的ICC。哎呀,新董事会等等。
>
> 涉水
>