关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8049|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
- N. n& f4 E' j9 n! m, O
: v, H5 h$ g2 ~5 R% D: b4 g! c    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
' _6 `- X5 y4 P% ^9 x) P
3 x+ C; {; G' \& w% `其他程序段。。。。。, ~7 p  z, g7 f

8 ~8 A* J" T+ V& y; y. m   free(x_d);/ O: m& t/ ~1 b5 k2 {  L) f

1 T0 L. r1 |0 C; H; U使用DSP侧单独调试功能,验证动态申请没有问题,. A. u) q4 v: j( h6 ?* ?
% y! L7 \# Y, {# H
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* v- [; N% a6 V0 `
" L0 @. |2 P) ?

$ r6 ?% I% Y6 d3 v# z5 i5 p8 [* k* p7 H
. x  S% U" o" t! W" O: ?! ]
8 ~/ R8 t. z: o$ v

/ J# F. V8 a9 ]# N- p
* Y* j0 c! ~- a* Y8 l; b
  l; M- U- m2 a- T- o! m. A4 j+ g% \% n; S2 w
; L* a1 U: D- t9 [4 i1 Z% e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ m% x6 q8 K) x# w: v2 p我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下1 [/ D! S% C/ r* R: r
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
# a! V* `/ E- }' T" S

) a- o7 z( V/ `2 U) p是不是需要在DSP.CFG中进行配置
- j" F) H0 _: d# K( M' B我现在的配置为7 C( c0 p4 R8 Y! E5 u7 d

3 J/ c: L8 |' J4 Q$ j; U- p/*
! r4 L- [; M# I% Q6 x% X *  ======== Operating System Configuration ========
) S$ M+ t! J8 \$ L */# U6 Z: T, N! d9 |0 _( y) N( O

. M7 V% `) W) W0 q4 u- q: n/ T/* no rts heap */
: P6 U; d& {: {+ J6 x" [Program.heap = 0;* [' {3 U0 ~3 `7 J3 j6 E9 s( H$ Z
Program.argSize = 100;  /* minimum size */
5 L" f! U6 g% D; \3 W- jProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# g6 i. U* ^* j, Q& y
% S0 F$ A  J+ z2 ]4 t/* create a default heap */  D( S, f( t+ T" F0 W/ o1 \$ v
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  o/ E5 R* ?7 a+ x' A
var heapMemParams = new HeapMem.Params();6 u) e" a6 t3 j. f
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
) w7 ^- Q8 ^8 j4 |0 O, Z
, K# ?/ A) I- {0 h7 C# ?
var Memory = xdc.useModule('xdc.runtime.Memory');
5 W$ G" y  k7 ?9 QMemory.defaultHeapInstance = HeapMem.create(heapMemParams);# ?! X7 o" Q3 p. \

5 G, i4 n) b& ^, ^4 O6 ?3 j/* configure System module */, s' v  G8 Q7 }0 J; Y( ~
var SysMin = xdc.useModule('xdc.runtime.SysMin');
* x7 G$ i4 ^" @* j0 mSysMin.bufSize = 0x1000;
6 O1 B6 G. I# M" i: h, Q" GSysMin.flushAtExit = false;/ G- @7 f: t: _7 J* ?2 {
3 [4 D% o. Q- `" p
var System = xdc.useModule('xdc.runtime.System');/ K1 G8 J3 J4 P0 F1 B' \4 ~
System.SupportProxy = SysMin;
5 h: `' y; f2 ~/ M* Y& s+ l" z) K! O# ~. l
/* configure SysBios to use the lower half of Timer 1 */' V7 e! E: t8 [6 B# ~( L& {
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( B4 S! s! ]' i0 S6 [$ i
var Clock = xdc.useModule('ti.sysbios.knl.Clock');, x4 \6 B) J% V
Timer.timerSettings[1].master = true;
) L% t, ]' R) aTimer.defaultHalf = Timer.Half_LOWER;* v( B; N$ c+ {3 f4 Z1 {
Clock.timerId = 1;
' _; i3 C( G" g# P3 z: U7 h
: d/ {$ _$ m5 ]# |8 C
4 \  x  K* `3 [, |( j: v% g/*
, m3 w- v' i3 K; w *  ======== Miscellaneous Configuration ========; ?: Z' P; i9 L) F( z- r0 |. R
*/0 Q- u3 G  G: M+ u3 ~

" u0 G5 |0 e( a9 j/* set default diags mask */" A6 c0 ]! w7 j
var Diags = xdc.useModule('xdc.runtime.Diags');* p3 E0 U% }" [
var Defaults = xdc.useModule('xdc.runtime.Defaults');* B% i( u$ w* _2 B! n. b* x

' ?- g2 G' a* XDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
4 T6 Q7 }1 l; qDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- y( j5 J* J7 B: @1 x0 P* L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; @& \4 w4 t# ]1 D$ s! IDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
' H7 x' I/ K, tDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */: _1 @+ q+ i) W5 e0 }; M+ n6 t) {; R
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
4 f& {* N& c& R; m! G" V* aDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
% z: p1 G, d7 _" r9 @& ~  b( _) JDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
4 m, V4 G% t( h. b, ODefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;$ g8 j/ m) z6 R
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;4 }+ s2 T8 @& k) E( C  Y; C
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 z3 m. q2 d- C0 \Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;6 D6 k3 |8 C, m9 w" w
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;3 U! F' B+ d9 _% p
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
& \9 [  \. |  l7 W: x% }9 H3 l6 c5 d4 |# f/ A, K5 S
/* override diags mask for selected modules */) M% i% o& U( o! |1 T$ s
xdc.useModule('xdc.runtime.Main');
- h, {% n) Q+ G; eDiags.setMaskMeta(
( @! u% Z2 G9 [' b1 C    "xdc.runtime.Main",( S3 @+ @. M, x* B) i
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 m* }" f* ^6 W' ?! {, _8 N5 G7 G    Diags.RUNTIME_ON
7 V6 q8 S  P& _, u7 u);: A; x% @! A; E# g3 G/ Q9 V! m

) G# {8 T8 x8 H& nvar Registry = xdc.useModule('xdc.runtime.Registry');
3 e- n- o2 W) M/ x$ v& u' V. }, m- XRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
# {8 R  `# t$ S6 V& N* LRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
' C. z. [) w3 [' W  GRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
7 C- T3 e9 g! J0 ?+ C! }, J, ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 l' n/ \) p4 r5 Z$ v
* U" i+ o! {* X* R! A! z3 l
/* create a logger instance */
& h" f( z7 R$ Z3 yvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');& W9 G5 f% c" `1 z3 _
var loggerBufP = new LoggerBuf.Params();; d' g) k! ^7 C6 Q' ^) F
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory *// T& ^, l1 @0 f: S+ I& {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 O0 }+ B5 b0 }. x* N4 R
6 S" f# w+ E1 f3 v3 h
var appLogger = LoggerBuf.create(loggerBufP);
6 c- {: r& }8 p; i4 w: T& @appLogger.instance.name = "AppLog_Core1";
; H2 C! k4 R, M& _: N/ y3 R- QDefaults.common$.logger = appLogger;
: O7 L3 D0 c% P% |Memory.defaultHeapSize = 0x8192;   
( {. k2 t9 `- A, B; [  G" {, c5 ?7 GIdle.idleFxns[0] = "&LEDStatus";/ l4 _) k2 p2 N1 F, |
Cache.initSize.l2Size = Cache.L2Size_32K;
( f8 j$ c; K( y; z. [, _0 |9 j1 B# M3 |) e! D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */, r' ~8 `' S: v8 b
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
' H2 T7 b8 ?6 b: u8 l9 G& I' e) I; ovar heapMemParams = new HeapMem.Params();
% d; N# L; Y5 M2 T+ wheapMemParams.size = 0x4000;
, N- Y" s0 P9 C
7 x. n* O7 H; r( d# avar Memory = xdc.useModule('xdc.runtime.Memory');) p7 O0 v9 H, T& t, a: u7 T
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);$ D) E1 ]: I# z8 T8 R3 s
+ V: A2 r) K7 l2 U' W
我大约calloc  每次共计大小为5K*16bits,; X8 m) L/ {( n9 R: ], \3 q
而默认配置才0x4000、需要改大。/ I, G1 t3 L! _! v/ F* H) W
( w1 o5 S9 U! B9 \7 _" D
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% |  r2 m* Q5 T1 U0 |% i/ u: G
Program.heap = 0;( o% s" m' H, [. \/ r) Y# ^4 U( i
Program.argSize = 100;  /* minimum size */5 H  v% ~1 \& q6 X6 p( o* \1 A. {
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-3-20 13:10 , Processed in 0.041533 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表