板级支持包BSP之 mdesc->map_io()

本文详细介绍了SMDK2410板级支持包中的核心函数smdk2410_map_io的工作原理,以及它是如何通过调用s3c24xx_init_io和iotable_init等函数来实现从虚拟地址到物理地址的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

paging_init -->mdesc->map_io() 之回调函数(面向对象思想应用!!!)

[关于S3C2410板级支持包的内容将在讨论完虚拟内存后补上]

MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch
                    * to SMDK2410 */
    /* Maintainer: Jonas Dietsche */
    .phys_ram    = S3C2410_SDRAM_PA,
    .phys_io    = S3C2410_PA_UART,
    .io_pg_offst    = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
    .boot_params    = S3C2410_SDRAM_PA + 0x100,
    .map_io        = smdk2410_map_io,
    .init_irq    = smdk2410_init_irq,
    .timer        = &s3c24xx_timer,
    .init_machine    = smdk2410_init_lcd,
MACHINE_END

smdk2410_map_io -->s3c24xx_init_io -->iotable_init -->create_mapping

最终调用create_mapping 在页目录表中创建从虚拟地址到物理地址的映射,其它的映射与此相似。

/* Copyright (c) 2019 PTC Inc. and/or Its Subsidiary Companies. All Rights Reserved. */ /* This example will demonstrate basic operations using Assembly Item/Flexible Components. */ #include <pfcSession.h> #include <pfcModel.h> #include <ciplib.h> #include <pfcGlobal.h> #include <wfcSolid.h> #include <wfcPart.h> #include <wfcAssembly.h> #include <wfcComponentFeat.h> #include <wfcFeature.h> #include <pfcExceptions.h> #include <OTKXUtils.h> #include <OTKXAssemblyItemUtils.h> #include <fstream> /* --------------------------------------------------- * ASSEMBLY STRUCTURE USED FOR THE EXAMPLE * --------------------------------------------------- --------- ------- FEAT ID FEAT # --------- ------- FLEX_TOP_ASM.asm | |---ASM_RIGHT 1 1 |---ASM_TOP 3 2 |---ASM_FRONT 5 3 |---ASM_DEF_CSYS 7 4 | |===FLEX_PART2.prt 39 5 | |===FLEX_SUB_ASM1.asm 42 6 | |---ASM_RIGHT 1 1 |---ASM_TOP 3 2 |---ASM_FRONT 5 3 |---ASM_DEF_CSYS 7 4 | |===FLEX_PART1.prt 39 5 | |===FLEX_SUB_ASM2.asm 40 6 | |---ASM_RIGHT 1 1 |---ASM_TOP 3 2 |---ASM_FRONT 5 3 |---ASM_DEF_CSYS 7 4 | |===FLEX_PART1.prt 39 5 |===FLEX_PART2.prt 40 5 --------------------------------------------------- * ASSEMBLY STRUCTURE USED FOR THE EXAMPLE * --------------------------------------------------- */ //*********************************************************** extern "C" wfcStatus otkAssemblyItemOperations () { ofstream fp_out_asmitem; try { fp_out_asmitem.open("AssemblyItemExample.txt", ios::out); fp_out_asmitem << "- Assembly Item Example Example -" << endl; pfcSession_ptr Session = pfcGetCurrentSession (); /* Open top assembly FLEX_TOP_ASM.asm in Creo Session*/ pfcModel_ptr CurrModel = Session->GetCurrentModel(); pfcAssembly_ptr PAsm = pfcAssembly::cast(CurrModel); wfcWAssembly_ptr WAsm = wfcWAssembly::cast(CurrModel); pfcModelDescriptor_ptr Part_MDesc = pfcModelDescriptor::CreateFromFileName("flex_part2.prt"); pfcModel_ptr PartOwner = Session->GetModelFromDescr(Part_MDesc); /* Populate component Ids for Component Path */ xintsequence_ptr int_id_array = xintsequence::create(); int_id_array->set(0, 40); /* Create Component Path with respect to top assembly*/ pfcComponentPath_ptr AsmCompPath = pfcCreateComponentPath (PAsm, int_id_array); wfcWComponentPath_ptr WAsmCompPath = wfcWComponentPath::cast(AsmCompPath); wfcAssemblyItems_ptr AsmItemArray = wfcAssemblyItems::create(); /* Populate dimension Ids (from flex_part2.prt) for AssemblyItem array */ xintsequence_ptr dim_id_array = xintsequence::create(); dim_id_array->set(0, 0); dim_id_array->set(1, 1); dim_id_array->set(2, 2); /* Populate AssemblyItem array from Dimensions */ AsmItemArray = OTKXUtilPopulateAssemblyItemsDimensionArray( AsmItemArray, WAsm, PartOwner, dim_id_array, WAsmCompPath, fp_out_asmitem); pfcModelDescriptor_ptr Asm_MDesc = pfcModelDescriptor::CreateFromFileName("flex_sub_asm1.asm"); pfcModel_ptr AsmOwner = Session->GetModelFromDescr(Asm_MDesc); pfcSolid_ptr asmSolid = pfcSolid::cast(AsmOwner); /*Set Component Flexible using AssemblyItem Array*/ wfcWComponentFeat_ptr WCFeat = OTKXUtilSetFlexibleComponent(asmSolid, 40, AsmItemArray, fp_out_asmitem); int_id_array->set(0, 40); int_id_array->set(1, 39); /* Create Component Path with respect to sub assembly */ pfcAssembly_ptr PAsm_flex1 = pfcAssembly::cast(AsmOwner); pfcComponentPath_ptr AsmCompPath2 = pfcCreateComponentPath (PAsm_flex1, int_id_array); wfcWComponentPath_ptr WAsmCompPath2 = wfcWComponentPath::cast(AsmCompPath2); /* Create Flexible Model using AssemblyItem Array */ pfcModel_ptr FlexModel = OTKXUtilCreateFlexibleModel(asmSolid, 40, WAsmCompPath2, AsmItemArray, fp_out_asmitem); fp_out_asmitem << "Unsetting Component Flexible..." << endl; /* Unset component flexible */ WCFeat->UnsetAsFlexible(); xbool is_flex = WCFeat->IsFlexible(); fp_out_asmitem << " Is Component Flexible ? : " << (is_flex ? "YES" : "NO") << endl; wfcAssemblyItems_ptr AsmItemArray2 = wfcAssemblyItems::create(); /* Populate dimension Ids (from flex_part2.prt) for AssemblyItem array */ xintsequence_ptr dim_id_array2 = xintsequence::create(); dim_id_array2->set(0, 0); dim_id_array2->set(1, 1); /* Populate AssemblyItem array from Dimensions */ AsmItemArray2 = OTKXUtilPopulateAssemblyItemsDimensionArray( AsmItemArray2, WAsm, PartOwner, dim_id_array2, 0, fp_out_asmitem); /* Populate feature Ids (from flex_part2.prt) for AssemblyItem array */ xintsequence_ptr feat_id_array = xintsequence::create(); feat_id_array->set(0, 39); /* Populate AssemblyItem array from Features */ AsmItemArray2 = OTKXUtilPopulateAssemblyItemsFeatureArray( AsmItemArray2, WAsm, PartOwner, feat_id_array, 0, fp_out_asmitem); pfcSolid_ptr pSolid = pfcSolid::cast(CurrModel); /*Create Predefined Flexibility Component using AssemblyItem Array*/ OTKXUtilCreatePredefinedFlexibilityComponent(pSolid, 39, AsmItemArray2, PartOwner, fp_out_asmitem); return wfcTK_NO_ERROR; } OTK_EXCEPTION_HANDLER(fp_out_asmitem); return wfcTK_GENERAL_ERROR; }
最新发布
05-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值