本帖最后由 lvben5d 于 2022-10-17 12:44 编辑
1. 大家设计的时候 一定要设计UART1 UART2 留1个当打印口! 切记~~~ (P1.6口可以设置TX1 输入输出貌似都没关系 从实际角度 建议输入 避免接错TX线) P00 P01口留着烧录,千万不要拿其他用!
2. WIN10家庭高级版 可能会编译出错,我后面按照FAE建议改为 WIN10 专业版以上就可以。
WIN11我用的少,但是好像是OK的。 目前只有WIN10家庭版 不行。
3. 我发现默认 DEBUG模式是关闭得,我们一般在IDE右边 配置位, 工程文件 config_set.c里 ,记得修改下debug为0 使能硬件仿真。
DEBUG过程中,去设置唯一1的断点 不能马上起作用,需要暂停 再运行后,断点才生效!
4. 不要在结构体内部 定义 结构体对象数组,仿真的时候,你会发现读到的数值都是第一个数组的值!!
比如我的 typedef struct A{ ...} a_t;
typedef struct B{
a_t a[3];
...} b_t; //这样编译是通过的,但是你等下DEBUG 查看结构体 b 的内容时候,发现不太对劲。
b_t b;
我改为:
typedef struct B{
a_t a1;
a_t a2;
a_t a3;
...} b_t;
b_t b; //这样 DEBUG的时候 可以清楚看到 b.a1 b.a2 b.a3的所有变量数值。
5. 中断里 调用非指针函数是可以得,但是如果非中断中也有这个函数的调用,那么编译器就会提示错误,无法生成HEX, 解决办法是:中断里不要去调用函数,把函数代码复制进来,一来可以减少函数 进出消耗指令,二是通过编译! 注意代码临界保护区(如果有需要的话)8. 离线烧录 Realease得时候 可以把BEE/DEE 去掉,避免每次不需要修改又烧录占用1S时间,
6. 亲测 串口接收引脚 使能内部上拉电阻有用,测试过 P1.4口作为RX1 作为LIN接收,因为LIN适配器内部RX是开漏结构,所以必须由用户的接收引脚 上拉一个电阻,全局上拉电阻使能 PUSH=0后,才有用。 但是I2C功能下,使能内部上拉无效,必须外部上拉!!
7. kf8cc 编译器产生的代码不可重入。 由于函数不可重入,以下操作将产生问题:1、 中断中调用函数外部函数 (只要你可以确保不会重入 是没关系的)2、 中断中进行*、\、%以及指针操作
3、 中断函数的参数传递
如果要在中断中调用函数,不建议这样做。参见函数使用限制章节。
还好 LIN的PID校验 没有上述问题, u8 LIN_CheckPID(u8 pid){
u8 returnpid ;
u8 _P0, _P1 ;
_P0 = (((pid)^(pid>>1)^(pid>>2)^(pid>>4)) & 0x01) <<6;
_P1 = ((~((pid>>1)^(pid>>3)^(pid>>4)^(pid>>5)))&0x01)<<7 ;
returnpid = pid|_P0|_P1 ;
return returnpid ;
}
8. 【切记】做LIN设备的时候,主频一定要16M,不要节约几ma功耗,降频使用。我之前2分频为8M的时候, LIN收包有时候会超时,当我改为16M后,处理速度快了,就稳定了~ 切记~
9. IO口在不同状态下 切换输入输出的时候,跟51不同,当输入切换为输出的时候,为避免电平抖动,需要先 P1LRX = 1or0 然后在TR1X = 0 ( 0=OUT 输出) 输入的时候,由于电平靠外部上拉或其他器件控制,这里只管 TR1X =1 (1=IN 输入)
推荐: 中断里 做任务标志设置,main循环里查询标志来做处理,既然用到这个芯片,我相信大家必然用到LIN功能吧, LIN要注意收到PID并异或校验后,
设置标志位,到主循环里判断执行的时候,避免超时,需要尽快执行 LIN BUS主机节点发送的 查询包哦!!
LIN从机模式,我已经按照官网DEMO调通,且加了我自己的应用状态机 很稳定,可以找我来要。
|
指针做形参可以吗?