同步操作将从 赵维鹏/mculib4d 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
D语言原生的arm的hal操作库,直接使用LDC进行编译,无需交叉环境这种混乱东西. 通过SVD直接生成mc的底层操作,大部分功能基于D的模板进行实现,尽量实现D语言原生的实现.
本人搞单片机有点年头了,一直都是干应用的.常用开发软件用Keil,iar,一类的盗版软件,在经历2020年的时候突然发现不能在这样下去了, 各种技术上的卡脖子事情让我觉得应该 "搞点事情", 国产的MCU很多,真的不少,可为何开发软件及开发库就那么几种盗版的? 离开这些软件我们还能做自己的事情么? 所以我定下目标是搞一个D语言下的单片机开发(嵌入式的直接用就好了;~))
我认为D语言做开发有一些先天上的设计优势,比如说非常强力的编译前解释器(感觉类似很强的宏脚本解释器),把所有没必要的运算压在编译前.
资源文件无需转换直接嵌入 import(string file)
,
强大的 LDC 可以支持多种MCU及结构 (aarch64,arm,avr,mips,thumb,esp32.....),很适合搞事情,其内置的LDD还可以支持直接的bin输出(当前版本 LLVM 11还是存在TLS的BUG)
欢迎搞事情的人一起出手.
前端选择D语言,编译器使用LDC.
D语言中声明 与存储位置相关
uint t1=0x11111111; // this goes to tdata TLS,有初始化
int t2; // this goes to tbss TLS
__gshared int t3=0x33333333; // this goes to data 有初始化
__gshared int t4; // this goes to bss 无初始化
shared int t5 = 0x55555555; // this goes to data 有初始化
static int t6; // this goes to bss 无初始化
shared int tt6; // this goes to bss 无初始化
注意 当前库中并未实现 TLS的功能.
mculib arch|Arch 目录,当前目录下包括一些Arch支持的杂项 arch.***|Arch 支持 chips|mcu 芯片型号对应 stdlib|本库自身支持 与phobos内子目录同名|调用库简单修正,不建议从D的基础库中调用.
直接调用寄存器库
import mculib.chips;
extern(C) void mloop()
{
RCC.CR.PLLI2SON.value = 0x00 ; // 这里可以直接使用寄存器
while(1){}
}
通过svd工具直接生成总线寄存器的操作,可直接通过 设备寄存器名进行访问 如 RCC.CR.value=0x33; RCC.CR.PLLI2SON.value = 0x50;; 的方式进行访问. 当前有简单的边界限定,但还没有增加 assert
中断定义名可以通过 IRQName!<int 中断ID> 模板获取, 可以通过以下代码重新定义 中断
import mcu.arm;
extern(C)
pragma(mangle, IRQnHandlerMangleof!(ExtIRQn.WWDG_IRQn)) // 这个声明将替换原始的 模板生成的默认IRQnHandler
void IRQ(){
import ldc.llvmasm;
__asm("nop", "");
while(1){}
} ;
Peripheral.Register.read4slice
: 读取模板Peripheral.Register.write4slice
: 写入模板Peripheral.Register[]
: 索引方式读取Peripheral.Register[]=x
: 索引方式写入import mculib.chips;
void test(){
RCC.PLLCFGR.read4slice!(1,2)();
RCC.PLLCFGR.read4slice!(1,3)();
RCC.PLLCFGR.write4slice!(1,2)(3);
RCC.PLLCFGR.write4slice!(1,3)(4);
RCC.PLLCFGR[1];
RCC.PLLCFGR[1]=1;
}
Peripheral
内模板 ,详情查看 寄存器读写模板
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。