Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录
首先确定你的软件是在互斥信号初始化的位置,在以下几个位置,将会报Hard Fault 错误:
(1).os_sys_init_user 用户线程创建之前
(2).os_tsk_create_user之后
规范写法:
/*
*********************************************************************************************************
* 函 数 名: main
* 功能说明: 标准c程序入口。
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
int main (void)
{ /* 初始化外设 */
bsp_Init(); /* 创建启动任务 */
os_sys_init_user (AppTaskStart, /* 任务函数 */
, /* 任务优先级 */
&AppTaskStartStk, /* 任务栈 */
sizeof(AppTaskStartStk)); /* 任务栈大小,单位字节数 */
while();
} /*
*********************************************************************************************************
* 函 数 名: AppTaskStart
* 功能说明: 启动任务,也就是最高优先级任务。
* 形 参: 无
* 返 回 值: 无
* 优 先 级: 4
*********************************************************************************************************
*/
__task void AppTaskStart(void)
{ /* 先创建任务间通信机制,防止任务先创建后,直接就可以使用 */
AppObjCreate(); AppTaskCreate(); while()
{
os_dly_wait();
}
} /*
*********************************************************************************************************
* 函 数 名: AppObjCreate
* 功能说明: 创建任务通信机制
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void AppObjCreate (void)
{
// /* 创建信号量计数值是0, 用于任务同步 */
// os_sem_init (&semaphore, 0);
//
// /* 创建消息邮箱 */
// os_mbx_init (&mailbox, sizeof(mailbox)); link_mul_init(); } /*
*********************************************************************************************************
* 函 数 名: AppTaskCreate
* 功能说明: 创建应用任务
* 形 参: 无
* 返 回 值: 无
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{
HandleTaskModbus = os_tsk_create_user(AppTaskModbus, /* 任务函数 */
, /* 任务优先级 */
&AppTaskModbusStk, /* 任务栈 */
sizeof(AppTaskModbusStk)); /* 任务栈大小,单位字节数 */ HandleTaskLED = os_tsk_create_user(AppTaskLED, /* 任务函数 */
, /* 任务优先级 */
&AppTaskLEDStk, /* 任务栈 */
sizeof(AppTaskLEDStk)); /* 任务栈大小,单位字节数 */ HandleTaskMsgPro = os_tsk_create_user(AppTaskMsgPro, /* 任务函数 */
, /* 任务优先级 */
&AppTaskMsgProStk, /* 任务栈 */
sizeof(AppTaskMsgProStk)); /* 任务栈大小,单位字节数 */
HandleTaskPrintTest = os_tsk_create_user(AppTaskPrintfTest, /* 任务函数 */
, /* 任务优先级 */
&AppTaskPrintfTestStk, /* 任务栈 */
sizeof(AppTaskPrintfTestStk)); /* 任务栈大小,单位字节数 */
// HandleTaskTCPTimer = os_tsk_create_user(AppTaskTCPTimer, /* 任务函数 */
// 5, /* 任务优先级 */
// &AppTaskTCPStk, /* 任务栈 */
// sizeof(AppTaskTCPStk)); /* 任务栈大小,单位字节数 */ HandleTaskReadAD7327 = os_tsk_create_user(AppTaskReadAD7327, /* 任务函数 */
, /* 任务优先级 */
&AppTaskReadAD7327Stk, /* 任务栈 */
sizeof(AppTaskReadAD7327Stk)); /* 任务栈大小,单位字节数 */ HandleTaskDeviceLink = os_tsk_create_user(AppTaskDeviceLink, /* 任务函数 */
, /* 任务优先级 */
&AppTaskDeviceLinkStk, /* 任务栈 */
sizeof(AppTaskDeviceLinkStk)); /* 任务栈大小,单位字节数 */
HandleTaskCollectSensorData = os_tsk_create_user(AppTaskCollectSensorData, /* 任务函数 */
, /* 任务优先级 */
&AppTaskCollectSensorDataStk, /* 任务栈 */
sizeof(AppTaskCollectSensorDataStk)); /* 任务栈大小,单位字节数 */ HandleTaskScreenUpdate = os_tsk_create_user(AppTaskScreenUpdate, /* 任务函数 */
, /* 任务优先级 */
&AppTaskScreenUpdateStk, /* 任务栈 */
sizeof(AppTaskScreenUpdateStk)); /* 任务栈大小,单位字节数 */ HandleTaskLockLink = os_tsk_create_user(AppTaskLockLink, /* 任务函数 */
, /* 任务优先级 */
&AppTaskLockLinkStk, /* 任务栈 */
sizeof(AppTaskLockLinkStk)); /* 任务栈大小,单位字节数 */ }
Keil RTX使用 os_mut_init 报Hard Fault 错误解决记录的更多相关文章
- 错误解决记录------------rhel安装Mysql软件包依赖 mariadb组件
错误解决记录------------软件包依赖 mariadb组件 错误信息: 错误:软件包:akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda) 需要:maria ...
- flex调用JS报安全沙箱错误解决办法
flex调用JS方法弹窗时一般会报安全沙箱错误,只要将被调用的JS方法设置延时就可解决. function openKqQuery(){ window.showModalDialog("pa ...
- laravel 项目表单中有csrf_token,但一直报错419错误 解决redis连接错误:MISCONF Redis is configured to save RDB snapshots, but it is currently not able to persi
laravel 项目表单中有csrf_token,但一直报错419错误,因为项目中使用到Redis缓存,在强制关闭Redis后出现的问题,查询laravel.log文件查找相关问题 安装redis后在 ...
- EF6 CodeFirst连接MySql 报nvarchar('max')错误解决办法
1.在DBContext类加标签[DbConfigurationType(typeof(MySql.Data.Entity.MySqlEFConfiguration))] 2.在Nuget控制台输入u ...
- dbfread报错ValueError错误解决方法
问题 我在用dbfread处理.dbf数据的时候出现了报错 ValueError("could not convert string to float: b'.'",) 然后查找. ...
- virtualbox 错误解决记录
1,E_INVALIDARG (0x80070057),virtualbox中Cannot register the hard disk错误解决办法 virtualbox中加载已有的虚拟硬盘时出现Ca ...
- idea配置SOLServer错误解决记录
1.错误信息:2019-03-26 13:32:41.205 ERROR 7828 --- [nio-8081-exec-1] c.alibaba.druid.filter.stat.StatFilt ...
- 命令行登录mysql报Segmentation fault错误是怎么回事
==========解决方法============在源码包里,编辑文件 cmd-line-utils/libedit/terminal.c把terminal_set方法中的 char buf[TC_ ...
- 连接IBM MQ原因码报2035的错误解决办法
我们的系统使用了ibm mq,用户用来向国家局上报文件和接收文件,前几天用户说上报一直不成功.由于 开发这块程序的人已经辞职了,我觉定在我的机器部署一套,研究一下.我的思路: 在我的机器上安装mq,建 ...
随机推荐
- du熊的机器人
[du熊的机器人] Description du熊正在玩一个别人刚送给它的机器人.这个机器人只能在一个棋盘中行走,棋盘的左上角格子为(0, 0),右下角格子为(X, Y). du熊控制这个机器人从棋盘 ...
- Android工程目录结构
----------siwuxie095 首先创建一个简单的项目:MainActivity 工程目录结构一览: 工程目录结构介绍: 1.manifests目录 里面有一个AndroidManifest ...
- Jenkins构建时间Poll Scm的设置(常用设置)
每15分钟构建一次:H/15 * * * * 或*/5 * * * * 每天8点构建一次:0 8 * * * 每天8点~17点,两小时构建一次:0 8-17/2 * * * 周一到周五,8点~17 ...
- oracle触发器--if else demo
CREATE OR REPLACE Trigger trig_solr_index_el_lesson After Update of lessonid, lessonname, lessongoal ...
- DataTable记录
DataTable dt2 = dt.Copy();//复制结构和数据 //复制结构,不要数据 DataTable dt2 = new DataTable(); for (int i = 0; i & ...
- hashlib 算法介绍
Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通常用16进制 ...
- 对象转换利器之Dozer
什么是Dozer Dozer是一个Java对象转换工具,可以在JavaBean和JavaBean之间进行递归数据复制,并且适应不同复杂的类型.Dozer会直接将名称相同的属性进行复制,属性名不同或者有 ...
- Linux 启动和关闭自定义命令
首先是启动命令 [lambert@lambert ~]$ vim startup.sh #!/bin/bash nohup XXXXXX >/home/lambert/>& &am ...
- Linux主流发行版本
一.简介 而工欲善其事,必先利其器,Linux的世界相當廣大,除了最著名的Ubuntu以外還有不少發行版.然文人相輕,自古皆然,了解不同發行版的優勢不只嘴上攻防用的上,也是學Linux一個有趣的地方! ...
- strops()
<?php echo strpos("You love php, I love php too!","php"); ?>