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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ @. b' L! {1 a. d2 v' t9 q3 g  v' |4 R7 p- j/ Z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 G( L) b1 x/ S) K/ K; s- A# t

) D0 h" \8 k* I- U9 @* y( Z其他程序段。。。。。9 n; \" m( f# {& }
( \$ C6 F8 o4 D, K$ u, B
   free(x_d);; w) Y4 l! T6 }4 r* ]

& R$ V( m  |$ O' A' u使用DSP侧单独调试功能,验证动态申请没有问题,
  E3 O: t3 V/ v3 ]0 L: u* Z2 Z- u, D' G
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
2 b! W; w. F/ @  ~4 \8 J# L
4 A) s' I4 N& D2 y& M8 u4 |) d

1 P5 `; }1 [# z7 E9 R8 S. M& i6 J3 X; }% {! g

+ a# O1 O: {! u& ]& p
" q+ F: k! d2 M
8 Z: f6 r1 v3 w) L& i7 l- E' P9 K& q  F9 G0 \
) w8 n; v# s9 x
% ^8 Q3 B4 y9 B
6 d2 [  y% [! }$ Y8 Z: T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明, k% v" @4 I5 x: P* Q& A
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
4 p) E3 G! }* J5 k(不过疑惑的是,为何单独DSP仿真就没有问题呢?)9 O) I; S" H; N) n  N+ S
8 M! u: v' d/ O: z) Q9 i7 C! M
是不是需要在DSP.CFG中进行配置% M. V. n$ P2 v: P3 z4 X! C
我现在的配置为: N1 t/ H+ m8 Z/ B
* j/ F* X4 L" m; R# y' d. ^, `8 A
/*
8 p4 w: Z% P7 Y" {0 B! O *  ======== Operating System Configuration ========
3 Y* j& s8 }! ^( c8 w */
9 ^0 E/ n7 Y8 t5 s0 c% @: Q  b/ Q9 p6 d7 n1 J/ f
/* no rts heap */& F- }: ?; X( v6 Z! S/ T
Program.heap = 0;9 w+ E9 b" }/ a" n  m
Program.argSize = 100;  /* minimum size */
& v, k' {% H7 JProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大( O7 }: ^3 J6 ~/ _7 z
/ \# x, _1 ~( n5 N; @
/* create a default heap */# n! \& V6 B7 V) ~
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');' D8 p* ^; F% a
var heapMemParams = new HeapMem.Params();
6 F# o5 R5 X. ?/ U1 N6 ~9 O& qheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大( l/ m" ~* d3 a! O/ V

3 X* m9 g( V- Q6 C
var Memory = xdc.useModule('xdc.runtime.Memory');
6 `7 ^! F! s7 E4 E/ SMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 s+ s& K1 s2 K! f  ], a% g
& X. F/ ]! S6 `- Y/* configure System module */
- p4 s3 C5 E1 _7 i6 |( J4 Hvar SysMin = xdc.useModule('xdc.runtime.SysMin');
7 Z6 i! f% e7 w) W6 W9 N3 z2 cSysMin.bufSize = 0x1000;
( f; [( n. h9 T# S7 |/ OSysMin.flushAtExit = false;7 i) `( q, i% j7 o1 f; U& E; @
% o- x% w2 O% c& U( ?2 T* Z* B
var System = xdc.useModule('xdc.runtime.System');! v8 U. M$ J/ Z2 j) f6 @- {
System.SupportProxy = SysMin;
7 s" ~2 w$ F. u) f! A
. k1 _3 o" W7 o. c: t2 l/* configure SysBios to use the lower half of Timer 1 */3 q" q) H- C: z1 {  v; b) c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
5 F8 o1 L1 b& kvar Clock = xdc.useModule('ti.sysbios.knl.Clock');5 O" q6 K* R% G2 q5 p# i8 r3 K. l
Timer.timerSettings[1].master = true;" W' X3 z4 F+ a/ |" t$ S
Timer.defaultHalf = Timer.Half_LOWER;
$ w2 N' W. G2 m- @. J1 c7 m% v7 bClock.timerId = 1;
; z6 c4 W% H( z7 ]! W3 |, y& G
2 u. T$ ^6 p, ]  W2 t0 U  Q# x6 d' X7 L) q* {
/*
% t7 a1 k. m$ O5 x$ P* V0 w *  ======== Miscellaneous Configuration ========4 H1 J+ p0 E; X
*/
( {4 l2 K. ]+ }, C7 `8 ~+ {* V# l, ~' m% c
/* set default diags mask */
! |0 w$ V# W6 v4 M$ C# w  _( c8 Evar Diags = xdc.useModule('xdc.runtime.Diags');
4 ^9 |' e7 M( \; \# x+ ?  F" [7 ivar Defaults = xdc.useModule('xdc.runtime.Defaults');
: L. O& d8 Q0 r  N
. d/ W# T' F+ n; B2 ~& TDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
! L8 I# K) ^' z% A8 YDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;; V0 @3 |7 m5 h- \' L
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;! n3 f& t  i( O: N
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 P: |5 K6 J# `. `- V
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% X6 c! I# i  C4 }: w5 p& A
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;1 V' l+ j) A- L. S9 W/ c1 B! S0 O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
0 u# {- {% C9 \, U0 @. D' U4 VDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;8 @2 C- D3 m& k9 i5 X# p
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
1 {& r% R7 B) Z, D7 s9 v/ i0 dDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;9 C$ x6 H9 g/ [1 J& r* ^9 b/ k( a  {, O
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
6 x! w! ]5 P4 ~8 BDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, ^3 ^6 R% r% [0 r2 K
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! B5 b# t, f8 b0 H1 M1 }* e
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
0 B' O  o, Y/ U, c. h* r# k/ |- d! T; p
/* override diags mask for selected modules */: s1 ^% h+ V, v1 P- P6 u1 }
xdc.useModule('xdc.runtime.Main');
4 r7 f+ s! u7 y) d- R+ n, h% FDiags.setMaskMeta(+ \2 z; U4 {  O. Y+ [1 q
    "xdc.runtime.Main",5 N5 T& a- d1 O: C0 I
    Diags.ENTRY | Diags.EXIT | Diags.INFO,, x( ~; L: U: D; p4 c8 s( y
    Diags.RUNTIME_ON# d, t& f- A, O# f
);; f! F; I& t3 j$ l) z; Q

" w( r1 `# [3 r4 l. s: k. Z7 a% zvar Registry = xdc.useModule('xdc.runtime.Registry');7 S# E8 l8 _9 X6 H( g3 T2 J. ^( V  r
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;0 T7 _  |$ t) D6 W& v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
9 f5 o; z* O2 }8 G( t- z" U( C8 bRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
2 k: J; Z+ t4 N* A8 q$ y, ZRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
" _6 t: Q4 a1 d5 j- c) I2 F
# \3 S' z# [2 |; z- t7 ]/* create a logger instance */
; ]0 V2 Z7 Y/ V1 Q+ Hvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: \; r* Q) N/ M: C3 K2 ]var loggerBufP = new LoggerBuf.Params();; ^# W7 y$ E1 q* T6 n' x. ^! t8 h2 s
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
" V2 }- {- y  ]loggerBufP.bufType = LoggerBuf.BufType_FIXED;2 j& q  ~+ U: S+ t1 O, d
- a, b' |1 B1 \9 l
var appLogger = LoggerBuf.create(loggerBufP);
, e" m. l* K4 t! A- ]* A, i9 f4 y4 EappLogger.instance.name = "AppLog_Core1";0 b/ S* w* ?: }! d& T  ^5 E! j
Defaults.common$.logger = appLogger;
9 V# @1 j0 t9 h! \Memory.defaultHeapSize = 0x8192;    # b1 a3 E1 W4 v
Idle.idleFxns[0] = "&LEDStatus";: A' e  b) B8 h: ?$ d$ V6 e
Cache.initSize.l2Size = Cache.L2Size_32K;" O' r& p8 ^* W& v( D! o7 _8 D
/ |/ r# M9 e& ?2 d$ n, r: ^
回复 支持 反对

使用道具 举报

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 */  K# j- n$ R% Q0 e* T
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ O1 V+ [, n! {, T6 Qvar heapMemParams = new HeapMem.Params();
) P6 [8 l0 w" y: w; k1 v+ Y+ uheapMemParams.size = 0x4000;+ I. e1 h  f; l3 e; S
+ q1 o1 o/ C" z0 d
var Memory = xdc.useModule('xdc.runtime.Memory');  h) N) q$ Y. g: `( e
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
. U1 k( Q( d7 J4 a" x7 p, z3 X1 k3 j3 y  I2 q
我大约calloc  每次共计大小为5K*16bits,
. P2 P8 Z5 e! o$ A5 F! z而默认配置才0x4000、需要改大。
3 D: i8 P: m5 R
  T: i: F9 l, R! j; w
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ ]" \3 \- o- b3 T5 B0 g0 N
Program.heap = 0;' R0 H2 M* w# h5 V
Program.argSize = 100;  /* minimum size */" A1 h7 t0 l  |0 a) P+ Z
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-26 22:54 , Processed in 0.042106 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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