关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& Z; B" _5 d0 }% q9 E3 a9 `  h7 l. h1 n( n* Q& j% c
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256- l8 y% ]2 q% O* a% Q
1 i7 r9 l# D( C( |) s
其他程序段。。。。。5 r. P8 b# n3 q

1 K7 s5 v0 [2 j   free(x_d);
  s* w8 Q% y% r' h( ^9 y; @2 z$ R7 a, Z8 t7 h  \' `# E
使用DSP侧单独调试功能,验证动态申请没有问题,8 Y* b: f8 L; U/ E

, z! e$ q1 ?4 C  Y8 A) `  W但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。+ H8 Z1 }5 {# U# N
" Q5 ]4 a# {7 x: O  _" C* w- ]- c

" S/ E7 D& f( {# ]0 x' L0 F" l% E4 U

7 n8 c: v7 N* H. s+ x# L1 P! o8 O# a6 t- e

3 c$ I+ l) e: R* C6 w8 k5 Z* }$ c3 i- {3 T* G4 O

* j: j+ M% K- W' C
( I6 W" H& ^8 N. ^& q
# J2 O6 ?7 g. m6 D5 u
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明  Z  m$ z8 G9 a8 k4 J
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下& S$ E  `8 g0 d  M
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
2 w- e, v+ F' X" _8 p0 `7 r- _/ w

8 w9 c5 ?/ v, `* O- {  e, V是不是需要在DSP.CFG中进行配置" `  k- j. i& q2 J! L) h
我现在的配置为5 c1 s0 J, P! H- ?

) u4 V9 h$ I9 O  s% ^/*% l9 H% }) c! w) W8 |* R
*  ======== Operating System Configuration ========$ A! V2 X7 H5 v; t9 R
*/
7 A! v# y: p. P- }; h( [
; n2 O# M/ u% p+ g/* no rts heap */
, V+ j; H$ I5 gProgram.heap = 0;6 ?1 y2 C/ h3 }
Program.argSize = 100;  /* minimum size */
/ R& }$ p2 l: T' z  @. y/ }0 b* {* N* OProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( [3 y5 }& ]! J/ }% Z" y  m  x8 Q: u8 u  b1 C8 @5 F
/* create a default heap */7 X' Y, e( |# Q) w& |
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');$ f+ c1 |3 D( h& w2 ], V
var heapMemParams = new HeapMem.Params();, U, j+ P, q; q( u2 M
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
* U" j8 _& v/ U4 \4 W) c; Z8 W* k
/ i5 Y( L& s% V5 E$ R# U; q
var Memory = xdc.useModule('xdc.runtime.Memory');- R0 ^9 b: P9 y+ S4 h( h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
6 h0 ^$ D$ B6 L- u- Y1 L( o8 M9 T4 e8 ]6 v; n
/* configure System module */+ u: M+ P" A5 f1 L
var SysMin = xdc.useModule('xdc.runtime.SysMin');
3 ~- v3 j8 V) s6 j6 D. u: b7 GSysMin.bufSize = 0x1000;
4 ]- q& N, J5 c( F) A" FSysMin.flushAtExit = false;
) |$ K% l( M% Z  }5 m' M% N9 `0 Q( l+ q; W8 |. A
var System = xdc.useModule('xdc.runtime.System');  @% x( a9 A- \8 j9 p0 c
System.SupportProxy = SysMin;
% u9 H- F( H! T; A1 l3 E* O  v" p0 J  W' G; i) [
/* configure SysBios to use the lower half of Timer 1 */
& o* Y; [) B7 z3 e: L0 Uvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( A7 j  J' A4 a7 j! o7 o/ h
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
, b9 O, ?7 `. D, L( ]3 x' ITimer.timerSettings[1].master = true;
( x- Z) v( c* l7 b& nTimer.defaultHalf = Timer.Half_LOWER;
& ~, w8 E. Y+ D8 E! e: WClock.timerId = 1;
7 ^# a! K$ `5 d  Z' B
  c8 b& k1 O: F1 C9 ?! f8 `, B, h
+ q$ T1 L! Q9 r9 M/ P& L0 Q/*" ]; K- w8 q. F5 G1 p7 E
*  ======== Miscellaneous Configuration ========/ ~8 X6 K; c7 p4 M- N6 \: t/ F
*/" }" n/ E# f) ]

* k! _: @7 W2 u) T/ Y* x/* set default diags mask */. A6 ]8 u4 G1 |' m7 F" ^$ T
var Diags = xdc.useModule('xdc.runtime.Diags');* b) B5 s8 q& ^3 |
var Defaults = xdc.useModule('xdc.runtime.Defaults');; h6 L: \6 l3 @5 [
# d; p/ J$ E  i) E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;2 N' h3 r2 g7 Q5 q! i% m
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 Q! M) q7 ^/ a0 ~- ?; p- L/ h' rDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
" \5 {/ ~3 u! V% dDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */$ C0 x) G7 o- ]5 l- ?8 w: Y7 L
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" x$ X6 u1 m8 z- e& UDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;' v$ s1 S+ y9 v, `9 Q  W9 H8 o8 s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
1 z$ L; W: M/ q) UDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( Q1 p( W$ x( `- k; Q! J
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;' B0 I5 v5 j! j: e" A1 Z
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
: c" M) O- j' {# `9 |7 ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
7 P7 v- c' G3 b. H7 k# W2 t& CDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;% j  z# C: _5 b8 ?( V% a
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;! L7 F' ?0 K' i
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
1 B: `* l- I! V+ y
6 e4 a0 H! }  a, M, W" J/* override diags mask for selected modules */
" I3 d, T* E6 _: Hxdc.useModule('xdc.runtime.Main');9 `0 ^$ ]% K: I1 H3 M. }
Diags.setMaskMeta(! g: V% n% X$ {% C5 o' P$ ^8 L
    "xdc.runtime.Main",
1 \0 b% Q) G. D4 N2 t    Diags.ENTRY | Diags.EXIT | Diags.INFO,# a+ Y' Q2 \, W, S% i
    Diags.RUNTIME_ON
3 ^% G6 `3 o  Q1 y);
* Y& L7 z- d% a' e# t" ^+ u: G7 P- c/ a8 e' c! p5 v# e
var Registry = xdc.useModule('xdc.runtime.Registry');
# P; O5 K7 b1 g( [2 L8 ^  H6 p; QRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ R+ E# |. V+ h7 P) O
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- L. y, I3 N' N2 _4 a7 I% C9 H1 LRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. r* G7 K3 k( h( P+ w) ?Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;! m% k5 ]7 H& a  I

$ ~1 X6 s) \% K/* create a logger instance */5 n* ]$ ?+ G) G: b) `# }& q
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; X( x+ j5 L* b) S. |  m
var loggerBufP = new LoggerBuf.Params();
$ D' i5 z: G. w) S( T" GloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
1 O- _; r8 P0 G/ t2 a0 F) @! hloggerBufP.bufType = LoggerBuf.BufType_FIXED;8 u/ p: c& n' k% \# P- d& j
. L6 v1 W, u: h7 @7 k! {1 M5 I
var appLogger = LoggerBuf.create(loggerBufP);7 i  p5 _! S2 s* y5 a8 A
appLogger.instance.name = "AppLog_Core1";
1 \3 k: f9 g4 @+ x$ yDefaults.common$.logger = appLogger;" B4 S7 t8 P4 E- \5 D) L/ o7 [0 {
Memory.defaultHeapSize = 0x8192;   
$ l) P- [3 r' a, U) BIdle.idleFxns[0] = "&LEDStatus";
+ X4 }) Z( Z* o! q1 HCache.initSize.l2Size = Cache.L2Size_32K;( A/ Z* V2 c: u3 E) ]
4 D3 P0 V! T5 \' b$ c6 w
回复 支持 反对

使用道具 举报

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 */
; ~  S4 V2 u* M- Z5 Nvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ a* g& @8 o" J+ m: J" {8 f) _
var heapMemParams = new HeapMem.Params();! A+ G: a- N( l% `# n6 K* M& S& `
heapMemParams.size = 0x4000;, X, c/ h) G6 b, u6 y0 e- H7 O
/ M. t) T% |6 M! \
var Memory = xdc.useModule('xdc.runtime.Memory');5 `, C' M8 a8 \8 A+ L
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
5 d% @  O; l% G0 e& a$ c2 Q, P" m9 u3 t1 b9 |6 o: |. b
我大约calloc  每次共计大小为5K*16bits,
* h2 n! [( x7 ^  w0 Z+ P6 \+ Q而默认配置才0x4000、需要改大。0 h  F* r- g; {) B% n: o: c/ S
# r1 A2 X8 q6 R' v8 h0 u6 T/ B
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
3 ?9 O- z$ G& V* CProgram.heap = 0;
0 l, y- j* V4 s  r* W( iProgram.argSize = 100;  /* minimum size */
7 |. @: L* W+ N, e$ @Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 05:55 , Processed in 0.040240 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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