当前位置: 首页 > news >正文

设计素材网站外网织梦网站怎么更换模板

设计素材网站外网,织梦网站怎么更换模板,北京鸿讯泰德网站建设,国际贸易相关网站Keil MDK环境下FreeModebus移植踩坑记录 文章目录 Keil MDK环境下FreeModebus移植踩坑记录armcc (arm compiler v5)环境实验一:实验二: armclang (arm compiler v6)环境实验一:实验二:实验三:实验四 总结 armcc (arm c…

Keil MDK环境下FreeModebus移植踩坑记录

文章目录

  • Keil MDK环境下FreeModebus移植踩坑记录
    • armcc (arm compiler v5)环境
      • 实验一:
      • 实验二:
    • armclang (arm compiler v6)环境
      • 实验一:
      • 实验二:
      • 实验三:
      • 实验四
    • 总结

armcc (arm compiler v5)环境

实验一:

不勾选使用微库,不实现printf重定向。
在程序未接收到数据时可以正常运行,一接收到下发的数据便会停止运行,卡在如下图所示的BKPT 0xAB
在这里插入图片描述

实验二:

不勾选使用微库,关闭半主机模式,添加如下重定向代码:

#include <stdio.h>
//#include <time.h>
//#include <rt_misc.h>
#include "usart.h"#if !defined(__MICROLIB)
#pragma import(__use_no_semihosting)
void _sys_exit(int x) //避免使用半主机模式
{x = x;
}
void _ttywrch(int ch) {//sendchar (ch);ch = ch;
}
struct __FILE
{int handle;
};
FILE __stdout;
#endif#ifdef __GNUC__
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif 
PUTCHAR_PROTOTYPE
{/* 实现串口发送一个字节数据的函数 *///serial_write(&serial1, (uint8_t)ch); //发送一个自己的数据到串口huart1.Instance->DR = ch & 0xff;return ch;
}

程序可以正常运行。

armclang (arm compiler v6)环境

实验一:

和上面实验一完全一致。

实验二:

不勾选使用微库,关闭半主机模式

__asm (".global __use_no_semihosting\n\t");
void _sys_exit(int x) //避免使用半主机模式
{x = x;
}
void _ttywrch(int ch) {//sendchar (ch);ch = ch;
}

程序中添加上如上代码,程序会卡死在hardfault中断中,在串口接收中断中设置断点,发现是由assert()函数位置处跳进了hardfault中断中。

实验三:

勾选上使用微库,其它不动,编译会有如下报错:
在这里插入图片描述
上面的第一个报错和第三个报错可以通过https://blog.csdn.net/qq_62014938/article/details/125602277文章中介绍的办法解决掉,然后只剩如下一个错误:
在这里插入图片描述
对于__eabi_assert未定义错误我们可以参考如下连接中的解释:ARMCLANG: L6218E: Undefined Symbol __aeabi_assert。文中说明了原因:我们勾选了使用微库,而微库不支持abort(),exit(),assert()等函数。FreeModbus库中用到了assert函数,因而导致了该问题。文章中也给除了多种解决方法:

  1. 在RTE环境下添加STDERR组件
  2. 使用微库自己实现__eabi_assert()函数
  3. 关闭assert函数:在C/C++配置页中的全局宏定义位置添加NDEBUG的宏,这可以让assert()函数无效
  4. 关闭使用微库
    在测试方法1的时候程序总会卡死在retarget_io.c文件中的abort()函数位置处。如下所示:
    在这里插入图片描述

方法2未测试。方法3可以有效解决该问题。

实验四

不使用微库,不配置RTE,只在C/C++配置处添加NDEBUG宏,如下所示:
在这里插入图片描述
程序可以正常运行。

总结

出现上面问题的主要原因在于FreeModbus库中使用了assert函数导致的,这里比较好的办法还是通过添加NDEBUG宏使assert()函数失效。

http://www.yayakq.cn/news/459107/

相关文章:

  • 泉州做网站seo的wordpress 插件代码
  • 做积分商城网站网页设计感悟与体会
  • 自己做电影网站怎么赚钱wordpress自动外链缩略图
  • 网站核验单怎么下载做淘宝有没有店小秘类型的网站
  • 南昌网站网页设计怎么制作一个app软件
  • 石家庄无极网站建设网络推广平台排行前十名
  • 做擦边球网站wordpress模板手机
  • 做网站应下哪个软件网站设计优缺点
  • 做网站的人找不到了海尔集团的电子商务网站建设
  • 网站建设有哪些工作需需要筹备做企业网站需要提供什么资料
  • 网站上怎么做微信支付接口网站备案时间太长
  • 免费wap网站制作江苏建设网站
  • 余姚网站建设公司做网站公司未来的发展方向
  • 孝感网站seo建设银行网站注册用户
  • 怎样使用网站后台的模板cad精品课网站建设
  • 房屋平面图在线制作网站网站公司怎么做业务
  • 企业网站建设ppt介绍网站建设违约补充协议
  • 网站的倒计时怎么做的西安到北京的高铁时刻表查询
  • 高端网站建设怎么做电商网站开发需要多少钱
  • 南宫网站建设阿里云服务器租用
  • 产品推广网站哪个好wordpress搭建视频
  • 江苏省建设执业资格注册中心网站企业网站建设和运营
  • 公司网站开发有哪些h5跳转小程序
  • 网站怎么做好中国农技推广网
  • 中国优秀网站设计成都网站建设策划
  • 淘宝网 商务网站建设目的婚纱摄影类网站模板
  • iis建设个人网站西安 医疗网站建设
  • 网站开发我嵌入式开发做网站不赚钱了
  • 贾汪微网站开发网站规划与设计大作业
  • 推广网站方案西安注册公司在哪个网站系统