英飞凌TC264之双核互斥
TC264是双核单片机,在用两个和运行同一资源时会出现竞争的问题,例如CPU0,CPU1在同时调用一个串口时会出现竞争,导致从串口输出值出现乱码,我们可以通过软件来解决这一问题,这就类似于互斥锁。
双方在在开同一扇的同时,谁先拿到钥匙谁就开门,开完门后放回钥匙,等待下一次开门,这样双方就不会出现资源竞争了。
TC264底层也给出了解决方案:
IFX_EXTERN boolean IfxCpu_acquireMutex(IfxCpu_mutexLock *lock);
boolean IfxCpu_acquireMutex(IfxCpu_mutexLock *lock)
{boolean retVal;volatile uint32 spinLockVal;retVal = FALSE;spinLockVal = 1UL;spinLockVal =(uint32)__cmpAndSwap(((unsigned int *)lock), spinLockVal, 0);/* Check if the SpinLock WAS set before the attempt to acquire spinlock */if (spinLockVal == 0){retVal = TRUE;}return retVal;
}
例程:
CPU0:
extern IfxCpu_mutexLock g_MutexUart;
main()
{if(IfxCpu_acquireMutex(&g_MutexUart)) //判断互斥量是否使用{UART_PutStr(UART0, "这里是CPU0 \r\n");IfxCpu_releaseMutex(&g_MutexUart); //互斥量释放}delayms(5); //这个时间可以让CPU1来使用互斥量
}
CPU1:
IfxCpu_mutexLock g_MutexUart; //设置互斥信号
main()
{if(IfxCpu_acquireMutex(&g_MutexUart)) //判断互斥量是否使用{UART_PutStr(UART0, "这里是CPU1 \r\n");IfxCpu_releaseMutex(&g_MutexUart); //互斥量释放}delayms(5); //这个时间可以让CPU1来使用互斥量
}
按照这个思路我们也可以设置一个全局变量来充当这个互斥量,令这个全局变量为1(钥匙),其中一核拿到1(钥匙),让这个全局变量为0,此时另一核判断全局变量为0(没拿到钥匙),拿到钥匙的核中执行完相应的程序后,再令设置的全局变量为1,这样就是先抢钥匙,抢到钥匙在进行相应的程序,就不会存在资源竞争的问题。
英飞凌TC264之双核互斥相关推荐
- 英飞凌TC264学习(一) GPIO
英飞凌TC264学习(一) GPIO 1.综述:基于龙邱库函数 摄像头接口 龙邱神眼或者OV7725模块 ● 数据端口:P02.0-P02.7口,共8位,接摄像头的数据端口: ● 时钟像素:外部中断第 ...
- 英飞凌TC264学习(二)外部中断
英飞凌TC264学习(二)外部中断 一.外部中断说明: 1.256个向量第一个也就是第0号的中断向量无效.仅用来占位置.所以一共有255个向量,但是要占用256个向量的位置 2.向量表以优先级别排序数 ...
- 英飞凌TC264学习(四)串口通信UART
英飞凌TC264学习(四)串口通信UART 串口部分的函数在LQ_UART.c中 TC264有四路UART中断,需要中断可以来配置中断,与外部中断一样,中断服务函数,中断号,优先级,不需要中断的话就不 ...
- 智能车竞赛-英飞凌TC264核心板-开源
英飞凌TC264核心板分析 全国大学生智能汽车竞赛转眼间已进行到第十七届,在参加此次比赛的组别也在积极准备,都在为7月份的车赛取得优异成绩而努力奋斗着.前一段时间,组委会也将部分组别比赛规则公示.作为 ...
- 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC
[FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 一.编码器选择 二.通讯方式 ...
- 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制
[FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制 [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(6)- foc速度闭环控制 一.电机选择 ...
- 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(2)-SVPWM波实现
[FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(2)-SVPWM波实现 SVPWM波实现就是无数电机foc控制的核心,所以这一节就如何在英飞凌无刷驱动上时间互补pwm波形做讲解 [F ...
- 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制
英飞凌TC264无刷驱动方案simplefoc移植(3)-FOC控制原理矢量控制 无刷电机是矢量控制,是交流电机调速的核心,也是Foc控制的核心 以下内容学习自[自制FOC驱动器]深入浅出讲解FOC算 ...
- 英飞凌TC264之ADC
ADC: ADC理论有8个转换器,可同步转换:每个转换8个通道,精度为8/10/12位. ADC端口AN可以作为输入口,不可作为输出口,与ARM单片机不同! ADC初始化: /* * 参数说明:cha ...
最新文章
- Effective C++ item01 尽量以const enum inline替换#define
- 【Qt开发】编译时报undefined reference to问题的解决方案
- python diff函数_使用Python创建你自己的diff工具
- python基础(part11)-作用域LEGB
- 7-45 银行业务队列简单模拟 (10 分)
- 最强android平板,最强安卓平板!华为MatePad Pro来了:搭载麒麟990
- 建议考事业编吗?为什么?
- ‘python3\r’: No such file or directory
- ITA 测试时之数据准备(大量数据导入与导出)(主键的最高位最好有值,而不是0)。
- 矩阵连乘 动态规划_利用动态规划解LeetCode第62题:不同路径
- java web 播放器代码_各种网页播放器代码大全
- 【无线安全】Kali 暴力破解 WiFi 密码步骤详解
- 鸟哥linux命令行总结之——文件的压缩打包和备份
- dede 表单必填_织梦给自定义表单增加必填功能,织梦表单必填设置
- 西数硬盘刷新固件_关于西数硬盘转速的fake news
- android 打开微信客户端,Android中接入微信客户端心得
- 微搭典型应用需求梳理
- TileMap大型地图网格属性设置
- 女孩子付钱用计算机,“让女生付钱太没面子了,你转账给我吧。”
- POJ 3165 最短路 floyd
热门文章
- 蒙特卡洛未来股票价格matlab,股票组合价格蒙特卡洛matlab
- QGC地面站配置PX4Flow光流传感器
- 贝叶斯学习(Bayesian Learning)基础篇
- Elasticsearch搜索引擎一些参数含义和用法
- 联想ThinkSystem服务器 安装ESXI 7.0 踩坑记录
- 南师大计算机学院博雅课的要求,南师大博雅课程
- 搭建K8S 的dashboard的坑the server could not find the requested resource
- 雅可比(Jacobi)及高斯-塞德尔(Gauss_Seidel)迭代法求解线性方程组的matlab现实
- 行测-言语理解选词填空必备词语汇总
- Android各大版本支持的新特性的汇总