Programa MK o mais diferente. Estes são os bem conhecidos stm, lattice, microchip, nuvoton, altera, etc. e coisas exóticas como azoteq, silicon works ou freescale de algum lançamento de 2003. Todos eles (enfim, quase todos) desenvolvem um protocolo próprio, único, que ninguém mais tem e é o melhor. Embora seja realizada sob o lema do universal. E todo esse conjunto de protocolos universais agrada pela diversidade. Se há um exagero aqui, é um pouco.
Mas este artigo recente me levou a escrever aqui... Acabaram de chegar até mim amostras de diferentes famílias gd32 e, tendo escrito programas para programar todas as famílias inferiores, bufei sobre a família RISC-V. E eu vi este artigo. Bem, pensei, se alguém estiver interessado em reler a folha de dados, a folha de dados de programação também pode ser interessante.
As famílias mais jovens são programadas via JTAG e SWD (com pequenas exceções, onde existe apenas SWD.gd32f130xx, por exemplo). O gd32vf, por outro lado, possui apenas JTAG. Mas JTAG ou SWD são apenas ferramentas. A condução com essas ferramentas ocorre de maneiras muito diferentes. Se você puder ler a especificação de arquitetura de interface de depuração ARM sobre gd32f e tudo estiver claramente descrito lá, então sobre gd32vf está manchado em Suporte a depuração externa RISC-V e no Manual de conjunto de instruções RISC-V. E essas duas obras não podem ser dominadas com meio chute. Este último também tem um subtítulo Volume II. Isso assustou. Portanto, há também um pig com o número 1 e possivelmente os números 3 e 4.
De acordo com o Suporte de depuração externa RISC-V, o acesso aos registros pode ser feito de duas maneiras:
- Usando Comando Abstrato
- Usando Buffer de Programa
Para memória três:
- Usando o acesso ao barramento de sistema (ausente no GD32VF)
- Usando Buffer de Programa
- Usando o Acesso à Memória Abstrata
Como o GD32VF não tem acesso ao barramento de sistema (os bits de "acesso de barramento de sistema são suportados" no registro sbcs) e não há prazer em usar um buffer de programa e escrever assembler nele, há uma maneira muito boa de lidar com os comandos. No começo era completamente incompreensível para mim onde esses caras espertos pegavam o número do cadastro (Número do cadastro para acessar). A descrição do valor regno orgulhosamente diz: Número do registro a acessar, conforme descrito na Tabela 3.3.
Mas onde exatamente. Mas então eu os encontrei na folha de dados adjacente mencionada acima (Manual do Conjunto de Instruções RISC-V. Volume 2) e o sol brilhou.
Então tudo funcionou. Tudo realmente acabou sendo mais conveniente do que o gd32f. Do ponto de vista de despejar código nele. Mas aquilo era apenas o começo. Agora eu precisava escrever um monitor para ele. Para torná-lo ainda mais rápido do que rápido. IAR não me deixou baixar minha BANCADA dele, embora ele estivesse se gabando disso com força e força. Ainda não encontrei um lugar para clicar e fazer o download. O gerente chinês que enviou as amostras disse que eles estavam usando o NucleiStudio e eu baixei e instalei. Pareceu-me que o mais inconveniente que usei foi a cadeira de balanço. Não entendo como os desgraçados do passado carregaram água e secaram. Eu estava molhada até o topo da minha cabeça. Mas o NucleiStudio superou o roqueiro. Em geral, depois de muito tormento, consegui enfiar os dados e funções nos lugares certos da memória. Tenho certeza de que você pode fazer isso com mais elegância, mas não fui o suficiente.
Se parece com isso.
Precisamos encontrar o script original (eu o encontrei em algum lugar nas entranhas deste eclipse, se estava errado), que contém um monte de rabiscos incompreensíveis e adicionar uma descrição dos endereços necessários lá
. = 0x20000000;
.data_sect : { *(.data_sect) }
. = 0x20000400;
.a_sect : { *(.a_sect) }
. = 0x20000500;
.f_sect : { *(.f_sect) }
Ainda assim, o quanto do arquivo * .icf do IAR parece muito mais claro e simples! Mas isso é uma questão de hábito, eu acho. Quando eu estava procurando por esse arquivo infeliz, o Google me garantiu o tempo todo que não há nada mais poderoso, forte, legal e flexível do que um script de link. Talvez, mas estou exausto. De qualquer forma. Shoveled.
Agora só preciso reorganizar o PC e tudo funcionará em uma velocidade terrível. Mas o monitor ainda não funcionou. E agora o parágrafo pelo qual comecei tudo isso. O que ajudará futuros pesquisadores RISC-V-Miracle.
Aqui está ele.
Para reorganizar o PC, você só precisa escrever seu valor no registrador dpc e, no início do hart, o valor será copiado para o PC. Até este ponto, o programa já escreveu e leu vários outros registradores. Com grande sucesso, devo admitir. E o monitor não funciona. Acontece que, para escrever no dpc, você precisa escrever lá e depois ler a partir daí. Por que isso acontece, eu não sei. Eu li toda a documentação novamente e "segui o destino dos heróis com entusiasmo". Mas nunca descobri por que isso acontece.
Depois disso, tudo funcionou. O único inconveniente de ler algo de memória é parar Hart e reiniciá-lo. Não é muito conveniente, mas não assustador. Por exemplo, para descobrir como o monitor se sente lá e se ele terminou de funcionar, você precisa interromper Hart, ler a memória necessária e, se necessário, iniciar novamente.
Espero que o parágrafo sobre dpc poupe algumas horas de tempo para alguém e seja possível não fazer nada durante todo esse tempo.