文号
t70661
阅读
14336
回复
10
收藏
7
多核心MCU是怎么编程的?
2015/03/26
IP:北京
r_3053701.jpg
像是多核心Cortex-A8 A9 这样的CPU跑裸机的话多个核心是怎么编程的?
还有像是不对称多核心 一个arm内核 一个dsp内核这种是怎么编程的?
[ 修改于11年9个月前 - 2015/03/26 19:51:46 ]
11年9个月前IP:广东
759014
1楼
两个不一样,多核对称架构的必须上系统,否则自己写作业系统(难度极大),所以基本上都是用linux/WindowsRT,
由操作系统进行调度。应用要用到多核的话只需要优化程序为多线程应用即可了,对应用程序来说是透明可移植的。

非对称多核芯片,两个CPU进行通信使用MessageBox,可以理解为一个硬件FIFO,向这个地址写入固定的command,另一个CPU去读取command处理,所以通常大的CPU跑的是linux系统,另一个CPU是裸机或运行很小的系统,开发环境和交叉编译工具也是独立的。通常的做法是为这个小的cpu写一个driver,初始化的时候加载固件,然后通过ioctl给调用driver发command让小的cpu干活。

非对称的多核的芯片开发需要很多的硬件资料,一般是SOC原厂负责开发
引用
评论
张静茹作者
11年9个月前IP:北京
759021
2楼
引用 smith:
两个不一样,多核对称架构的必须上系统,否则自己写作业系统(难度极大),所以基本上都是用linux/WindowsRT,
由操作系统进行调度。应用要用到多核的话只需要优化程序为多线程应用即可了,对应用程序来说是透明可移植的。

非对称多...
1,如果像是多核心A9这样的cpu非要裸机的话,只能用一个核心吗?
2.如果是跑操作系统,多个核心是怎么调度的?
引用
评论
11年9个月前IP:广东
759025
3楼
引用 张静茹:
1,如果像是多核心A9这样的cpu非要裸机的话,只能用一个核心吗?
2.如果是跑操作系统,多个核心是怎么调度的?
1.可以,实际上uboot里面就是这么干的,不过这样运行的就没有多核的优势了。
2.多核调度依赖SMP算法,linux的代码在linux/arch/arm/smp.c里面,多核调度还是在基本的时间片调度上面加的,这部分搜索linux的文档可以查看,不过不同的厂商会开发自己cpu-hotplug模块(CPU开关核算法),基本上还是依赖于当前系统的CPU、IO负载来决定是否开关核,这对功耗很重要
引用
评论
张静茹作者
11年9个月前IP:北京
759028
4楼
引用 smith:
1.可以,实际上uboot里面就是这么干的,不过这样运行的就没有多核的优势了。
2.多核调度依赖SMP算法,linux的代码在linux/arch/arm/smp.c里面,多核调度还是在基本的时间片调度上面加的,这部分搜索linux的文档...
听君一席话,非常感谢!
引用
评论
11年9个月前IP:广东
759045
5楼
引用 张静茹:
听君一席话,非常感谢!
我主要还是搞Android系统框架的多,内核只是略知一二,内核的学问很大
引用
评论
11年9个月前IP:美国
759056
6楼
自古2L出真相
引用
评论
11年9个月前IP:四川
759127
7楼
2楼不是沙发吗?
引用
评论
11年9个月前IP:湖南
759156
8楼
学习了
引用
评论
11年9个月前IP:浙江
759170
9楼
学习了。。。。。表示正在攒钱买cyclone V的开发板,玩玩嵌入ARM的FPGA
引用
评论
11年9个月前IP:浙江
759187
10楼
学习了
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的