DEENESPTFRRUARHIKOZHNL

PDU Router (PduR)

ModulPduR (PDU Router)
BSW-Modul-ID51
Standard-Header#include "PduR.h"
SWS-SpezifikationAUTOSAR_SWS_PDURouter.pdf
ClusterCommunication Services

Guia do móduloGERADO POR IA

Encaminha I-PDUs inalteradas entre módulos de comunicação superiores e inferiores por meio de tabela de roteamento estática.
GERADO POR IA não revisado Modelo: claude-opus-5-5 · Esforço: high · Temperatura: não controlável · Prompt: 3a20c4ee9a26 Procedência Perguntas em aberto (1)
Âncora causal: R20-11 Válido a partir de R20-11 Sintetizado para esta versão de especificação.
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

Encaminha I-PDUs inalteradas entre módulos de comunicação superiores e inferiores por meio de tabela de roteamento estática.

O PDU Router encaminha I-PDUs entre módulos superiores, como Com e DCM, Communication Interfaces e protocolos de transporte. Ao fazer isso, ele apenas converte os IDs de I-PDU ao longo de caminhos de roteamento configurados e não altera o conteúdo [SWS_PduR_00160]. Suas tarefas incluem transmissão, recepção, TriggerTransmit, transmissões TP segmentadas e gateways com buffer FIFO opcional. O roteamento ocorre exclusivamente no estado PDUR_ONLINE após PduR_Init bem-sucedido [SWS_PduR_00328]. Em tempo de execução, grupos de caminhos de roteamento podem ser comutados via PduR_EnableRouting e PduR_DisableRouting.

O PDU Router encaminha I-PDUs entre módulos superiores, como Com e DCM, Communication Interfaces, como CanIf, FrIf e LinIf, bem como protocolos de transporte. Ao fazer isso, ele não altera as I-PDUs [SWS_PduR_00160] e roteia apenas ao longo de caminhos de roteamento configurados [SWS_PduR_00162]. Sua função essencial é a conversão dos IDs de I-PDU no caminho de envio, bem como no caminho de confirmação e indicação [SWS_PduR_00766]. As interfaces são genéricas; os placeholders <Up>, <Lo> e <LoTp> resultam da configuração PduRBswModules [SWS_PduR_00504].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm Dcm Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det Det PduR->Det erros de desenvolvimento e de tempo de execução CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Diagrama de contexto: o PduR fica situado entre módulos superiores e módulos IF ou TP; BswM comuta grupos de caminhos, erros vão para o DET. Fontes: [SWS_PduR_00504], SWS PDU Router p. 16

O PduR reconhece apenas os estados PDUR_UNINIT e PDUR_ONLINE [SWS_PduR_00324]. O roteamento ocorre exclusivamente em PDUR_ONLINE [SWS_PduR_00328]. Ele chega até lá através de PduR_Init(ConfigPtr) [SWS_PduR_00334]. Antes disso, todas as funções, exceto PduR_Init e PduR_GetVersionInfo, reportam o erro PDUR_E_UNINIT, desde que a detecção de erros esteja ativa [SWS_PduR_00119].

zustaende Powerup Powerup UNINIT PDUR_UNINIT sem roteamento; APIs exceto PduR_Init e PduR_GetVersionInfo reportam PDUR_E_UNINIT (em caso de PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE roteamento de acordo com as tabelas de roteamento UNINIT->ONLINE PduR_Init(ConfigPtr) sem erros: liberar buffers, definir valores padrão, ativar grupos de caminhos de roteamento conforme a configuração ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Diagrama de estados: a energização leva a PDUR_UNINIT; apenas um PduR_Init sem erros leva a PDUR_ONLINE. Fontes: [SWS_PduR_00325], [SWS_PduR_00326], SWS PDU Router Fig. 7.2 p. 53

Em operação, o PduR assume os seguintes processos:

Em tempo de execução, PduR_EnableRouting e PduR_DisableRouting comutam grupos inteiros de caminhos de roteamento [SWS_PduR_00615] [SWS_PduR_00617], tipicamente controlados pelo BswM. Chamadas em um caminho desativado terminam com E_NOT_OK [SWS_PduR_00717]. Erros de desenvolvimento como PDUR_E_PDU_ID_INVALID são reportados pelo PduR ao DET [SWS_PduR_00100]. Perdas na FIFO são reportadas como PDUR_E_PDU_INSTANCES_LOST [SWS_PduR_00670]. Não há tratamento de erros próprio em caminhos de interface; valores de retorno vão para a origem SWS PDU Router p. 46.

Papel e fronteira do sistema: encaminhamento de I-PDUs entre módulos superiores, interfaces e protocolos de transporte

O PDU Router (PduR) é o nó central de encaminhamento da pilha de comunicação clássica. Ele recebe I-PDUs de um módulo de origem e as transfere de forma inalterada e consistente para um ou mais módulos de destino [SWS_PduR_00160]. O roteamento é realizado exclusivamente ao longo dos caminhos de roteamento configurados [SWS_PduR_00162]. Um caminho é definido de forma unívoca por duas informações: o ID de I-PDU de origem da configuração do PduR e os IDs de I-PDU de destino das configurações dos módulos de destino chamados [SWS_PduR_00161]. A função essencial do PduR é, portanto, a conversão de IDs de I-PDU. Ela se aplica tanto ao caminho de envio quanto ao caminho de confirmação e indicação [SWS_PduR_00766]. Cada módulo escolhe seus Handle-IDs por conta própria; a configuração os vincula através da Pdu «global» ECU Configuration Fig. 3.13 p. 192.

Acima do PduR situam-se módulos como Com e DCM. Abaixo situam-se Communication Interfaces como CanIf, FrIf e LinIf, bem como protocolos de transporte como CanTp, FrTp e LinTp SWS PDU Router p. 24. As interfaces são definidas de forma genérica. Os marcadores de posição <Up>, <Lo> e <LoTp> são substituídos por meio da configuração de módulo referenciada em PduRBswModules, e em CDDs por meio de seu apiServicePrefix [SWS_PduR_00504] SWS PDU Router Fig. 10.2 p. 95. Se um módulo inferior suportar tanto TP quanto IF, são adicionados os infixos Tp e If [SWS_PduR_00800].

kontext cluster_oben Obere Module (<Up>) cluster_if Communication Interfaces (<Lo>) cluster_tp Transportprotokolle (<LoTp>) Com Com PduR PduR Routing-Tabellen, I-PDU-ID-Umsetzung, Gateway-Puffer Com->PduR PduR_ComTransmit Dcm Dcm Dcm->PduR PduR_<User:Up>Transmit BswM BswM BswM->PduR PduR_EnableRouting, PduR_DisableRouting PduR->Com Com_RxIndication, Com_TxConfirmation, Com_TriggerTransmit PduR->Dcm Dcm_StartOfReception, Dcm_CopyRxData, Dcm_CopyTxData, Dcm_TpRxIndication, Dcm_TpTxConfirmation Det Det PduR->Det erros de desenvolvimento e de tempo de execução CanIf CanIf PduR->CanIf <Lo>_Transmit FrIf FrIf PduR->FrIf LinIf LinIf PduR->LinIf CanTp CanTp PduR->CanTp <LoTp>_Transmit FrTp FrTp PduR->FrTp LinTp LinTp (in LinIf) PduR->LinTp CanIf->PduR PduR_<User:Lo>RxIndication, TxConfirmation, TriggerTransmit CanTp->PduR PduR_<User:LoTp>StartOfReception, CopyRxData, CopyTxData, RxIndication, TxConfirmation

Diagrama de contexto: O PduR situa-se entre módulos superiores e módulos IF ou TP inferiores; o BswM comuta grupos de rotas de roteamento, erros vão para o DET. Fontes: [SWS_PduR_00504], [SWS_PduR_00615], [SWS_PduR_00119], SWS PDU Router p. 16

Se PduRZeroCostOperation estiver definido e todas as rotas de roteamento forem pré-compilação, os módulos vizinhos podem chamar um ao outro diretamente [SWS_PduR_00287]. Se pelo menos uma rota não for de pré-compilação, o gerador deve reportar um erro [SWS_PduR_00619] SWS PDU Router p. 56. O gerador deve otimizar recursos não utilizados, ou seja, TP, IF, gateway e FIFO [SWS_PduR_00764].

Ciclo de vida: de PDUR_UNINIT via PduR_Init para PDUR_ONLINE

O PduR possui exatamente uma máquina de estados [SWS_PduR_00644]. Ela possui os estados PDUR_UNINIT e PDUR_ONLINE de PduR_StateType [SWS_PduR_00324] [SWS_PduR_00742]. Após a ligação, o módulo está em PDUR_UNINIT [SWS_PduR_00325]. Após PduR_Init bem-sucedido, ele muda para PDUR_ONLINE [SWS_PduR_00326]. O roteamento ocorre apenas em PDUR_ONLINE [SWS_PduR_00328]; em PDUR_UNINIT nada é roteado [SWS_PduR_00330] SWS PDU Router Fig. 7.2 p. 53. Um diagrama mais antigo mostra adicionalmente um estado PDUR_REDUCED após inicialização com falha SWS PDU Router (alt) p. 30. Para o R20-11, esse estado não se aplica, pois aqui existem apenas dois estados.

zustaende Powerup Powerup UNINIT PDUR_UNINIT sem roteamento; APIs exceto PduR_Init e PduR_GetVersionInfo reportam PDUR_E_UNINIT (em caso de PduRDevErrorDetect) Powerup->UNINIT immediate ONLINE PDUR_ONLINE roteamento de acordo com as tabelas de roteamento UNINIT->ONLINE PduR_Init(ConfigPtr) sem erros: liberar buffers, definir valores padrão, ativar grupos de caminhos de roteamento conforme a configuração ONLINE->ONLINE erneuter PduR_Init: PDUR_E_UNINIT an DET

Diagrama de estados: Após o power-up, o PduR está em PDUR_UNINIT e não roteia; apenas após PduR_Init livre de erros ele roteia em PDUR_ONLINE. Fontes: [SWS_PduR_00325], [SWS_PduR_00326], [SWS_PduR_00119], [SWS_PduR_00100], SWS PDU Router Fig. 7.2 p. 53

PduR_Init(ConfigPtr) é síncrona e não reentrante [SWS_PduR_00334]. A função realiza três ações:

Antes da inicialização, todas as funções, exceto PduR_Init e PduR_GetVersionInfo, reportam o erro PDUR_E_UNINIT, desde que PduRDevErrorDetect esteja ativo [SWS_PduR_00119]. PduR_GetVersionInfo [SWS_PduR_00338] é habilitado via PduRVersionInfoApi System Template p. 656.

Os dados de post-build localizam-se em PduR_PBConfigType e são implementados em PduR_PBcfg.c [SWS_PduR_00241] [SWS_PduR_00743]. Eles são identificados exclusivamente através de PduRConfigurationId [SWS_PduR_00281]. Este identificador é fornecido por PduR_GetConfigurationId [SWS_PduR_00341] [SWS_PduR_00280] como um PduR_PBConfigIdType baseado em uint16; uma ECU pode conter várias configurações selecionáveis [SWS_PduR_00771]. Tabelas de roteamento podem ser atualizadas no momento do post-build [SWS_PduR_00295], contudo apenas no estado não inicializado [SWS_PduR_00296]. A necessidade de memória pode crescer com uma nova configuração e deve, portanto, ser planejada no momento do projeto SWS PDU Router p. 160.

Rotas de Communication Interface: Transmit, TriggerTransmit e confirmações

Se um módulo superior chamar PduR_<User:Up>Transmit [SWS_PduR_00406], o PduR chama <Lo>_Transmit para cada destino [SWS_PduR_00625]. Ao fazer isso, ele não armazena em buffer [SWS_PduR_00629]. Para o valor de retorno aplica-se:

Os destinos de um multicast são ou todos interfaces ou todos protocolos de transporte, nunca misturados [SWS_PduR_00633].

O CanIf copia os dados diretamente no transmit SWS PDU Router Fig. 9.5 p. 100. O FrIf e o LinIf, por outro lado, buscam-nos mais tarde através de PduR_<User:Lo>TriggerTransmit [SWS_PduR_00369]. O PduR encaminha essa chamada para <Up>_TriggerTransmit [SWS_PduR_00430] e retorna o seu valor de retorno [SWS_PduR_00661] SWS PDU Router Fig. 9.6 p. 101. PduR_<User:Lo>TxConfirmation [SWS_PduR_00365] é repassado juntamente com o resultado para <Up>_TxConfirmation [SWS_PduR_00627]. No multicast, isso ocorre somente após a última confirmação [SWS_PduR_00589].

Transmissão de uma I-PDU através de Communication InterfacesComPduRCanIfFrIfPduR_ComTransmit(TxPduId, PduInfoPtr)Quell-I-PDU-ID in Ziel-I-PDU-ID umsetzenaltDestino com disponibilização direta de dados (CanIf)CanIf_Transmit(PduId, PduInfoPtr)copy data()Std_ReturnTypeDestino com TriggerTransmit (FrIf, LinIf)FrIf_Transmit(PduId, PduInfoPtr)set flag()Std_ReturnTypeValor de retorno (singlecast inalterado)Use Case: Posteriormente: instante de transmissão no ciclo FlexRayPduR_<User:Lo>TriggerTransmit(TxPduId, PduInfoPtr)Com_TriggerTransmit(TxPduId, PduInfoPtr)copy buffer()E_OK, SduLengthValor de retorno inalteradoUse Case: Após a transmissãoPduR_<User:Lo>TxConfirmation(TxPduId, result)Com_TxConfirmation(TxPduId, result)Confirmação via CanIf ocorre da mesma forma;em multicast, somente após a última confirmação

Diagrama de sequência: Envio a partir de Com com disponibilização direta de dados (CanIf) ou com busca de dados retardada via TriggerTransmit (FrIf), respectivamente com confirmação subsequente. Fontes: [SWS_PduR_00625], [SWS_PduR_00430], [SWS_PduR_00627], SWS PDU Router Fig. 9.5 p. 100, SWS PDU Router Fig. 9.6 p. 101

Na recepção, PduR_<User:Lo>RxIndication [SWS_PduR_00362] leva a uma chamada de <Up>_RxIndication para cada destino superior [SWS_PduR_00621]; 1:n é suportado [SWS_PduR_00164] SWS PDU Router Fig. 9.1 p. 97. O PduR não verifica o comprimento nem na recepção local [SWS_PduR_00744] nem no envio local [SWS_PduR_00745].

Rotas de protocolo de transporte: I-PDUs segmentadas entre DCM e módulos TP

No envio por TP, o PduR chama <LoTp>_Transmit para cada destino [SWS_PduR_00634]. O módulo TP busca os dados em seções através de PduR_<User:LoTp>CopyTxData [SWS_PduR_00518]. O PduR encaminha cada solicitação para <Up>_CopyTxData [SWS_PduR_00299] e repassa o retorno [SWS_PduR_00676] SWS PDU Router Fig. 9.9 p. 104.

No multicast, a camada superior deve fornecer os mesmos dados várias vezes. A solicitação do primeiro destino vai para a camada superior com TP_CONFPENDING [SWS_PduR_00631], todas as demais com TP_DATARETRY [SWS_PduR_00632]. A camada superior recebe uma única <Up>_TpTxConfirmation após a última confirmação. Esta reporta E_OK se pelo menos um destino tiver reportado E_OK [SWS_PduR_00765] SWS PDU Router Fig. 9.10 p. 83.

Transmissão multicast de TP a partir do DcmDcmPduRCanTpFrTpPduR_<User:Up>Transmit(TxPduId, PduInfoPtr)CanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeFrTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeStd_ReturnTypelooppara cada posição da transmissãoPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_CONFPENDINGBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)Dcm_CopyTxData(…)TpDataState = TP_DATARETRYBufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>TxConfirmation(id, result)PduR_<User:LoTp>TxConfirmation(id, result)após a última confirmação:E_OK se pelo menos um destino tiver reportado E_OKDcm_TpTxConfirmation(id, result)

Diagrama de sequência: No TP-Multicast a partir do DCM, o PduR consulta os mesmos dados por destino com TP_CONFPENDING ou TP_DATARETRY e consolida as confirmações. Fontes: [SWS_PduR_00634], [SWS_PduR_00631], [SWS_PduR_00632], [SWS_PduR_00765], SWS PDU Router Fig. 9.10 p. 83

A recepção TP inicia com PduR_<User:LoTp>StartOfReception [SWS_PduR_00507]. O PduR o encaminha para <Up>_StartOfReception [SWS_PduR_00549] e retorna o seu retorno inalterado [SWS_PduR_00623]. Depois seguem dois encaminhamentos:

Uma chamada com SduLength 0 consulta o buffer disponível ou os dados disponíveis [SWS_PduR_00740] SWS PDU Router Fig. 9.4 p. 99. O PduR repassa cancelamentos para cada destino. PduR_<User:Up>CancelTransmit leva a <Lo>_CancelTransmit ou <LoTp>_CancelTransmit [SWS_PduR_00769] [SWS_PduR_00723] [SWS_PduR_00724]. PduR_<User:Up>CancelReceive leva a <LoTp>_CancelReceive [SWS_PduR_00727].

TP-Empfang von CanTp an DcmCanTpPduRDcmPduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Dcm_StartOfReception(…)BUFREQ_OK, bufferSizePtrValor de retorno inalteradolooppara cada segmento subsequentePduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)Dcm_CopyRxData(…)copy data()BufReq_ReturnTypeBufReq_ReturnTypePduR_<User:LoTp>RxIndication(id, result)Dcm_TpRxIndication(id, result)

Diagrama de sequência: Na recepção TP de CanTp para DCM, o PduR repassa StartOfReception, o loop CopyRxData e RxIndication 1:1. Fontes: [SWS_PduR_00549], [SWS_PduR_00428], [SWS_PduR_00429], SWS PDU Router Fig. 9.4 p. 99

Operação de gateway: encaminhamento imediato, buffer FIFO e TP on-the-fly

Entre Communication Interfaces, o PduR roteia 1:n [SWS_PduR_00436] e com encaminhamento imediato, ou seja, sem formação de taxa própria [SWS_PduR_00437]. O roteamento por gateway ocorre apenas IF↔IF ou TP↔TP [SWS_PduR_00638]. Para o comprimento repassado aplica-se:

  • Sem armazenamento em buffer, o PduR repassa o mínimo entre o comprimento recebido e o comprimento de destino configurado [SWS_PduR_00783].
  • Com armazenamento em buffer, ele copia no máximo PduRPduMaxLength e descarta o restante [SWS_PduR_00746].

Uma I-PDU pode ir simultaneamente de forma local para Com e ser encaminhada para um segundo CAN SWS PDU Router Fig. 9.14 p. 114.

A forma como o destino obtém os dados é definida por PduRDestPduDataProvision:

Pode ser configurado um FIFO por I-PDU de destino [SWS_PduR_00307]. O comportamento de FIFO aplica-se a partir de PduRQueueDepth maior que 1 [SWS_PduR_00785]. O diagrama de atividades resume as regras de entrada e saída [SWS_PduR_00665] [SWS_PduR_00666].

gateway_fifo rx PduR_<SrcLo>RxIndication em caminho de gateway com buffer prov PduRDestPduDataProvision? rx->prov dleer FIFO vazio e nenhuma TxConfirmation pendente? prov->dleer PDUR_DIRECT tleer FIFO leer? prov->tleer PDUR_TRIGGERTRANSMIT ddirekt <DstLo>_Transmit direkt aufrufen; FIFO bleibt leer dleer->ddirekt sim voll FIFO voll? dleer->voll não tkopie I-PDU in FIFO kopieren, <DstLo>_Transmit aufrufen tleer->tkopie sim tleer->voll não flush Esvaziar FIFO, PDUR_E_PDU_INSTANCES_LOST para o DET; tratar nova I-PDU como em FIFO vazio voll->flush sim einreihen Enfileirar I-PDU como entrada mais recente voll->einreihen não tt PduR_<DstLo>TriggerTransmit ttleer FIFO leer? tt->ttleer ttnok Retornar E_NOT_OK ttleer->ttnok sim ttok Copiar e remover a entrada mais antiga; FIFO não vazio: <DstLo>_Transmit com a I-PDU mais antiga ttleer->ttok não conf PduR_<DstLo>TxConfirmation (direkte Datenbereitstellung) confnext FIFO não vazio: <DstLo>_Transmit com a I-PDU mais antiga, remover depois conf->confnext

Diagrama de atividades: Dependendo da disponibilização de dados e do nível de preenchimento do FIFO, uma I-PDU roteada por gateway é enviada imediatamente, enfileirada ou reiniciada após um overflow; TriggerTransmit e TxConfirmation esvaziam o FIFO. Fontes: [SWS_PduR_00665], [SWS_PduR_00793], [SWS_PduR_00786], [SWS_PduR_00787], [SWS_PduR_00255], [SWS_PduR_00669], [SWS_PduR_00666], [SWS_PduR_00667], [SWS_PduR_00662]

Para gateways TP existem dois métodos. No Direct Gatewaying, <DstLoTp>_Transmit inicia na RxIndication com E_OK [SWS_PduR_00551]. No On-the-fly-Gatewaying, o reenvio já inicia assim que PduRTpThreshold for atingido [SWS_PduR_00317]. Nesse caso, apenas um destino é permitido [SWS_PduR_00708], e dados já enviados não são repetidos [SWS_PduR_00707] SWS PDU Router p. 58. O PduR seleciona o buffer de acordo com o tamanho:

  • Se a mensagem couber em PduRPduMaxLength, ele utiliza o buffer dedicado [SWS_PduR_00797].
  • Caso contrário, ele obtém dinamicamente um buffer a partir de PduRTxBuffer [SWS_PduR_00798].

Com a TxConfirmation, ele libera o buffer [SWS_PduR_00637]. Se a I-PDU também tiver de ser recebida localmente, o PduR chama <UpTp>_StartOfReception, <UpTp>_CopyRxData e <UpTp>_RxIndication nesta ordem [SWS_PduR_00789]. Para isso, ele precisa armazenar em buffer, pois o DCM nada sabe sobre o gateway SWS PDU Router p. 112.

Gateway on-the-fly de uma TP-I-PDU de CAN1 para CAN2CanTp (CAN1, Quelle)PduRCanTp (CAN2, Ziel)PduR_<User:LoTp>StartOfReception(id, info, TpSduLength, bufferSizePtr)Selecionar buffer: dedicado se TpSduLength ≤ PduRPduMaxLength,caso contrário, dinâmico a partir de PduRTxBufferBUFREQ_OK (sem buffer: BUFREQ_E_OVFL)loopbis PduRTpThreshold erreichtPduR_<User:LoTp>CopyRxData(id, info, bufferSizePtr)copy data()BUFREQ_OKCanTp_Transmit(PduId, PduInfoPtr)Std_ReturnTypeloopsegmentos restantes, entrelaçadosPduR_<User:LoTp>CopyRxData(…)BUFREQ_OKPduR_<User:LoTp>CopyTxData(id, info, retry, availableDataPtr)BUFREQ_OKPduR_<User:LoTp>RxIndication(id, result)PduR_<User:LoTp>TxConfirmation(id, result)Liberar buffer para este destinoApenas um módulo TP de destino permitido;nenhuma retransmissão de dados já transmitidos

Diagrama de sequência: No gateway on-the-fly entre duas redes CAN, o reenvio começa logo ao atingir o limiar; recepção e envio são executados de forma intercalada. Fontes: [SWS_PduR_00317], [SWS_PduR_00708], [SWS_PduR_00797], [SWS_PduR_00799], [SWS_PduR_00637], SWS PDU Router Fig. 9.15 p. 110

Grupos de rotas de roteamento: comutar o roteamento em tempo de execução

Grupos de rotas de roteamento agrupam rotas por rede ou tipo de PDU. Eles são comutados tipicamente pelo BswM SWS PDU Router p. 69. Para isso servem PduR_EnableRouting(id) [SWS_PduR_00615] e PduR_DisableRouting(id, initialize) [SWS_PduR_00617]; o identificador é do tipo uint16 [SWS_PduR_00654]. A ativação tem efeito imediato [SWS_PduR_00715]. Ao desativar, aplicam-se as seguintes regras:

Versões posteriores listam explicitamente as funções afetadas SWS PDU Router p. 69.

routinggruppen aufruf PduR_EnableRouting(id) ou PduR_DisableRouting(id, initialize) exist Routing-Pfadgruppe id existiert? aufruf->exist det PduRDevErrorDetect aktiv? exist->det não art Aufruf? exist->art sim meld PDUR_E_ROUTING_PATH_GROUP_ID_INVALID melden det->meld sim keine Retorno sem ação det->keine não meld->keine ein Ativar grupo imediatamente: a transmissão seguinte é atendida diretamente art->ein EnableRouting aus Gruppe deaktivieren art->aus DisableRouting fifo Caminhos com FIFO (PduRQueueDepth > 1): esvaziar FIFO, PDUR_E_PDU_INSTANCES_LOST aus->fifo init initialize = TRUE: buffer único com valor padrão initialize = FALSE: manter valor atual fifo->init gesperrt APIs com ID de I-PDU de um caminho desativado: E_NOT_OK sem nenhuma outra ação init->gesperrt

Diagrama de atividades: Em caso de ID de grupo desconhecido, a chamada retorna sem ação (eventualmente com notificação ao DET); caso contrário, o grupo é imediatamente ativado ou desativado, com esvaziamento de FIFO e tratamento de buffer. Fontes: [SWS_PduR_00647], [SWS_PduR_00648], [SWS_PduR_00716], [SWS_PduR_00649], [SWS_PduR_00715], [SWS_PduR_00663], [SWS_PduR_00717]

O Mode Management Guide recomenda os grupos de rotas para I-PDUs sem grupo de I-PDU de Com, como por exemplo para LdCom. A comutação ocorre através de regras do BswM, por exemplo dependendo do estado de partial network Mode Management Guide p. 50. Para isso, a ação do BswM BswMPduRouterControl chama PduR_EnableRouting ou PduR_DisableRouting SWS BSW Mode Manager p. 145. No roteamento n:1 para um módulo local, no máximo uma rota pode estar ativa em tempo de execução System Template p. 736 [SWS_PduR_00615].

Comportamento em caso de erro

Os erros de desenvolvimento são definidos por [SWS_PduR_00100]. Eles são reportados apenas se PduRDevErrorDetect estiver ativo [SWS_PduR_00119] [SWS_PduR_00221]. O PduR não reporta erros de produção SWS PDU Router p. 60.

Código de erroValorGatilho
PDUR_E_INIT_FAILED0x00ponteiro de configuração inválido
PDUR_E_UNINIT0x01API antes da inicialização ou PduR_Init fora de PDUR_UNINIT
PDUR_E_PDU_ID_INVALID0x02identificador de PDU inválido
PDUR_E_ROUTING_PATH_GROUP_ID_INVALID0x08grupo desconhecido em Enable/Disable [SWS_PduR_00648] [SWS_PduR_00649]
PDUR_E_PARAM_POINTER0x09ponteiro nulo como argumento

O erro de tempo de execução PDUR_E_PDU_INSTANCES_LOST ocorre em três casos:

Como interface obrigatória para isso, o PduR utiliza Det_ReportRuntimeError [SWS_PduR_91001].

Em rotas IF, o PduR não trata erros por si próprio. Ele repassa valores de retorno para a origem [SWS_PduR_00626] SWS PDU Router p. 46 e não repete transmissões [SWS_PduR_00256]. Também em rotas TP, os erros vão para a camada superior via valor de retorno [SWS_PduR_00700] SWS PDU Router p. 49. No caso de múltiplos destinos, E_OK aplica-se apenas se todos os destinos retornarem E_OK [SWS_PduR_00701]. Esta regra provavelmente se refere ao TP-Multicast, enquanto para o IF-Multicast aplica-se [SWS_PduR_00218]. Pergunta Q-4bd42fd8dc77ccf2 (aberta) O PduR apenas encaminha RxIndications de TP com falha [SWS_PduR_00207].

Em gateways TP aplicam-se regras próprias:

Evidências mais detalhadas

Os seguintes trechos fundamentam as afirmações deste guia. As sequências no capítulo 9 da especificação as ilustram, como SWS PDU Router Fig. 9.5 p. 100.

Guia gerado por IA com base nos requisitos do SWS PDU Router (R20-11) e trechos de documentos associados; normativos são exclusivamente os requisitos vinculados. Declarações marcadas como interpretação devem ser verificadas com base na especificação.

PDU Router (PduR)

The PDU Router routes I-PDUs between communication interfaces, transport protocols, and upper layers without payload inspection.

Funktionen — Übersicht

Typen — Übersicht

Funktionen & Typen — Detailansicht

função PduR_Init [SWS_PduR_00334] 📄 PDF

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Initializes the PDU Router

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 8eca52c90f1c Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

usar

A função síncrona e não reentrante PduR_Init inicializa o roteador de PDU [SWS_PduR_00334]. Como parâmetro, ela recebe com ConfigPtr um ponteiro para a configuração pós-compilação do módulo (PduR_PBConfigType) e não fornece valor de retorno [SWS_PduR_00334]. No âmbito da inicialização, PduR_Init pré-aloca todos os buffers de transmissão de PDU com os valores padrão configurados [SWS_PduR_00308].

Interação e condições de ordenação

Após a inicialização (power-on), o módulo se encontra inicialmente no estado PDUR_UNINIT [SWS_PduR_00325]. PduR_Init deve ser chamada antes de todas as outras funções do módulo, já que outras interfaces — com exceção de PduR_GetVersionInfo — reportam o erro PDUR_E_UNINIT por meio do DET no estado não inicializado, desde que PduRDevErrorDetect esteja ativado [SWS_PduR_00119].

Tratamento de erros e simultaneidade

Se PduR_Init for chamada em um estado diferente de PDUR_UNINIT, isso será considerado como PDUR_E_UNINIT [SWS_PduR_00100]. No caso de um ponteiro de configuração inválido ou da passagem de um ponteiro nulo, aplicam-se os códigos de erro PDUR_E_INIT_FAILED ou PDUR_E_PARAM_POINTER, respectivamente [SWS_PduR_00100]. Devido à falta de reentrância, não pode ocorrer nenhuma chamada paralela da rotina de inicialização [SWS_PduR_00334].

Este texto foi gerado por uma IA com base na especificação AUTOSAR R20-11.

Guia do implementador em breve (complexidade I1)

função PduR_EnableRouting [SWS_PduR_00615] 📄 PDF

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Enables a routing path group.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: e3aad02fdb37 Procedência Perguntas em aberto (1)
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função síncrona PduR_EnableRouting (ID de serviço 0xf3) serve para a ativação direcionada de um grupo de caminhos de roteamento definido no roteador de PDU ([SWS_PduR_00615]). Como único parâmetro, aceita o identificador de grupo id do tipo PduR_RoutingPathGroupIdType, o qual endereça o respetivo grupo de caminhos de roteamento na configuração do roteador de PDU ([SWS_PduR_00615]). A chamada não possui valor de retorno e está disponível através do ficheiro de cabeçalho PduR.h ([SWS_PduR_00615]).

Para uma utilização isenta de erros, os estados do sistema e os limites dos parâmetros são determinantes: antes da chamada, o módulo PduR deve estar completamente inicializado, uma vez que a execução no estado não inicializado desencadeia o erro PDUR_E_UNINIT ([SWS_PduR_00100]). Caso seja passado à função PduR_EnableRouting um identificador de tabela de roteamento ou de grupo de caminhos inválido, isso resulta no erro PDUR_E_ROUTING_PATH_GROUP_ID_INVALID com o valor de erro 0x08 ([SWS_PduR_00100]).

No que diz respeito à concorrência, a interface está declarada como reentrante ([SWS_PduR_00615]), pelo que chamadas paralelas para o controlo de grupos de caminhos são, por princípio, admissíveis. No sistema global, a função serve para a ativação dinâmica de relações de comunicação; presume-se que o serviço seja tipicamente acionado por instâncias superiores, como o gestor de modos, para ativar caminhos de roteamento em tempo de execução consoante os estados do sistema ou da rede. Pergunta Q-365f4b81f59f3511 (aberta)

Nota de utilização gerada automaticamente com base na especificação AUTOSAR Classic (Release R20-11).

função PduR_DisableRouting [SWS_PduR_00617] 📄 PDF

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);

Disables a routing path group.

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 79b319e1f13b Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

A função síncrona PduR_DisableRouting serve para desativar um grupo de caminhos de roteamento configurado ([SWS_PduR_00617]). Foi concebida como reentrante e não possui valor de retorno ([SWS_PduR_00617]).

Parâmetros e comportamento

  • id (PduR_RoutingPathGroupIdType): identificação do grupo de caminhos de roteamento a desativar, conforme definido na configuração do roteador de PDU ([SWS_PduR_00617]).
  • initialize (boolean): controla o comportamento do buffer aquando da desativação. Ao passar true, os buffers únicos são inicializados para o respetivo valor padrão; com false, os buffers únicos mantêm o seu valor atual ([SWS_PduR_00617]).

Tratamento de erros e condições de contorno

Em caso de erro, de acordo com a tabela de erros, estão definidos códigos de erro específicos ([SWS_PduR_00100]):

  • Se a função for chamada sem que o módulo esteja inicializado, está previsto o código de erro PDUR_E_UNINIT (0x01) ([SWS_PduR_00100]).
  • Se for passada a PduR_DisableRouting uma tabela de roteamento ou um ID de grupo inválido, está especificado o erro PDUR_E_ROUTING_PATH_GROUP_ID_INVALID (0x08) ([SWS_PduR_00100]).

A função está disponível por meio do cabeçalho PduR.h ([SWS_PduR_00617]).

Esta nota de uso foi gerada automaticamente com base nos requisitos da especificação.

tipo PduR_PBConfigType [SWS_PduR_00743] 📄 PDF

Data structure containing post-build-time configuration data of the PDU Router.

tipo PduR_PBConfigIdType [SWS_PduR_00771] 📄 PDF

Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.

tipo PduR_StateType [SWS_PduR_00742] 📄 PDF

States of the PDU Router

GERADO POR IA não revisado Modelo: gemini-3.8-flash-medium · Esforço: medium · Temperatura: não controlável · Prompt: 9763b14fa079 Procedência
traduzido do guia alemãogemini-3.8-flash-low · 2026-10-13 · Original em alemão

O tipo de enumeração PduR_StateType especifica os estados do roteador de PDU de acordo com [SWS_PduR_00742]. O tipo de dados é disponibilizado por meio do arquivo de cabeçalho PduR.h e serve no roteador de PDU como base tipificada formal para a representação do respectivo estado de inicialização dentro do módulo, bem como para componentes chamadores.

De acordo com o requisito [SWS_PduR_00324], o módulo roteador de PDU é composto por exatamente dois estados operacionais, que são definidos pelos valores de enumeração de PduR_StateType. A faixa de valores definida segundo [SWS_PduR_00742] compreende os seguintes valores:

  • PDUR_UNINIT: indica o estado no qual o roteador de PDU não está inicializado ([SWS_PduR_00742]).
  • PDUR_ONLINE: sinaliza que o roteador de PDU foi inicializado com sucesso e está operacional ([SWS_PduR_00742]).

No âmbito da interação dos requisitos de especificação, PduR_StateType atua como uma definição vinculativa para o modelo de estados interno e externo do roteador de PDU ([SWS_PduR_00324]). Como a faixa de valores segundo [SWS_PduR_00742] é restrita exclusivamente a PDUR_UNINIT e PDUR_ONLINE, a especificação distingue estritamente entre o estado inicial não inicializado e o estado após a inicialização bem-sucedida. Estágios intermediários adicionais, modos operacionais parciais ou estados de erro específicos não estão previstos na faixa de valores de PduR_StateType.

Nota de utilização gerada automaticamente com base na especificação AUTOSAR.

Guia do implementador em breve (complexidade I1)

Request a governed re-review of this record. The record is not changed immediately.

Record
AUTOSAR/AP/record/CP_MOD_PduR
Status
unspecified
Version
AUTOSAR/AP/record/CP_MOD_PduR@rel:R20-11#240c9f9e
Content hash
240c9f9e
Source
https://www.autosar.org/fileadmin/standards/R20-11/CP/AUTOSAR_SWS_PDURouter.pdf#nameddest=SWS_PduR_00334

Inicialização e estado

Returns the version information of this module.

void PduR_GetVersionInfo (Std_VersionInfoType* versionInfo);
PduR_Init função

Initializes the PDU Router

void PduR_Init (const PduR_PBConfigType* ConfigPtr);

Serviços

Disables a routing path group.

void PduR_DisableRouting (PduR_RoutingPathGroupIdType id, boolean initialize);

Enables a routing path group.

void PduR_EnableRouting (PduR_RoutingPathGroupIdType id);

Returns the unique identifier of the post-build time configuration of the PDU Router

PduR_PBConfigIdType PduR_GetConfigurationId (void);

Tipos

Identification of the post-build configuration currently used for routing I-PDUs. An ECU may contain several configurations (post-build selectable), each have unique Id.

Data structure containing post-build-time configuration data of the PDU Router.

Identification of a Routing Table

States of the PDU Router