关于FreeRTOS中FromISR的使用

在使用FreeRTOS的过程中,我们会发现一个函数分为带FromISR和不带FromISR的。这也是FreeRTOS中一再强调的!!在中断中必须调用函数名以FromISR结尾的函数。

具体了解请看FreeRTOS学习笔记——中断与任务切换:https://www.sohu.com/a/253256697_774177,我就不复制转载了。

因此在我编写的代码中我会读取IPSR(中断程序状态寄存器)的值来判断当前是否处理中断状态。

    /* read out IPSR register*/
    register uint32_t __regIPSR          __ASM("ipsr");

例如:

xTaskGetTickCount (FromISR)用于获取系统当前运行的时钟节拍数。

/*
*********************************************************************************************************
*	函 数 名: OS_getOSSysTick
*	功能说明: returns OS based system tick value.
*	形    参: 无
*	返 回 值: time stamp in ms, based on the OS time
*********************************************************************************************************
*/
uint32_t OS_getOSSysTick(void)
{

    /* read out IPSR register*/
    register uint32_t __regIPSR          __ASM("ipsr");

    /* regIPSR == 0 if controller is in thread mode */
    if (__regIPSR != 0) {
      return xTaskGetTickCountFromISR();
    } else {
      return xTaskGetTickCount();
    }    
}

vTaskDelayUntil()指定希望解除阻止的绝对(确切)时间。

应当注意,如果vTaskDelayUntil()用于指定过去的唤醒时间,它将立即返回(无阻塞)。因此,如果使用vTaskDelayUntil()定期执行的任务由于某种原因(例如,该任务暂时置于Suspended状态)而导致中止执行,则该任务必须重新计算其所需的唤醒时间。

static void OS_TaskCyclic500ms(void)
{
    while(1)
   {
        uint32_t ulCurrentTime = OS_getOSSysTick();

        bsp_LedToggle(LED_Run);     /* 运行指示灯 */	
        vTaskDelayUntil(&ulCurrentTime, os_tskdef_cyclic_500ms.ulCycleTime);
   }  
}

 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeRTOS并没有提供access函数,因为它是一个实时操作系统,而不是一个完整的操作系统。access函数是用于在Linux等操作系统检查文件的权限的。如果您需要在FreeRTOS实现类似的功能,可以考虑使用FreeRTOS提供的文件系统API来实现。 在FreeRTOS,您可以使用以下API来检查文件系统文件的权限: - xFileRead:从文件读取数据 - xFileWrite:向文件写入数据 - xFileDelete:删除文件 - xFileCreate:创建文件 在使用这些API之前,您需要先初始化文件系统,并打开一个文件。在打开文件时,您可以指定文件的访问权限。例如,如果您只想读取文件,可以将文件打开为只读模式。如果您想读写文件,可以将文件打开为读写模式。 下面是一个简单的示例,演示如何在FreeRTOS检查文件的权限: ```c /* 初始化文件系统 */ ff_mount(&fs, "", 0); /* 打开文件 */ FIL file; if (f_open(&file, "test.txt", FA_READ | FA_WRITE) == FR_OK) { /* 检查文件权限 */ if (f_write(&file, "test", 4, &bw) == FR_OK) { /* 写入文件成功,说明有写权限 */ printf("has write permission\n"); } else { /* 写入文件失败,说明没有写权限 */ printf("has no write permission\n"); } /* 关闭文件 */ f_close(&file); } ``` 在上面的示例,我们打开了一个名为test.txt的文件,并尝试向文件写入数据。如果写入成功,说明有写权限。如果写入失败,则说明没有写权限。您可以根据自己的需要调整代码来检查文件的其他权限。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值