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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构0 j8 k/ {. N% ~$ o

7 r; B. h# ^' C# ^    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
" J# }( i% j$ c- E& G/ h. [
+ p4 `2 Q* T0 R( ?. n+ a其他程序段。。。。。
0 t4 F- I2 X! K2 o/ M3 V9 b% | 6 a* t2 e' X8 ^' Q5 P1 K
   free(x_d);8 c$ M1 e# B6 |4 ?& A! M: o
" W" i8 P& Y3 o* ^6 R
使用DSP侧单独调试功能,验证动态申请没有问题,
& R$ T/ J6 R. o6 x' `
0 J: A9 `/ y' P" d. |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# h  H  t. t0 x# ~; o! q7 n% y

/ }' Y3 `* b( S1 M/ q
" \/ C8 Z3 J- ^) {( ~; l8 v
5 V; o4 i  q4 r+ ]' K
& Q: A. p9 ^! _& r5 m; _4 y
& ^  }  g9 I6 g8 }1 Y
) \3 B. o2 \1 i' _; ?. s2 e& o3 t$ r1 K3 r- R
9 C* O8 J. s5 b# B" f$ \6 E' D& t

$ f' o2 b* b. O- j8 T& ^- S. y
: s; d; I% w+ x1 T  \8 J% n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明& E2 ~5 o6 u$ }* y4 h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下. S$ c% O- `! E+ ^( e) R1 h9 C
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 E& i/ |  ]+ B' m& m7 f

0 ^. B$ T7 D9 A# ?; F是不是需要在DSP.CFG中进行配置
% v! s0 A! L: b* ]- Y我现在的配置为
4 V0 t( Q9 \2 ?  }8 e' ?
  D9 e0 d* J- Y/*
# E& P' _% K2 h! y *  ======== Operating System Configuration ========6 {- h/ |: R1 K9 w6 m1 c
*/
2 j& J4 |/ U+ {# f3 R% U, k1 M2 {/ Z# ^! ~2 A; W
/* no rts heap */+ w0 Z1 y! p( v
Program.heap = 0;. m8 [/ h9 Z/ l' u# w; F
Program.argSize = 100;  /* minimum size */
+ K  Y3 C( Y/ N" BProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
# \" r3 `# r$ B3 H$ W
  h5 T# C% d) P: D/* create a default heap */
9 m% P4 G2 u( }* Uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');* k9 q! W+ E6 [
var heapMemParams = new HeapMem.Params();
' Z4 h: h0 o7 l& `# L( I6 m+ @heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( D1 B& t8 K8 G4 l! h$ o' E1 ?5 ^1 r
) o4 x- Q3 v" G# G* a) W6 L( S
var Memory = xdc.useModule('xdc.runtime.Memory');+ y2 r; ?5 ?+ v/ G5 ?; A
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);" V. r, B" C1 p$ l. r7 v8 y
8 _2 k6 L  r2 O
/* configure System module */
  S7 v3 R6 V& E0 ]var SysMin = xdc.useModule('xdc.runtime.SysMin');- b' Z9 _( Y3 o/ w& p' z( \
SysMin.bufSize = 0x1000;
0 U7 f% c7 \+ l, O6 I7 G3 d, BSysMin.flushAtExit = false;0 u( b( {1 G( _4 e7 Q, z( Y/ b
9 V- k$ {" ~$ k- ~7 ~: v4 ~
var System = xdc.useModule('xdc.runtime.System');; Y5 {( K1 N) k$ W
System.SupportProxy = SysMin;
  b+ M' {' i" s$ D% Q. W. s8 x! T3 \
/* configure SysBios to use the lower half of Timer 1 */
* e" X7 ?8 f- }; n' n& Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');1 D9 e" z" ^1 Q
var Clock = xdc.useModule('ti.sysbios.knl.Clock');5 s1 W3 C! U- p
Timer.timerSettings[1].master = true;) |2 X+ t1 D  K2 r. K
Timer.defaultHalf = Timer.Half_LOWER;
  W% U  @: T# A/ \8 YClock.timerId = 1;, E, G$ Z6 J  j

4 g0 f* ~& V" [. T, }: y# _1 L% p. d! f2 x
/*
# u/ B+ @6 ]4 j: Q2 x/ [7 A& I2 } *  ======== Miscellaneous Configuration ========
, p9 a9 e6 S- ?! u& w+ j! \ */: G8 o; F, v, p& S% o0 t1 M

9 M" V$ p- ?; U. l/* set default diags mask */
& _& ]2 p- W3 l* A2 C: q; hvar Diags = xdc.useModule('xdc.runtime.Diags');. U- L7 m% Y9 {' a* s! V
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) u) R7 N0 Z0 o( d! T3 U' l4 \; |& k& v: ~
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
; S( f/ W! l. A; g* y$ PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 U$ ]3 t9 L# m( o& Q+ f
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
3 E3 l/ w9 T! b: oDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 t$ P" _* B, d6 m
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */" N# W7 `1 m7 T* z2 W. R8 {4 R7 o
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;* ~3 N3 z5 }" T/ E- _: Y
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ v% \( ^/ z2 E/ D
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* M2 o$ r9 F/ J" y4 l  R9 o5 f! gDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;1 h) H8 s$ b3 a, c  X6 ^$ ~
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;' y  Q7 j- j9 \; A& X) b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 i# o& n) T9 o3 G6 Z
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;+ j% }- C* \$ q: k! Q6 G6 J9 R
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
2 ^! F; e5 i% E  b4 M. u% dDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;' H2 u; S7 p4 ?
) N7 O+ z" j8 P* z3 R
/* override diags mask for selected modules */
  W  N% q5 I# M0 ?- h) Z& I# }2 Jxdc.useModule('xdc.runtime.Main');, T. F; p' q2 _
Diags.setMaskMeta(: m6 h3 j. i& ~; h( c
    "xdc.runtime.Main",
6 J7 J) ^7 G1 U    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- }. w/ d; P9 G6 \    Diags.RUNTIME_ON
( m9 ~+ b' V# G6 Y# n5 f3 d" ]);
6 U2 n. _6 y5 N- q4 F' D
3 s$ ?6 U" z2 E) Y% uvar Registry = xdc.useModule('xdc.runtime.Registry');
& W1 c1 v. |) v, b( d- RRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;# U* r5 z9 ?- K) `. E
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;/ c$ g: K& ?5 b( ~# R' s
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;$ D1 N! ]' _% M/ \' `9 @( `. v
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;* b6 e7 d" a; {8 x" m

0 s# y' n7 e  d6 d# l1 R/* create a logger instance */
$ h1 {/ ?  N3 L% Z8 r9 ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');9 }) G7 e% u5 |6 E% Q- `
var loggerBufP = new LoggerBuf.Params();7 g$ s  u$ v# o( }% d1 R1 h
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */1 h) ?: y9 V0 D9 {
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
; x' {+ s8 f6 C  i( D& t/ }
6 D  G$ R+ L% ~; w3 Ivar appLogger = LoggerBuf.create(loggerBufP);* s$ y+ `$ a9 h  s. t/ S: @' ?
appLogger.instance.name = "AppLog_Core1";
& B! l8 |  {' Q1 c8 M8 m: W: A, RDefaults.common$.logger = appLogger;7 m# O; O: P  |# j6 @& Q
Memory.defaultHeapSize = 0x8192;   
1 X. O8 ?, x$ p: YIdle.idleFxns[0] = "&LEDStatus";
3 p, _& h* v. d6 e, ]8 o' FCache.initSize.l2Size = Cache.L2Size_32K;% `0 P# P# `) U3 U. c: X
5 U3 u$ p! F1 }" e. |6 Q
回复 支持 反对

使用道具 举报

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 */
+ M+ w1 i5 n" Fvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ Y) ?; _& R* U- Z
var heapMemParams = new HeapMem.Params();
9 A/ E" j. U4 T' B2 U/ L) t5 X. qheapMemParams.size = 0x4000;7 L7 r1 O, o6 T$ X1 v4 G, T

1 P) {& L9 _9 m% x3 e/ Tvar Memory = xdc.useModule('xdc.runtime.Memory');
$ t& P4 \% Z9 D- i  tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);' N8 p' l7 Y6 g0 t: ~- v
0 w% ]. q& |' j$ n5 {
我大约calloc  每次共计大小为5K*16bits,9 \, |/ a1 Y, V
而默认配置才0x4000、需要改大。
+ J5 w; n: t6 R& F& W
% p! F9 h: @8 p2 y$ m
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 z$ N+ |3 [+ v, U; U1 ]Program.heap = 0;
# H1 U+ p. t. n) C7 m3 fProgram.argSize = 100;  /* minimum size */, ?0 o/ S/ B% o" z+ c+ O
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-25 07:29 , Processed in 0.044653 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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