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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
2 `2 E* w! \5 ~" z, w1 X+ S6 u: a. k
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. j* m) \" N6 C2 V* [% z2 ^6 l9 T$ P$ q0 W/ Y" n' |
其他程序段。。。。。
$ G8 K& L) A8 ~9 n& a" `. l " K& ~9 z+ t# R' U' m
   free(x_d);
& ?) J. \9 ^- B" T& v; r  [5 F' v. s
0 G3 b# B0 H  F/ ^( H# i9 \# a使用DSP侧单独调试功能,验证动态申请没有问题,/ m. A7 v3 `; A- {7 t+ Y

: E6 B& H( ^5 N; j: e: K但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 J. U9 z% a$ k1 C4 U+ A
% D+ @* [1 C( I. O

  j4 v' B( }" a) I' O( J
1 X4 Q5 V) `, m, @& X2 ]
" b# K* k0 T4 [8 y. J
( p* T3 Q* ?8 U2 G" O
( |& p$ \; K4 j8 T$ U4 P, h# ^6 e
4 ~9 n* g7 r" I# v8 u
* a* }; @; O& L" V1 M
) F& C2 r8 c0 r; J0 g$ D: n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
" T% J8 _% Y* h" A+ B我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下8 s' l& |2 m# k+ `4 O
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
6 \0 h+ R3 g3 ?
& w. c2 X1 K, @
是不是需要在DSP.CFG中进行配置
" d0 q$ N5 E) D' l, }: b( u0 Y2 n我现在的配置为$ Q8 H0 Y& k  }3 o+ V; K1 X- W# n' H

+ g& [9 ~  V6 @/ N' m/*
2 D: F6 Y' v9 c. ] *  ======== Operating System Configuration ========2 u, A1 f$ E6 C& C
*/4 {8 I& `9 Z7 a8 v4 i

; S' b# R" R6 J. v0 J5 F/* no rts heap */
$ ]  Q9 p+ M5 `2 u- t2 oProgram.heap = 0;
$ c: x& w& [! r. |) N0 C3 kProgram.argSize = 100;  /* minimum size */
" E/ P& }6 V3 y- m! ?Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
( e- v; o7 z1 W8 n4 J1 V" H$ D
2 r* s% e8 m" y3 U/* create a default heap */
. R5 Y+ q, a  i+ U8 z9 |- uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) E* ~7 \, w' z- q$ I# ]) Y, o
var heapMemParams = new HeapMem.Params();- P# E, [2 s: C) J, v( e9 v
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
# V- I+ }! P$ P. X
: S2 Y9 O1 m. d3 h) R
var Memory = xdc.useModule('xdc.runtime.Memory');6 N; e; \9 L5 E
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);: ?  Q8 G, U" M) w$ F: B. p  p

, V; ]: c8 ^( a3 @+ j  ^! v/* configure System module */
( M; B& a6 p' y$ D  i/ V  Zvar SysMin = xdc.useModule('xdc.runtime.SysMin');
$ a- U1 a) Q. m4 d) j( JSysMin.bufSize = 0x1000;/ _. }: N& o: z# Z: O7 G# X6 a0 q8 F
SysMin.flushAtExit = false;6 Q) }: H' q: b' Q1 X) ]5 K* Y( y

: d+ t6 J* P$ U4 |! {var System = xdc.useModule('xdc.runtime.System');! D' f5 q- t- K; O: C
System.SupportProxy = SysMin;
( }7 `$ P' u6 C. Y1 E" g
- a# A8 U7 D1 j+ N( K2 ?. D# j/* configure SysBios to use the lower half of Timer 1 */
6 M" n4 j8 l! \' l( }% D" Gvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');9 j- C  H& U5 P% \2 v; l7 o
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: H! f. h- W) i- NTimer.timerSettings[1].master = true;
. Y3 @) X0 e8 U: l5 ]. ^) o6 QTimer.defaultHalf = Timer.Half_LOWER;5 e- R: w0 ]/ [& u
Clock.timerId = 1;
5 S5 M1 v2 {0 [( }  \; |2 E6 p
0 R" h* _1 E( j0 z5 }# l" L
+ F# Z. Y2 J3 A& J6 P/*
4 b( i! ~3 E& ~2 j *  ======== Miscellaneous Configuration ========  H8 Q' [3 L8 @% ~$ w) V; l
*/
: p  t4 m4 G4 T6 c/ I
& }6 Z9 i7 n9 H  z- L/* set default diags mask */
5 F' Z: e  t8 X. a( E5 a% pvar Diags = xdc.useModule('xdc.runtime.Diags');
; d) O9 \# c  c/ T& wvar Defaults = xdc.useModule('xdc.runtime.Defaults');
8 S# A; w1 o- a! E% n) h5 k
* g" f, x2 N9 {- w7 kDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;# T0 c0 N3 i* C2 J1 m; O2 D
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 Q# ]3 o2 m5 f+ l
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;) Q8 }- N- P  ~5 b/ {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
1 T  u8 C. j$ h0 JDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */8 A& z- P( P* T# S4 s( _
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;0 ]$ x7 S) P. v5 z
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
: r; r: s1 U$ F+ WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;/ u3 q: g; L/ S# R
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;; z+ @$ C; z7 |& t
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;- o8 M$ g$ H- F% M
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;7 z& q$ E) Q  ]/ D
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 V0 {( J" U* j8 H$ P9 h4 y& Q8 IDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
0 e' u9 ^- w9 v5 \5 B  [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ N4 {( L# f5 p! x! o: X$ [- O, u
5 e" D  `! x/ [, U$ ^* e
/* override diags mask for selected modules *// [! H3 Z' l+ ?; ~5 V3 o
xdc.useModule('xdc.runtime.Main');
  K8 B5 ?* n. l/ w) PDiags.setMaskMeta(8 |& Q" B; w, Z0 p* Y, T
    "xdc.runtime.Main",) y. N0 y, n+ ~. c; `4 v6 l; U
    Diags.ENTRY | Diags.EXIT | Diags.INFO,- K$ c0 |$ V! H" f8 r
    Diags.RUNTIME_ON& j% q0 ]5 H. \3 U; {# ?8 j
);
3 D+ x4 m* B# I% f0 Y9 p% w# l2 u& L4 [5 L8 T$ W. E
var Registry = xdc.useModule('xdc.runtime.Registry');; D& F+ u" o% Q& V- b; ]1 d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
4 |  d0 p. B' B& |6 v1 D3 ZRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;  M* r5 q% f  [9 ]+ H/ b8 r
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 F* @1 d3 n* _" _; H7 yRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;9 k7 H7 `/ P8 z/ A

4 b* S" n4 N4 r, w0 c" I6 Q$ C- G  B/* create a logger instance */' T! V0 b: O* f0 J# R0 B  K
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: F1 {* i. S# i. n/ E  ~7 ]! qvar loggerBufP = new LoggerBuf.Params();" p, u: o, z' m  i" l
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
. `5 M5 M. o# q* F2 |+ ]9 LloggerBufP.bufType = LoggerBuf.BufType_FIXED;: r6 Q& s# i9 u1 W! ~0 d" i
6 H- s/ b2 ^, j, c7 p5 c' ?# M
var appLogger = LoggerBuf.create(loggerBufP);6 L0 \% a+ \2 a  A: @
appLogger.instance.name = "AppLog_Core1";' L% Y8 y* f; X" D# _! `8 z1 k
Defaults.common$.logger = appLogger;5 H: G. ~; g& h) G! u4 i+ S! \
Memory.defaultHeapSize = 0x8192;    3 U- N% w+ i! X6 r
Idle.idleFxns[0] = "&LEDStatus";
4 B+ F$ ]! T# X' WCache.initSize.l2Size = Cache.L2Size_32K;! ]$ W6 A; S' a* t5 E- z9 R
# ^9 u. {7 u, U3 H! G; S9 \
回复 支持 反对

使用道具 举报

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 */' k5 c% @8 }8 c9 D
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
/ f. \' z* g. ^4 t4 avar heapMemParams = new HeapMem.Params();) k% r2 L/ P' B$ r
heapMemParams.size = 0x4000;
9 r+ a- b2 X% k: R9 R" m! \
/ ^* t0 m$ s' k: @% Tvar Memory = xdc.useModule('xdc.runtime.Memory');& E* C9 R, w$ w2 f9 z0 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);+ m) M3 l2 L( X

+ d2 `. \6 ]+ ~, A! w我大约calloc  每次共计大小为5K*16bits,
" E# G  r" w9 W" S; X/ W  H% K/ J而默认配置才0x4000、需要改大。
4 b: i. D, ]" j, O" [, B7 A) f: z; u" e: O- a% I5 _# _
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
& A3 `- g: V# n9 kProgram.heap = 0;
8 {$ D# l: D; T2 i! eProgram.argSize = 100;  /* minimum size */1 h- z( f" \, r9 N  u  r
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-1 03:29 , Processed in 0.043674 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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