你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 FreeRTOS信号量(软件中断实现)

[复制链接]
long龙96 提问时间:2016-10-10 23:33 /
大家好,我最近在学习FreeRTOS,在STM32平台上。在官方给出的代码中,关于信号量切换这一章节。
这是定义的中断函数:
static void __interrupt __far vExampleInterruptHandler( void )
{
static portBASE_TYPE xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;

/* 'Give' the semaphore to unblock the task. */
xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken );

if( xHigherPriorityTaskWoken == pdTRUE )
{
/* 给出信号量以使得等待此信号量的任务解除阻塞。如果解出阻塞的任务的优先级高于当前任务的优先
级 – 强制进行一次任务切换,以确保中断直接返回到解出阻塞的任务(优选级更高)。

说明:在实际使用中,ISR中强制上下文切换的宏依赖于具体移植。此处调用的是基于Open Watcom DOS
移植的宏。其它平台下的移植可能有不同的语法要求。对于实际使用的平台,请参如数对应移植自带的示
例程序,以决定正确的语法和符号。
*/
portSWITCH_CONTEXT();
}
}

使用这句可以实现一个软件的中断,进入上面的中断函数。
__asm{ int 0x82 } /* 这条语句产生中断 */


int main( void )
{
/* 信号量在使用前都必须先创建。本例中创建了一个二值信号量 */
vSemaphoreCreateBinary( xBinarySemaphore );

/* 安装中断服务例程 */   /这里的移植/
_dos_setvect( 0x82, vExampleInterruptHandler );

/* 检查信号量是否成功创建 */
if( xBinarySemaphore != NULL )
{
/* 创建延迟处理任务。此任务将与中断同步。延迟处理任务在创建时使用了一个较高的优先级,以保证
中断退出后会被立即执行。在本例中,为延迟处理任务赋予优先级3 */
xTaskCreate( vHandlerTask, "Handler", 1000, NULL, 3, NULL );

/* 创建一个任务用于周期性产生软件中断。此任务的优先级低于延迟处理任务。每当延迟处理任务切出
阻塞态,就会抢占周期任务*/
xTaskCreate( vPeriodicTask, "Periodic", 1000, NULL, 1, NULL );

/* Start the scheduler so the created tasks start executing. */
vTaskStartScheduler();
}

/* 如果一切正常,main()函数不会执行到这里,因为调度器已经开始运行任务。但如果程序运行到了这里,
很可能是由于系统内存不足而无法创建空闲任务。第五章会提供更多关于内存管理的信息 */
for( ;; );
}


/* 安装中断服务例程 */   /这里的移植/
_dos_setvect( 0x82, vExampleInterruptHandler );

__asm{ int 0x82 } /* 这条语句产生中断 */
进入中断函数vExampleInterruptHandler 。
我的问题是想知道怎么实现这两者的联系。就是想知道如何移植到STM32上来实现。 在freertos的官网上说要参考编译器的手册,可我实在查不到。
我想问这种姑且被我叫做软件中断的东西如何在移植了freertos的stm32上实现。
谢谢。

收藏 2 评论4 发布时间:2016-10-10 23:33

举报

4个回答
long龙96 回答时间:2016-10-11 10:17:12
一个人也没有么
高二毛 回答时间:2016-10-11 10:31:30
pendsv?SWI中断?官方给提供了软中断的例子,你可以查看一下。
long龙96 回答时间:2016-10-11 10:44:41
高二毛 发表于 2016-10-11 10:31
pendsv?SWI中断?官方给提供了软中断的例子,你可以查看一下。

您能告诉我怎么看么,学生,不知道怎么找。谢谢您
zhangdaijin 回答时间:2016-10-11 11:52:03
              帮忙顶
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版