最近使用VxWorks系统进行开发,由于对系统不熟悉,遇到不少问题。VxWorks资料也比较少,只能靠自己摸索。这次遇到的是SPE,即浮点指令问题。错误信息见下图。

image.png

SPE unavailable exception

Exception current instruction address: 0x04a9cb4c

Machine Status Register: 0x00029230

condition Register: 0x0000000

Task: 0x6248010 "tTestTaskName"

0x6248010 (tTestTaskName): task 0x6248010 has had a failure and has been stopped.

0x6248010 (tTestTaskName): The task has been terminated because it triggered an exception that raised the signal 4.

代码很简单,创建了一个定时器和一个任务,定时器周期性释放信号量,任务获取信号量后只有一条赋值运算,如下图所示。

image.png

程序运行后就会SPE报错。

查询过VxWorks相关资料后发现,VxWorks任务创建时默认不支持浮点运算,需要手动配置。下图是我的任务创建。

image.png

红圈为任务创建选项,如果任务内有浮点运算,则该选项需要配置为VX_FP_TASK。我用的VxWorks系统版本为6.9,不知道其他版本是不是也这样。