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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

9 D. Z0 G* C- S. Z1 S    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 ~; T9 K& C. O6 J
( W: g. ], p3 g- C6 P( v1 C
其他程序段。。。。。
6 I' J6 S- o3 J, ?0 A/ Z6 w8 }
- }7 G' x  @1 x' W: Y7 b   free(x_d);
# o8 ]0 p: I' v  [1 Z; l: X$ l8 p9 h. C1 R3 s
使用DSP侧单独调试功能,验证动态申请没有问题,
: m2 S+ {  p$ c, t7 I
/ M- V  {7 j1 t& e* I但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。6 b6 T0 X% V* o2 w/ i( s& j+ ~: \
$ c% X3 ~. ]* ?$ f7 _
  k$ k7 k( J' d. j# C3 u
+ M+ k4 @$ b1 }7 P. L9 o4 v8 |6 P
2 k, h1 w& a' ]
- |! N- v% _. A7 q6 @$ r9 F
2 I+ C' r0 u* ?

" e# c  P/ M- a/ M2 y1 X% q! W' ~9 o& ?- u

, c5 M* f; w) Z) \' y4 _
1 _5 N/ ]) h: v4 X" h( q
分享到:  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 */, o. f' t) h8 F/ {$ Y
Program.heap = 0;
: A7 a& t- w4 ]6 jProgram.argSize = 100;  /* minimum size */! D" `% P# B4 q, n5 X( _
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */* {, }4 p) M$ q% _$ g+ k# n! u
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
& r: Z% Q# _9 S  F$ Lvar heapMemParams = new HeapMem.Params();. J% _2 R: }, n9 I
heapMemParams.size = 0x4000;% N3 ~7 v. Q9 E1 J0 q! l1 `

5 x, \- l9 C" P0 ~. X# ]: E7 h$ e  {var Memory = xdc.useModule('xdc.runtime.Memory');
# h1 m% q8 f* K" S7 k' XMemory.defaultHeapInstance = HeapMem.create(heapMemParams);* V$ Y, H7 d0 i* E$ q# g7 ^

6 D, K: k+ z# d$ F+ e我大约calloc  每次共计大小为5K*16bits,
, W3 T; F6 [# f$ }' D2 B' R& x7 o而默认配置才0x4000、需要改大。
  ]; B3 K4 V% w: z
6 v$ Q) }+ Y! K9 _8 m
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明- s# {- y2 ^  Q- i. P
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
% h7 X' u' l- n/ V# i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. o9 i( D9 Z2 G* _

( \" _) o) ]7 Z$ }9 f4 g" u4 Q是不是需要在DSP.CFG中进行配置( r1 M* P* p' x3 h* J9 i) F( P
我现在的配置为+ P6 P' J( Z9 M0 j
: p% C/ E( E: l: o/ D" E7 L
/*
7 ^2 G3 f3 i' P *  ======== Operating System Configuration ========9 l/ h+ W2 p4 T" @( F
*/
# D  Y% ^( U( i+ K3 I! x+ G# i2 ~& i9 W9 [7 }: I
/* no rts heap */" ^( W" c& j/ Z; p
Program.heap = 0;
. b9 R$ f3 U9 V, zProgram.argSize = 100;  /* minimum size */
) S9 r& c8 w$ MProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
4 @5 S8 X+ [5 @- E
5 k# _" ]  W' Z+ M6 X, o4 K/* create a default heap */# w" H( ^$ J. A  d$ |0 R. j
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; }! V2 q) y% ]/ T( J7 [' ?1 @7 ]
var heapMemParams = new HeapMem.Params();
8 O1 f# M/ d  RheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
8 F1 `' c# o9 {7 `! n; g! t9 _0 H7 q4 F
var Memory = xdc.useModule('xdc.runtime.Memory');
9 m9 ?# s& K  t- `# L( q3 p0 u) m% `Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
* p8 o- Y2 n- q' Y8 @9 b6 J8 p' I: |/ s4 E9 v+ k& q# c
/* configure System module */
( h0 X* a5 D  f& ?8 t5 E+ P9 Avar SysMin = xdc.useModule('xdc.runtime.SysMin');
3 L  [& O9 u8 x6 w8 k( Y. q" [SysMin.bufSize = 0x1000;
$ Z7 c9 Z7 D6 ]  ~0 wSysMin.flushAtExit = false;
9 P7 R9 o! i2 w8 {- a) D* T7 D7 U
var System = xdc.useModule('xdc.runtime.System');3 e# u2 O% _: D1 V" E" @' C- S
System.SupportProxy = SysMin;4 l2 N- f4 q$ a9 X7 {: _4 K+ ^$ T

9 ~( i$ \7 Z9 C. L2 T. Q/* configure SysBios to use the lower half of Timer 1 */1 H1 j/ [2 A  l* m7 V- l
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( H( W2 o2 x4 S
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
/ K: Z+ H0 C% A1 P& ETimer.timerSettings[1].master = true;3 ]; B' l( S' {1 j9 A
Timer.defaultHalf = Timer.Half_LOWER;
' l: L( O' p  o8 b+ OClock.timerId = 1;" o+ r+ J6 ?. h" @4 U+ s. @% N

8 k& D* G) R; y* g/ I4 m) C
" }, [$ P; N2 [& m! I$ o/*
: t, |# c3 g& l/ q$ S' u- H *  ======== Miscellaneous Configuration ========
' y5 \# c* |+ e/ m */
. `, d9 b' u* C, m
+ F9 p" N* Y& J" u3 a8 F9 G/* set default diags mask */# P8 l5 Y" E! X( F. {3 n* O
var Diags = xdc.useModule('xdc.runtime.Diags');) j& `- k% M( J6 \$ f8 q: L
var Defaults = xdc.useModule('xdc.runtime.Defaults');
/ X0 n4 r, _; o
5 C% X6 u& N4 p1 F. |' h, d2 eDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
( L4 p* y5 X, a% b! M. nDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;2 E( @8 i3 \# f, X/ \) }6 N
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
; h  F+ X7 A5 u9 J' KDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */1 d: W% U1 F' E$ [) N0 G
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */+ ^) F6 Z: l5 x4 ?* }
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;: ~; _9 R5 l& q0 w+ S5 \
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
) W1 A3 d- u! S; z  lDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- T! O8 O+ f6 B- J$ @. x4 U
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
+ p' S5 n: t5 ~9 v1 t0 LDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 c- o/ o4 }3 H. I! b; |- N
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
, w4 j! C/ V* _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;. I3 G) J" B2 s. q' g
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;4 Y) u2 ]/ W5 \. N$ f( G" G
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ V$ Z; \# [* ^2 M6 U

. h8 k( D. h3 ]  E$ x0 d# f/ v' |/* override diags mask for selected modules */2 n. d5 H. {9 s) B; X9 V
xdc.useModule('xdc.runtime.Main');) s( T& Z1 y6 O
Diags.setMaskMeta(
5 L3 T, y' O% G* ?0 }- ~9 ^! e    "xdc.runtime.Main",/ s0 V% B3 R* \8 F6 k8 _8 f% T
    Diags.ENTRY | Diags.EXIT | Diags.INFO,3 E  c! r8 w. f) v' ]9 S5 X
    Diags.RUNTIME_ON
" c' |8 D. v% y$ C. f2 q4 o);
  B% Z5 M8 l2 @3 |* {+ h
  b3 K% Z0 }) w/ Dvar Registry = xdc.useModule('xdc.runtime.Registry');/ j) G- N6 X7 M) l
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
0 d9 s0 `; J' `+ \0 u# ]  f8 \- y4 wRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- ~" N# w2 s5 |5 U: C# N/ G. K
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
- s* D/ v* F. f! _Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
7 P0 n* j) m8 \
* J# n/ t' U* i( G  B& Q/* create a logger instance */
6 d$ p; X7 i! _* F: w9 xvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; e8 j' v$ s, Evar loggerBufP = new LoggerBuf.Params();
& Y$ S6 J4 r" u, B+ y5 K; N+ nloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */( P  H& ]+ t7 l
loggerBufP.bufType = LoggerBuf.BufType_FIXED;4 E2 \/ `+ R! U' z8 E

6 c4 l2 U- m9 {; P# rvar appLogger = LoggerBuf.create(loggerBufP);
7 S( U2 H0 j3 ]( i, U) `- lappLogger.instance.name = "AppLog_Core1";
2 \3 Q0 i& n/ r# ?+ t- y: i- J9 rDefaults.common$.logger = appLogger;
0 k  d! g5 N9 CMemory.defaultHeapSize = 0x8192;   
3 k9 U+ O( U# B2 jIdle.idleFxns[0] = "&LEDStatus";. W* T( g7 m3 {  n0 N  g3 z7 o
Cache.initSize.l2Size = Cache.L2Size_32K;- T. {* O$ J0 a5 x
9 q' P: b  [9 Z: c( i' t/ Z0 Q7 Y) }8 L
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-2-15 03:08 , Processed in 0.063701 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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