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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
' ~1 I2 S- C9 B3 T4 }1 x) I3 @8 y) b
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 d' x/ c: y) w# S4 X$ u  i% g

! \6 w/ i) E  ~6 B5 n4 g5 }其他程序段。。。。。! t: O$ y1 h2 D  E- }* L, U8 K

6 P0 ^$ k( B1 O+ q7 q   free(x_d);
+ F. w# |' b0 N1 ~! t* ?# \1 I5 }) m$ w7 n! R9 T
使用DSP侧单独调试功能,验证动态申请没有问题,
# J0 b) ?8 \4 c7 w' l! Y3 w
8 u8 S* ^- A5 t/ z( e+ C但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。. l" n, R' X2 ?# E

! ?) U1 T. \5 M& S% g
3 r/ Y1 D0 l( L# P
6 \& j0 y0 F# Y  V) ]* }* W& W( x$ L8 A! ?4 r: |
  K" D$ f) C& v9 V' o3 n& z

6 M& |" L# j* f$ [0 ?
2 X5 C0 U% b9 ?! u, g: L( {
) D1 U7 e, ^6 O+ r8 c& s. ?0 x6 s" e6 P

! Y7 s3 C( Y" `1 f" b8 C) T( _% I
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# L/ ~8 }# p) r/ H% M* @我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下0 O3 W3 M4 \; Q1 m6 }
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)0 S4 @" z# U5 z  m
- u/ B3 s$ A3 Q& v# ~* @+ ~1 K
是不是需要在DSP.CFG中进行配置4 p' K  T! H% Z' E0 I3 h! t
我现在的配置为4 o; C& P3 t7 U! ~4 G
& d+ M3 J4 t# @& v7 U
/*
' P& b2 E3 Y9 S7 N1 m *  ======== Operating System Configuration ========! ^" B5 @+ i1 ^8 O6 `$ Q
*/
8 Z- e# B! `  ?/ E) I; J
6 O9 E+ l3 g" }, k8 y/* no rts heap */
6 U7 P% {! B+ k- e" F# J+ B$ rProgram.heap = 0;
/ p' H# o8 ~5 y* YProgram.argSize = 100;  /* minimum size */
- K& q# x8 _9 A& |* o; V( o( [Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大/ C/ m3 s! [- }5 h) H' g

: F: ~( s( K/ g/* create a default heap */
( W$ K8 [3 [) dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
2 y; r& w; a& z! Dvar heapMemParams = new HeapMem.Params();; m# q* o2 J5 j7 m/ `
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
2 I" F1 f! v" |: }
# Q5 m7 j& k+ C( {# J" N; z
var Memory = xdc.useModule('xdc.runtime.Memory');
  v5 V3 M% `: o) W1 @/ FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);5 U9 b1 X1 I4 q6 u* v  m

% B: E% Z( [+ J) ?$ O- K/* configure System module */. ?: H. C/ _! C
var SysMin = xdc.useModule('xdc.runtime.SysMin');! t& ?! x$ @: o& I( U7 o/ ^
SysMin.bufSize = 0x1000;6 Q5 \/ X" D. J$ F/ |2 v/ o
SysMin.flushAtExit = false;7 s* {4 a6 s9 C4 O. G: d3 `2 B
5 y( l. G" A- N& O5 K( b! i7 F; \
var System = xdc.useModule('xdc.runtime.System');
; W6 r" @: w% s' ~& u# z& MSystem.SupportProxy = SysMin;
' r# i& ^5 p1 c4 z; J3 ^; l3 z  j* g. x+ r+ o: v
/* configure SysBios to use the lower half of Timer 1 */; F  A8 n6 u" p$ Q( U
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
' Y9 f. F% M" Y- A: uvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 T( R* b  D! ]; x
Timer.timerSettings[1].master = true;
  H( j! q) q3 w4 f" |! ~/ `Timer.defaultHalf = Timer.Half_LOWER;3 [. H& a, _: W2 `! T
Clock.timerId = 1;
& w7 ?$ ^, Z: {6 \' J! _
* A4 ~% w8 Y  F# Q2 l
* n! e4 S$ n, m& h" ?/*
& U2 p& n" {1 f0 j. \ *  ======== Miscellaneous Configuration ========
& [7 z6 L) R* I" M* s8 S */
) o3 V0 n& j6 }9 Y6 Y9 |# |6 J" ?9 `) ?% _! O1 s* e5 l' Q* K0 Y* E
/* set default diags mask */
# ]8 V: y1 j1 m7 Jvar Diags = xdc.useModule('xdc.runtime.Diags');
  z* o0 f" o, k/ ]9 Nvar Defaults = xdc.useModule('xdc.runtime.Defaults');0 j9 f% ?3 x2 n: N4 C
8 C$ e5 _$ H- X8 R1 M
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
, g1 L3 h0 b4 m: Z5 PDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 x9 g$ v( F9 m& H+ rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" t, ?4 C6 F% g0 `7 K' HDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 q2 k6 `/ `2 Y5 V5 V" ^
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */# W" M, a/ V0 [' b" t+ Y' t# `3 K) e
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
+ c8 }; H  ^' I/ hDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;$ E3 _( \6 P7 C4 U" y
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. ^; c% M7 Q0 T* W, T, YDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;/ u# n2 ?" ^: q5 g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;* f, n+ _" Q, F! d" p0 k8 x0 ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;' D3 S7 @) ]1 X: N0 j% e
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
6 R7 `6 R' g& N; m; lDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;1 b7 b, u: d% y- D9 U' n
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;3 I+ Z1 D! G$ d% |) U/ P0 y* y  j

) V0 V3 K- Z0 s  a/ }. N/* override diags mask for selected modules */
8 E+ ^. O" q$ Z8 o4 ?, lxdc.useModule('xdc.runtime.Main');% ^5 H7 e' E" A, L; [. F
Diags.setMaskMeta(
! a3 y8 n# Y. |) F" E3 X; R( t, K    "xdc.runtime.Main",* O1 H' n4 T3 d; ~& u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- O/ {3 e- {$ T3 x0 @
    Diags.RUNTIME_ON
  ]7 U2 `1 J: r# W5 I: j);& n- l2 f3 F$ g% o: e/ f' Y
- k) s! U& U% D% K0 A3 n$ E" H
var Registry = xdc.useModule('xdc.runtime.Registry');
6 i" V5 |! n0 X  B0 ]1 C- H0 ERegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;: t9 b& e/ H# H* X+ U( R
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;$ u  X. y* n4 D8 \2 Z8 l! I
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;0 Z9 B/ T7 O/ A, n+ `
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
; t, ^! R6 n& e" C) U0 _$ j$ S# B$ h" ^4 T+ p( G; T
/* create a logger instance */
' W3 o7 `8 L; F1 w) p7 u8 ^var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');  _- U; x/ ]- Y  t3 U
var loggerBufP = new LoggerBuf.Params();. i+ R/ i6 V# {/ U3 T, ]* G
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
( S5 P: z/ t7 z) k) ?& PloggerBufP.bufType = LoggerBuf.BufType_FIXED;) }! q, k, ]. t' \& z
3 R& z0 @* i* v; J2 p7 [+ M* \
var appLogger = LoggerBuf.create(loggerBufP);& G! v& M& Z3 \, x3 O7 a
appLogger.instance.name = "AppLog_Core1";
7 z* n$ A' v! }) K8 Q# V" x9 LDefaults.common$.logger = appLogger;
0 [# w! Q2 @' M, PMemory.defaultHeapSize = 0x8192;    " _7 S' O, L3 G  [+ r1 ]  o
Idle.idleFxns[0] = "&LEDStatus";
; t2 D  P0 m, M- g0 n8 VCache.initSize.l2Size = Cache.L2Size_32K;
( b2 y- |9 t6 I/ [/ R1 }; d# q  T7 ?6 F0 F3 G  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 */) E/ g0 S0 Q0 ?! w3 n$ n6 X
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( C. W2 m$ ^. U7 evar heapMemParams = new HeapMem.Params();
* I9 F# }) x& w3 Y7 n, ~  Z+ a& @heapMemParams.size = 0x4000;1 O* m0 {- ^! R/ O7 {' q
+ Y1 b* r* G  h: k. S8 E8 E
var Memory = xdc.useModule('xdc.runtime.Memory');
) O2 \* F. w$ y* `: @Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 c0 G) r6 Q. X2 Z- o9 h" t( A/ f/ T+ @6 l/ P0 m+ Q
我大约calloc  每次共计大小为5K*16bits,
' C3 w- K0 T0 N% M而默认配置才0x4000、需要改大。
" F( y6 d6 i' ?) O
$ _0 L5 D6 N8 J
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */" K# {% @) U5 c. e" F& o
Program.heap = 0;
/ t3 J! n* I% k8 hProgram.argSize = 100;  /* minimum size */! G3 w7 _  M& t) P) N
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-10 22:37 , Processed in 0.045255 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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