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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
! c6 P) u# j: w( b7 r5 |2 Y- `3 |* @, `* ~- T! l% W; \' ~2 d( s
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
9 q7 q# S" Z" e) ^. h  Q, y9 |3 ~& K$ K$ A
其他程序段。。。。。  y5 T4 A3 w, |/ ?4 X: h3 m
9 n" D- ]$ x. f; S/ W
   free(x_d);
0 i& i% \! X3 Q
$ w; ]* x: ~) Q5 E2 O7 l$ p; T使用DSP侧单独调试功能,验证动态申请没有问题,
0 K/ Z! `3 K, d9 s
2 k4 j* N8 f: u0 d- B但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 h! l: Y! A$ K
# T1 h7 |1 S, t2 B! ^
1 I' w! W# r/ C3 _
# e7 `* K) f: s" ?, p" s5 V
9 s# V" B" ?) {1 d* f
* l! N- D( A  p7 k- ]" x4 u

. x! Q& F- [0 g9 x$ D
: O/ I  h: I, N" t* n5 I
5 i& H! `5 u) e7 Q+ q8 a- n: I/ L3 }' H" O2 T7 G) B

9 ]  C$ U( S3 L; q3 X' l9 k9 O) O3 C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明: Y* E  T! Q" a5 [4 o1 {% ?+ M6 Y
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
3 u7 Q. ?5 O* f5 E$ Y; U2 i(不过疑惑的是,为何单独DSP仿真就没有问题呢?)1 y: r1 b  z9 K3 |4 z) n" A9 A

1 W. W( N9 ~1 ?9 H% N. T. y9 x是不是需要在DSP.CFG中进行配置3 {: T8 s  X; e) z
我现在的配置为
: e6 v- E6 h' R7 f7 G1 B2 @2 |$ _, S8 O  k7 i) O$ t
/*9 n9 X. V6 l- e  x: t; {
*  ======== Operating System Configuration ========7 H, k4 S+ q, D/ p
*/% k7 O" o' h/ R# m3 }* K- d

7 }# s  F7 o' S6 S6 @/ e. g/* no rts heap */
' t7 R2 T* N% h  HProgram.heap = 0;
- y; C+ ?8 b1 l0 l" y! kProgram.argSize = 100;  /* minimum size */
7 n) I3 \0 m# R, ZProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大: H! ~# G! n! E; ~0 J! m

3 ?4 _0 L& d' k6 M, M6 T0 m6 F6 ^/* create a default heap */
9 q' H! C( v2 J" T# \7 {var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 ~! B& o4 ?& o% Y! Zvar heapMemParams = new HeapMem.Params();; i5 U/ H% P% {( s2 v# A
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
. V- p/ B2 ]) U3 R! e0 C2 G: W3 T
+ Z* r' N4 b. u0 l& l5 k8 t
var Memory = xdc.useModule('xdc.runtime.Memory');
! {* _9 K/ _: B* X( v+ bMemory.defaultHeapInstance = HeapMem.create(heapMemParams);& e) E6 y2 G/ R

4 e: N- _1 a4 G" d6 L/* configure System module */' L  f/ I9 O( p# _9 I
var SysMin = xdc.useModule('xdc.runtime.SysMin');2 ^; l7 r( E' C4 z( S
SysMin.bufSize = 0x1000;, S. e$ u  W) v
SysMin.flushAtExit = false;& Y* J: k7 X  r2 F/ L' ], P

( J! a/ f) ]; x5 t; Ovar System = xdc.useModule('xdc.runtime.System');
+ x- h' T  H# V2 H6 oSystem.SupportProxy = SysMin;8 c" L$ O$ G% R. U! c

2 H# N6 _4 a6 W+ l5 @! L) M/* configure SysBios to use the lower half of Timer 1 */  @& n. B- y. E: G( ^' }
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');# b" o7 A- x, I/ Y
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
- S$ M1 [! r3 ?5 X9 g% }. MTimer.timerSettings[1].master = true;: q* u% b' s) g. d. F4 ~& K
Timer.defaultHalf = Timer.Half_LOWER;; N+ ^$ h- v- o
Clock.timerId = 1;
% T7 _: ]% @, |- ~
. |6 n( j- _5 b/ X, W7 n- K. R' a/ K' Z3 c7 h
/*
, @! g) q' A: j8 |5 Y *  ======== Miscellaneous Configuration ========
+ Z$ K- x* a1 }* S+ `7 V6 ] */+ j" N! Z- k- }* |- {8 z

' B! ?& M6 O2 Z+ H4 r$ P% b& x/* set default diags mask */
$ l. o+ D8 |) s2 [var Diags = xdc.useModule('xdc.runtime.Diags');
) ~4 s# H- P5 f! i) f  m- ^var Defaults = xdc.useModule('xdc.runtime.Defaults');) L5 a3 A* G& d3 [' C; |1 D0 ~. {6 k
( Y" o  A8 C0 w! @- s4 E
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;* D0 j1 p" c" u) h' k! O
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
1 ^* A' o! }9 RDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;$ Y/ W0 ~# L* E1 @; ?+ |
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */' M% w+ f0 b5 q& T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
5 J& `( o" F0 FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 x" ^, l$ `/ H9 p; x  N5 WDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;. p0 J& Y+ d5 E: ]. C
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;( o# p; c: F9 R4 C& X9 L
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 g* x. ~/ `" \7 S
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;1 U& K& F$ ]% T+ G& {1 S$ J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;3 d9 A) v1 H  @5 h! I( w) @$ ^8 ^
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
/ h4 T1 o; o& T6 gDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
$ Q0 b& @; `4 v: SDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
9 a4 U( {$ G; H6 k: R* L5 D5 G" ~# F* G
/* override diags mask for selected modules */
: W8 K2 \$ e% ?xdc.useModule('xdc.runtime.Main');
4 u, B7 F' e1 ~9 Y$ QDiags.setMaskMeta(
  L; z6 \8 [" N! F! K    "xdc.runtime.Main",
2 t; x* q$ @, b( g0 a    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 f& s6 p9 I5 e1 \) t$ E& P( h* q, D    Diags.RUNTIME_ON
1 \& k8 z+ `$ b);
8 \, F7 c" Z. i, m' d8 a) o0 F, n9 t1 z% n
var Registry = xdc.useModule('xdc.runtime.Registry');
' G; e: Y1 f: l; yRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- e& a( `- {5 j4 C- X5 \4 B
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;- t( M* Y  L2 A8 Y, j
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;& f1 s9 S/ l" }4 I: ~: n
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# K' j) e: i# s; e3 z
& }6 F' ^4 X- [0 k- U5 M" R% x
/* create a logger instance */" b( ^* ]: ~: w4 i' l2 r% x# _# d6 W
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');/ w8 L) o! p) }( |
var loggerBufP = new LoggerBuf.Params();
9 X' s9 f% B( H' S* I9 uloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 Y. l* G% H  A! A6 PloggerBufP.bufType = LoggerBuf.BufType_FIXED;. `! E7 c3 J. O# ]$ P
/ q4 o% M" X2 L1 p( c0 r0 j- U# O
var appLogger = LoggerBuf.create(loggerBufP);8 H& C1 G; X5 M
appLogger.instance.name = "AppLog_Core1";/ O8 }' v3 N: }: h  y
Defaults.common$.logger = appLogger;) O7 ^7 p/ a% n, U3 o
Memory.defaultHeapSize = 0x8192;    ! [2 j8 m$ ~  B
Idle.idleFxns[0] = "&LEDStatus";
) J/ p2 v9 b. U6 cCache.initSize.l2Size = Cache.L2Size_32K;8 b) M" Y$ ?/ g2 }

: v% [! N5 _2 K# i
回复 支持 反对

使用道具 举报

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 */; g7 I4 }1 F, A& Q( o. w
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
+ k; `) L- V9 q" T" [var heapMemParams = new HeapMem.Params();
( ^# Q$ _  P; c0 V! S- h  BheapMemParams.size = 0x4000;! e/ D: X, \" f: y, _/ J9 R* E3 \
) V# `5 [' H: s. o4 o1 C
var Memory = xdc.useModule('xdc.runtime.Memory');
! `0 X1 D8 I& S9 e$ D8 R7 o* x! ~Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
  W: {; p  X' Z% {9 p$ v2 _3 z, E9 @% b4 b
我大约calloc  每次共计大小为5K*16bits,  H) b1 X6 c1 H; v
而默认配置才0x4000、需要改大。
0 _7 t, @* E  ^* h# ?- B! @! U: v( f: \, \$ f
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */0 D+ E& t% ?5 h3 m, `) y2 [  O
Program.heap = 0;1 w7 ~1 N2 f7 ]0 Z' V
Program.argSize = 100;  /* minimum size */4 I/ y4 R6 [) ]7 u/ Q
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-3 13:13 , Processed in 0.042241 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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