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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
; v* t# M( `; j; n9 F% G2 T
  F2 U7 P0 g0 X6 v    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. W/ m8 M, d0 Z; c* j7 q# \! ^  ?, s! e+ f1 ?8 K; k6 A7 s7 m
其他程序段。。。。。
8 d+ @8 l0 Y$ V
$ X) [+ R! Z; e   free(x_d);
  N+ W' d+ Y! A& a
9 h( n% N! m( n6 n) P. P使用DSP侧单独调试功能,验证动态申请没有问题,
1 P# W$ ]0 y  `8 q8 `
( x5 C- \# H, \; u; P' ^但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。5 f' r6 `0 z' L+ g- T

% p8 k1 B1 `0 c! e. X1 w) d$ [4 D! t. F; J6 M/ B! _- \( U* y
+ a* A& F% z" l
  n* ]3 ^7 w; Z; l. O+ ]: J& t7 i

5 A" n$ F( _- E# o" b2 w7 F, y6 [" a# o7 e3 _2 ]% Y* x0 O1 l

/ [/ w2 A" Y* V% I- L" E/ P6 c5 _" D! F

9 R" p+ U: ^5 z; J% p& q, p2 W9 V0 |: a7 O/ l; M! K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明% q2 Z. v/ b4 y) [6 L$ z
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
7 H, {; V" c# `& e" ]* @+ y6 g(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. ^$ W, E( m5 A8 K1 ?

; r% o9 X* e& [* m$ O是不是需要在DSP.CFG中进行配置; @' h, i- m$ S$ ]3 A
我现在的配置为
1 X9 T9 ]- q! I# j2 w  d5 d/ B
  U& ~0 O. a6 B1 f: v/*- e  L8 U% e& @7 b/ F% p
*  ======== Operating System Configuration ========( y4 g/ h0 h3 C) H$ @% d& l( c
*/4 n! O7 [" Y: o, d- v
- `8 s9 `6 J5 L) ^5 B
/* no rts heap */' t6 w# q) i$ }" V
Program.heap = 0;) `7 v  G6 a9 F5 H1 U) v  R$ n
Program.argSize = 100;  /* minimum size */2 m' Q$ Y: o0 `% g7 \9 R, I' P
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
7 y/ `8 ^( n! _3 Z5 {* I  ?/ ~8 T# ?
/* create a default heap */
8 R. B5 T; r- v4 O1 I9 M" M0 Xvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 m+ G7 B0 [; J8 @' }6 L
var heapMemParams = new HeapMem.Params();
1 p7 ], `8 U* x; \* l/ WheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大" i7 [0 E, V# Q; Y; ~' `% ^

) L6 G- x; o6 m5 l1 ~/ B
var Memory = xdc.useModule('xdc.runtime.Memory');
  [  ^. W5 X3 A# ^9 e9 f7 q" oMemory.defaultHeapInstance = HeapMem.create(heapMemParams);+ F1 k' q+ ~- Q) v0 X2 {

' Y7 V% J) u  e5 M8 z2 Z/* configure System module */
- m2 o2 G+ g, T( |9 Tvar SysMin = xdc.useModule('xdc.runtime.SysMin');
2 `8 m8 M) z; p3 I# g* f+ @+ X( HSysMin.bufSize = 0x1000;
2 ^* ^4 f7 q2 s8 W) x( L  sSysMin.flushAtExit = false;3 C# M3 a# T3 C9 R/ c+ {3 D+ h
. p  P* \' X0 V
var System = xdc.useModule('xdc.runtime.System');
. W# Y8 j" }+ gSystem.SupportProxy = SysMin;, F( o: J* X  F* a

% v/ x; k$ i3 B6 `' h7 s0 q/* configure SysBios to use the lower half of Timer 1 *// N# U1 Y8 ?) \6 p
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
7 {- N( M( Y; |5 jvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 u* j, j) i5 x+ B/ R$ I
Timer.timerSettings[1].master = true;7 I) Z$ P$ i! O; ?( |1 Q4 I& C1 {
Timer.defaultHalf = Timer.Half_LOWER;: S; j+ q/ V; w8 @7 E9 W
Clock.timerId = 1;
' ?" s3 ]; e+ L, B8 Z% ~1 D( [* q
: w; P; d& K8 t! H# T# W
/*3 }6 a* ^& t3 O3 ^& q
*  ======== Miscellaneous Configuration ========
1 B) h4 C3 i& U! n  H0 M2 ? */7 ^0 w- g- }; B. S* `) E! e% Q. S

' ^* B3 U- }9 P; n( P6 Z/* set default diags mask */
' ^/ X7 Q$ A7 E8 R* hvar Diags = xdc.useModule('xdc.runtime.Diags');
5 a7 t2 h6 D5 K6 u6 m7 o- Ivar Defaults = xdc.useModule('xdc.runtime.Defaults');2 t2 J6 C2 p8 z% z
9 p0 G4 D" m% N4 |" h( l- Z# H% h
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
3 a  j0 n" t7 Z- X" P$ j* xDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
) L: F5 `$ Y7 \Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ W7 R# \5 K3 f+ v& A8 x. T7 RDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */. t" \# x% n- Y( F
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
6 I& v9 h+ g9 }2 m+ Q. j: eDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;6 J6 x) ~9 O$ M7 N/ O+ n
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" t' K3 H; l5 T' |  }, B4 vDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
$ N+ q) @' @4 _: KDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;+ _( r) T1 ~  U+ N1 T) E  N
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
6 x# B, w! A( w9 c" B% VDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 `9 K6 }; p1 K  L/ \
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
, R4 g2 X, y& J! ^! }Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
3 d. ]0 I3 y8 B2 Q/ y  `Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 o$ x# z7 g7 a8 H- ~8 H
' f; F" c7 t( _5 I" D- @/* override diags mask for selected modules */3 m# W" X3 z4 d" O$ G2 N
xdc.useModule('xdc.runtime.Main');3 @/ N/ W$ b* I) b2 d1 F. M% i
Diags.setMaskMeta(
% F. y" V5 ?- P0 \& I! y2 C' J    "xdc.runtime.Main",& [+ _) J* K+ ^/ O0 Y
    Diags.ENTRY | Diags.EXIT | Diags.INFO,8 u. U+ {9 n" i3 ^
    Diags.RUNTIME_ON
) Z+ c" _. p6 c0 l& I2 D: z3 M# j);  V8 O) d' m, C# X& ?
7 _6 ]7 {7 Z( k$ v  K
var Registry = xdc.useModule('xdc.runtime.Registry');
! r8 w; n0 v+ b  b, i$ i; S. m% `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;1 W- G5 P2 L; T# F7 j1 S
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;' w# f! M- }4 E! V
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;: k! e$ x( p' M8 l  i+ Z9 h
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
+ {- ~' d2 X$ u6 Y2 z0 Y
* s: l7 y* P. v9 A/* create a logger instance */3 J( w/ ^* L) d# o! E$ K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');% {8 U- g/ S2 Z
var loggerBufP = new LoggerBuf.Params();5 g, Y2 J$ j. O( u. J8 X
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */$ Y: \* D9 U5 V
loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 q' [' e' X2 g8 {
* W3 D  p! b1 `+ I4 ~
var appLogger = LoggerBuf.create(loggerBufP);' ]( @4 E0 l) Y; r, Y% s5 U
appLogger.instance.name = "AppLog_Core1";
9 E! Z# m9 ^! A: K& W2 FDefaults.common$.logger = appLogger;
$ q- k- G: G* b4 L/ R& ~3 ^- sMemory.defaultHeapSize = 0x8192;    6 x% i: w( N, O) Y# h) c8 H6 N
Idle.idleFxns[0] = "&LEDStatus";% \  k3 d$ k' u: M% W# s* a
Cache.initSize.l2Size = Cache.L2Size_32K;
7 @: W) k* Z( n8 m
$ |$ I* o( I6 Y# u
回复 支持 反对

使用道具 举报

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 */
3 M- Z( h- v6 X2 E+ x1 @var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
. J! j4 ?( l/ X* K) Svar heapMemParams = new HeapMem.Params();/ @$ ?  q1 Z" F, V' d
heapMemParams.size = 0x4000;" p% E, j4 X  K/ b$ ?3 O
- Q; S$ @6 r( F( I& I
var Memory = xdc.useModule('xdc.runtime.Memory');
% c. W: d# I+ C! ?  M2 hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);% w0 S# l1 Z6 u3 T

6 U- a" G3 r5 Y+ }8 J我大约calloc  每次共计大小为5K*16bits,
3 I& v4 Q0 ~; w; S; R而默认配置才0x4000、需要改大。
9 K6 J, l7 m. d- ^+ q
6 ^8 l0 R* V- k. `
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
/ T* z. b) F& p% \1 EProgram.heap = 0;7 K+ [" K  D2 S) ]
Program.argSize = 100;  /* minimum size */8 e' Z/ S; e9 ^1 Q6 [# h
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-25 12:55 , Processed in 0.046524 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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