自学笔记4

1月14日

1.对于昨天最后写的can通信,里面有几个高八位低八位的赋值,是因为在这里插入图片描述

对stm32板子来说,此处反馈的就是接受的,一定要注意。

1.现在我们来总结一下所有结构体关系

1.第一个是机器人基本状态的结构体
在这里插入图片描述
2.第二个是遥控器接受数据的结构体
在这里插入图片描述
3.第三个是can通讯电机相关数据的结构体
在这里插入图片描述

2.接下来要定义一个发送数据的函数(之前已经定义完成,但此处要在另一个函数中判断是否是运动模式,并且要对速度赋值)

先是.h文件

#ifndef _SEND_SIGNAL_H_
#define _SEND_SIGNAL_H_
void SendSignal(void);
#endif
//此处只是为了以后方便添加变量定义

然后是.c文件

#include "send_signal.h"
#include "robot.h"
#include "can_motor.h"

extern struct Robot_t infantry;

int speed;//定义速度大小

void SendSignal(void)
{
  if(infantry.workstate == STOP)
  {
   CanTransmit_1234(&hcan1,0,0,0,0);
  }
  else 
  {
		m3510_1.speed_pid.ref = speed;
    #ifdef CHASSIS
	CanTransmit_1234(&hcan1, m3510_1.speed_pid.output,0, 0, 0);
    #endif 
 // 判断模式
  }
}
3.接来下是到操作系统,将之前写的所有函数结合到FREETOS.c中

首先要在stm32cube中选择FREETOS
在这里插入图片描述
然后就是到keil中操作
此时看到多出freetos.c文件,打开后发现

osThreadDef(send_signal, all, osPriorityIdle, 0,2048);
  send_signalHandle = osThreadCreate(osThread(send_signal), NULL);

两句话,这两个是线程的定义,第一个函数而言,
第一个参量是线程的名字,第二个是线程执行的函数(此处我们定义了一个all的函数来将所有函数整合),第三个是优先级,第四个不知,第五个是分配的空间。
线程就是会一直无限的循环,类似于for(;;)
all函数

void all(void const * argument)
{
	infantry.workstate = PREPARE;
  for(;;)
  {
      	Calculate();                 //计算输出值,接收信号包含在内了     
		SendSignal();                //发出信号
        osDelay(1);
  }
}
4.接下来读了18年RM官方步兵车的源代码代码所学到的东西总结

1.在这里插入图片描述

首先学到的是项目工程可以尽量分细,这样后来容易调试,而且尽量把功能模块化在这里插入图片描述
2.将初始化放到一个函数中
在这里插入图片描述
3. 报错用法在这里插入图片描述
上面的用法可以直接用另一个解决
在这里插入图片描述
4. 嵌套结构体
在这里插入图片描述
极大简化重复定义嵌套结构体
5在函数中使用可以选择自己需要的,类似于if
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值