Error:..\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441 原因及解决方法

Error:…\FreeRTOS\portable\RVDS\ARM_CM4F\port.c,441 原因及解决方法

参考原子ucos和官网例程移植STM32+FreeRTOS+Lwip中出现如上问题。
原因:在中断中调用了任务级的freertos函数,应调用中断级(即以ISR结尾的)

主要问题都在sys_arch.c中:

函数err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg)中要使用:xQueueSendFromISR

函数sys_prot_t sys_arch_protect(void)中改用:taskENTER_CRITICAL_FROM_ISR();

函数void sys_arch_unprotect(sys_prot_t pval)中改用:
taskEXIT_CRITICAL_FROM_ISR(pval);

也可以通过中断控制及状态寄存器ICSR:0xE000_ED04(权威指南131页)来做个判断,看此时程序是否处于中断中,代码如下:

sys_prot_t sys_arch_protect(void)
{
	u32 sn0;
	sn0=*(vu32*)(0xE000ED04);	
	if(sn0&0xFF)//在中断里
	{
		return taskENTER_CRITICAL_FROM_ISR();
	}
	else  //在线程
	{
		taskENTER_CRITICAL();
		return 0;
	}
}

当然也可以另建一个任务专门处理数据,不再中断中干这些事。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值