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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构+ ~" {- M& L+ C% K4 Q* d6 I% {$ A
8 q9 V- I! @2 V; V
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
6 N7 g) f5 E# ]. k$ K4 J$ U
, F0 O; B+ W, j0 M; l1 N) \其他程序段。。。。。
9 }: v0 [4 g# t+ e4 Q' u' W+ [
2 W% y8 x/ {( L   free(x_d);$ Q9 t2 N2 @' J

8 g1 q: K7 _8 ~9 Z7 G使用DSP侧单独调试功能,验证动态申请没有问题,% J; l* x  i9 [$ g5 X' |( o& @
7 S# y/ ?# f/ |3 I
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。1 a. U6 ^+ f. ^# P. G5 T4 D, g
1 w) K* J8 I. ?$ H2 o' Y' c# z
. g  d3 H3 g2 r- f7 Y4 R' h5 f- q
6 D; e1 ~! Z5 \: n

& V& F& e  c: d' q+ }0 f" z9 l5 r. v3 h7 S* g' d
% e9 Z: L2 a; t' {( J# M

1 W, i5 e7 {+ ?. O7 N  x0 I7 r$ V  ?4 ?0 L

7 e" ]. i% n3 ?* K! p1 i& g& P  Z+ |
1 {4 y) {% L0 ]( T6 n1 O! K6 I  Z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 B4 h" V7 h8 kProgram.heap = 0;
2 R6 a+ e1 r. Y" O% L) {  b  LProgram.argSize = 100;  /* minimum size */
/ ]7 {& O/ ^) s  b; `1 ~Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ I5 f) s0 L2 [) R- ?0 Zvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');8 K  p$ V$ w/ ^2 h: x+ F2 r
var heapMemParams = new HeapMem.Params();0 I3 T) P$ f* w' v0 h
heapMemParams.size = 0x4000;
: Q6 d5 T) O* d" _- x7 F2 j7 [: D5 M# B' J( Y
var Memory = xdc.useModule('xdc.runtime.Memory');
* A8 e0 n# b, i7 |& V  g1 @! YMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 y5 A4 w# y2 v8 W$ G/ W3 X8 d7 P8 e, A; c: q6 i- E
我大约calloc  每次共计大小为5K*16bits,9 ]- s- j3 d8 x3 `* j1 R
而默认配置才0x4000、需要改大。4 w( X0 a; M0 P+ V
& X1 }! j: g* X7 z, n' F. |% p2 L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
9 _6 ^0 {5 D6 J. C9 b3 H5 E我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
) p1 ?# @6 q: `(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; X0 A7 L! m: J2 v. |6 X. W

  x6 [" m( j9 K( H7 l是不是需要在DSP.CFG中进行配置
. B) W. e0 R1 q. n$ I我现在的配置为
. S4 J+ f- W; T' H! L0 J% R% ?* B* @5 z
/*, J- ^5 s! w( Q& A4 e) ?9 }
*  ======== Operating System Configuration ========3 F* n" c; l5 I$ f  J1 i1 A
*/  C% x8 ?6 z7 k6 L3 v/ q$ ]
5 D! D1 n4 O3 j+ H/ H) `( x
/* no rts heap */
# k- n, c3 `/ p8 F$ D8 kProgram.heap = 0;
$ ]# B3 k0 n" P9 _9 W& eProgram.argSize = 100;  /* minimum size */2 {( }$ [* j# ]" q' h9 n' K0 s
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ r( G) Y) G" W) O

, ~! I' Z2 w2 Y, r/ A( k: v/ j/* create a default heap */8 B: S2 w& a6 g8 A% ]9 w+ L3 ?
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% G. i. E; B' T1 n  S$ R
var heapMemParams = new HeapMem.Params();# ?7 v9 o0 T- t/ m
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大, I3 A+ e# I( S0 K3 R9 s) Y

; \1 Q4 P+ G" T( |' w! ?
var Memory = xdc.useModule('xdc.runtime.Memory');
8 F" y* c" V4 w) N8 fMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
* A% ?: p$ k1 b+ ]" k5 }
2 \; o, {  ]/ q' k! t7 @+ l0 y: T5 O/* configure System module */5 {1 q7 y4 X! D3 D. E
var SysMin = xdc.useModule('xdc.runtime.SysMin');
8 t' }, K" K4 ]1 h  X! qSysMin.bufSize = 0x1000;
! q0 d3 }+ A4 SSysMin.flushAtExit = false;- M/ a" \" N# F/ C, _$ U- @

- K  E" Q8 I( C3 u1 k. d% A) Q( Wvar System = xdc.useModule('xdc.runtime.System');
, z7 g7 V  U' HSystem.SupportProxy = SysMin;
6 I7 i8 h0 s, B6 r' x0 n
/ T( {( k( }9 c% m* K3 }/* configure SysBios to use the lower half of Timer 1 */& u( ?* @$ ~/ B
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
: B/ u1 R1 p: ~% ~. e: @var Clock = xdc.useModule('ti.sysbios.knl.Clock');
& w) F/ B" `7 r2 D5 kTimer.timerSettings[1].master = true;, @# {. N# i# m
Timer.defaultHalf = Timer.Half_LOWER;8 h8 T0 h( \/ S0 [
Clock.timerId = 1;* b. e; I5 Q) E, p" o9 y% N

! Z) ^- N9 g9 t- m! T4 x6 W  ]9 A! C  P  {* J
/*% v5 o$ q0 I7 K) i
*  ======== Miscellaneous Configuration ========
& s! F& V0 l3 H$ a */5 L- a& e% f' Z. C+ Z4 }* K
, M6 i+ B6 x3 N# ?/ j8 G( K/ T: W
/* set default diags mask */
. `  v& e6 a8 svar Diags = xdc.useModule('xdc.runtime.Diags');
0 w( W1 h/ }6 h4 A3 ~' \* g5 Lvar Defaults = xdc.useModule('xdc.runtime.Defaults');( h; P& O& I3 f3 t. u

: w/ p6 N( `7 `1 O7 @% xDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 @# z# |$ l7 i7 n9 _8 `& ?Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
8 q  P( Y3 K* _5 n' dDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
+ B6 R4 Q$ _  JDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
  i/ U7 h) m" Q' z8 LDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */) [$ B& m' v$ S$ U2 x- Y1 e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;" H  F! W+ b+ m3 {! w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
9 q! a6 ]4 V  E) e* y# B9 |Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
; t* c$ o0 k2 t1 bDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
( \' m! q6 I# [$ C. e" X( P1 w- x  K' ]5 GDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;6 q5 f5 c+ {  X
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' T) C+ q. t- P
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
1 e# w6 _$ m% L1 a- r$ ~Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  M1 ^" P! W" B6 Q
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;) C. ]) ]1 k0 i% J4 \& ~

' z0 g+ S5 G$ {7 u/* override diags mask for selected modules */
& Y- P6 c: f: z- R! j$ Z% Xxdc.useModule('xdc.runtime.Main');+ j) [4 U9 ^: p( k" u# f4 S
Diags.setMaskMeta(
2 G4 X: d  O4 _# g! I; H    "xdc.runtime.Main",
0 p) q0 c# h' G5 ~' z4 o4 h9 F    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ L5 p5 m" t1 m; d( E: e    Diags.RUNTIME_ON. R9 f; q) u4 T" x" F
);
. Q* L9 U2 Y! \  P) B4 j6 ?& \$ w5 l7 K$ i/ s* D) A3 w
var Registry = xdc.useModule('xdc.runtime.Registry');8 ^( n) j" ]9 ~- l9 W, M
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  E; E+ a4 U; aRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: d) K# Y5 E$ `
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
9 ?: Z& m+ \! ?6 H( O1 H% A1 BRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, _$ n1 j, s0 }. a4 V/ `# O
* A( }* W/ E" ~, `0 x
/* create a logger instance */
5 d/ J% |1 N! u$ H$ q9 |2 ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ e+ W# r; G! O5 i; Y7 ?, nvar loggerBufP = new LoggerBuf.Params();% P' g1 Z' j, I& u$ L( _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
3 T( }6 b. K: p/ q4 B3 uloggerBufP.bufType = LoggerBuf.BufType_FIXED;+ N" F! F. T. K

* i3 W8 Q; i& m" Tvar appLogger = LoggerBuf.create(loggerBufP);# C' _' L7 K3 F" E) B
appLogger.instance.name = "AppLog_Core1";
1 y( M" u, x  W2 }" H' lDefaults.common$.logger = appLogger;5 |3 p* s' d4 |
Memory.defaultHeapSize = 0x8192;    2 V, p" T, j5 W* t' J& a
Idle.idleFxns[0] = "&LEDStatus";0 d' H. N' B" l- E% h. }; B& `0 ]
Cache.initSize.l2Size = Cache.L2Size_32K;
3 w' K+ s; F- O6 f$ v' u
/ v7 x  c+ k+ T! ?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-6 10:02 , Processed in 0.042390 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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