TinyG 固件源码分析之一

1.TinyG项目简介 https://github.com/synthetos/TinyG
    TinyG项目是一个多轴运动控制系统,它面向数控加工中心和其它需要高精度运动控制的应用场景。TinyG是一个针对中小型功率电机控制的嵌入式解决方案。下面列出TinyG 第8版硬件的主要特点:
    1) 采用Atmel ATxmega192嵌入式控制器;
    2) 将4路基于TI DRV8818芯片的步进电机驱动器集成在4英寸的电路板上;
    3) 步进电机驱动器相电流可达2.5A,可支持NEMA17系列电机和大部分NEMA23s系列电机;
    4) 支持USB口接收G代码指令,板内解释执行;
    5) 6个轴可映射至任意四个电机;
    6) 采用恒定急动度(加加速度)的速度规划方式(3阶S速度曲线);
    7) 采用单个周期内,相位优化的脉冲发生算法,输出脉冲平滑。在50kHz实现DDA算法时,输出信号频率抖动非常小;
    8) 可达到1/8微步,采用优化后的DDA算可达到1/16 。

2.固件源代码分析
2.1 固件源代码主流程
    TinyG固件基于C语言开发,采用简易的前后台系统:后台主循环设置在main函数结尾,各子功能以任务函数的形式依次出现主循环中,借助状态机控制主循环的执行路径;前台中断处理定时事件,刷新输出脉冲控制电机。其固件代码执行起点在Main.c文件中的main函数。Main函数分3段。第1段源码:

	_system_init();

    其主要功能是禁用ATxmega192芯片看破门狗,始化C语言运行库,启动USB枚举过程,连接PC机;
第2段源码:

	_application_init();
	run_canned_startup();			// 目前为空

    其中_application_init()函数包含:

	hardware_init();	   // 设置芯片工作频率16MHz
	persistence_init();   // 设置掉电不丢失数据RAM的基地址
	rtc_init();			// 设置万年历功能
	xio_init();			// 初始化串口,SPI接口,USB接口,文件访问接口
	//
	stepper_init(); 	// 初始化步进电机的相关定时器和I/O口
	encoder_init();		// 清零编码器变量
	switch_init();		// 初始化各轴限位开关输入引脚
	pwm_init();		// 初始化PWM1和PWM2输出
	//
	controller_init(STD_IN, STD_OUT, STD_ERR);  //设置标准输入输出
	config_init();		//从EEPROM中读取JSON格式的配置文件
	network_init();		// 初始化RS485为标准输入,USB为标准输出和标准错误
	planner_init();		// 初始化粗插补器的缓存队列
	canonical_machine_init();	//初始化G代码解释器`

     以下源码初始化中断控制器:

	PMIC_SetVectorLocationToApplication(); // 
	PMIC_EnableHighLevel();
	PMIC_EnableMediumLevel();
	PMIC_EnableLowLevel();

    第3段源码:

	for ( ; ; )  
	{
		controller_run( );	// single pass through the controller
	}	

    主任务循环函数controller_run直接调用_controller_HSM函数,该函数内部包含多个子任务函数,且功能注释如下:

	DISPATCH(hw_hard_reset_handler());	 // 1. 复位看门狗
	DISPATCH(hw_bootloader_handler());	 // 2. 软件复位
	DISPATCH(_shutdown_idler());  // 3. 待机任务
	//	DISPATCH( poll_switches());  // 4. 
	DISPATCH(_limit_switch_handler());  // 5. 限位报警开关处理函数
	DISPATCH(cm_feedhold_sequencing_callback()); // 6a. 进给运动(见1.2详解)
	DISPATCH(mp_plan_hold_callback()); // 6b. plan a feedhold from line runtime
	DISPATCH(_system_assertions());  // 7.  崩溃诊断函数

	//----- planner hierarchy for gcode and cycles ---------------------------------------//
	DISPATCH(st_motor_power_callback());  // 步进电机驱动电源启停管理
	DISPATCH(sr_status_report_callback());  // 发送状态报告
	DISPATCH(qr_queue_report_callback());  // 发送指令缓存状态报告
	DISPATCH(rx_report_callback());             // conditionally send rx report
	DISPATCH(cm_arc_callback());	 // arc generation runs behind lines
	DISPATCH(cm_homing_callback());	 // 搜索原点感应器
	DISPATCH(cm_jogging_callback());	// 慢进给
	DISPATCH(cm_probe_callback());				// G38.2 continuation
	DISPATCH(cm_deferred_write_callback());		// 保存数据
   // 以下源码实现串口终端交换功能
	DISPATCH(_sync_to_planner());  // 检测指令缓存空间大小
	DISPATCH(_sync_to_tx_buffer());  // 写入发送缓存
	DISPATCH(set_baud_callback());	  // 更新串口波特率
	DISPATCH(_command_dispatch());	// 执行串口交互指令
	DISPATCH(_normal_idler());		// 空闲任务节能

待续。。。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于Tiny cc的源码分析,可以参考以下几点: 1. Tiny cc是由法国计算机程序员法布里斯·贝拉开发的,它是一个超小、超快的标准C语言编译器。它的特点包括小巧、快速、高兼容性和安全性等。\[1\] 2. Tiny cc的源码是用C语言编写的,完全支持ANSI C标准,并且可以用来编译Linux内核。它的编译速度快,生成的可执行程序小,甚至可以像脚本一样执行C代码。\[2\] 3. 如果你想进行Tiny cc的源码分析,你可以先安装Visual Studio,并打开旗下的命令窗口"VSTools Developer Command Prompt"。然后,通过命令行进入Tiny cc源码的win32文件夹,并执行命令"build-tcc.bat -c cl"。这样就会生成tcc编译器i386-win32-tcc.exe。同时,你还需要将lib和include文件夹一并拷贝出来,这样就可以使用Tiny cc了。\[3\] 综上所述,Tiny cc是一个小巧、快速、高兼容性和安全性的C语言编译器,它的源码可以通过安装Visual Studio并执行相应的命令来进行分析。 #### 引用[.reference_title] - *1* [Tiny cc的简介与入门练习](https://blog.csdn.net/Eric_The_Red/article/details/89332573)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [tinyCC 超轻量级编译器](https://blog.csdn.net/happygaohualei/article/details/84632123)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值