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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构, {, g5 K4 Q1 `1 N& k* N

+ m" H/ e# y; b; j  B9 V& A    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" g" T# K3 q& C% F: B

( a' r; i# f2 G; I其他程序段。。。。。1 s8 f2 X) C* @5 q2 E5 n

$ {7 E, h8 q" v, o% `   free(x_d);" ?: p6 L" E( Y; b8 H

. X$ ^  C' c% J& v使用DSP侧单独调试功能,验证动态申请没有问题,
6 Q5 P! f/ ?& o7 L2 r) C" s8 x
4 {; L2 N5 X. u2 g9 w但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
+ k8 _! c' [0 Q/ [

% c6 Q& b+ |! ~  P4 n4 B- P4 I: o9 S4 c
& {7 P0 P+ y* R
, ^! z1 |: n% K5 g8 p9 @

5 |3 j0 W6 L" _8 P! k. `5 K! e' U/ Q9 Q3 o4 T/ V1 C6 d8 f% o

2 n% k1 S7 U7 g( }
0 M  ?' O  x  S# a
& d' C2 r% f+ a9 E* A% ]+ z: M. A' v- @  v! @
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# M; b; a4 h, D& M我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下! Q$ t1 ]+ r8 B3 c
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
1 h8 l: w* B+ F& g8 _7 V* t- z

! ]& W* W7 R2 J) N7 w# W# X6 L是不是需要在DSP.CFG中进行配置
7 ]* y* L6 b' e  I, ?; F- {2 _我现在的配置为% z9 v% t/ h9 u7 k4 s

: z  U# w% x5 h/*
, u; G5 n9 g" r; H: G *  ======== Operating System Configuration ========
8 n7 a5 r5 j' ?/ V0 v8 p */
. n6 h: [7 f4 N* i! @7 G+ \5 Y+ S. X, J  ]7 {1 B5 r
/* no rts heap */4 u2 m1 B1 r# h8 b( U
Program.heap = 0;" _" V) @# r! l4 l- C& w/ y9 b
Program.argSize = 100;  /* minimum size */
, E: T5 W6 D0 |- T0 L, {+ v/ r( ?- ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大6 Y+ Q: n9 i1 s9 n0 z

- U, v4 J; M7 m, h) \2 L/* create a default heap */
$ m) ]* ~- N: ~$ q. q$ x5 K4 Cvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 ?5 b) ?- r0 J7 v
var heapMemParams = new HeapMem.Params();; S/ x1 a7 e$ K, h& T1 C+ P' E$ ~
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大  w% s* `1 V# W1 R- e
8 M; h4 v4 L2 P* g1 C  A$ A
var Memory = xdc.useModule('xdc.runtime.Memory');
4 W: t' z3 D* v( ]& C3 j. tMemory.defaultHeapInstance = HeapMem.create(heapMemParams);0 x$ b9 d5 F+ L1 y# p' R

. Y/ h, w8 G8 [/* configure System module */
/ T0 e% ^  i+ [+ R+ `. Bvar SysMin = xdc.useModule('xdc.runtime.SysMin');1 Q) V  G0 m$ [( N
SysMin.bufSize = 0x1000;! K$ t6 n. G, R8 l* P! \
SysMin.flushAtExit = false;" J: ^6 B( l/ @4 |0 G

( T  Z: |' y" f; B+ Fvar System = xdc.useModule('xdc.runtime.System');
! n1 r9 D% L2 U, X  }% t0 s1 G0 \# ^System.SupportProxy = SysMin;
% ^3 j6 `" s8 a6 E( p& R$ o* w' l0 u! {% }
/* configure SysBios to use the lower half of Timer 1 */: W) l9 b9 ^% K5 X( o( I" k, o
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
, a0 L+ ]' b. Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');" U) O- `- {+ `  [5 `2 h
Timer.timerSettings[1].master = true;0 b' q. s% q- a9 Z# O2 k8 j
Timer.defaultHalf = Timer.Half_LOWER;
/ s! _0 I5 |# a% i( B9 rClock.timerId = 1;. B( _* X/ e$ W) {3 v" J
1 ?6 O! ^6 l4 v+ Y) V; j# R! `
3 H4 C$ B, N7 Y% g
/*' v  A, B2 Q, F, n
*  ======== Miscellaneous Configuration ========2 M0 F; g# N( M$ t
*/; I4 F/ v, r2 c1 j7 Y- m5 ^, A: m) c, B
' q- k+ `4 ~9 V( F% |' Z: h$ {2 C0 S" I
/* set default diags mask */# @- D$ D/ X- d% Z3 z
var Diags = xdc.useModule('xdc.runtime.Diags');/ ~% ~) a$ I! ?( {' M! K
var Defaults = xdc.useModule('xdc.runtime.Defaults');$ A8 G* |3 ^7 v! \; Q( _  ^) t& k
) ?  [- I+ P' t4 S; j' O
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" e- L% n5 l; S/ y9 H; W* {Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
% r$ Q1 q! ]$ g7 l' y# LDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 p& C2 @' U  Q$ N; ~' R  i
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */; {# i6 s  A; w6 q& ]2 M* n
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */- M1 u: Q5 q& T  W$ m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;% U4 d2 p" h* ?" {# v  l5 J2 s" S
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
. r, ?$ S" e6 E: z+ f" ?- h6 WDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
0 F3 K  L" l' m) \1 b+ m* Z( l. IDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 d$ Z$ H) x) X* m, r* f
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
! A; x* \! ~1 j' X. S) f* MDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
% I) {& i9 M5 R3 u( Q+ Y" N: F0 uDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 g! c' O0 {# c
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  j& V3 U% `3 k1 N
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* v$ ?" g' X* o: F- B
- @, f# O- U4 ^, i& U* @! k& }+ X
/* override diags mask for selected modules *// R0 d- u, }. D" D7 V6 T8 Y$ g$ r' U
xdc.useModule('xdc.runtime.Main');1 l4 u3 V9 H8 ~3 W+ R2 P
Diags.setMaskMeta(
( Z4 D/ J* g5 s7 A# T- \  w7 Z) a    "xdc.runtime.Main",7 D+ h/ p  _: W# n
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; h1 h7 z7 d( T$ p0 z
    Diags.RUNTIME_ON# V+ k$ H: j2 g9 Y# g
);
4 F. H# n: R  P, b0 f/ i( g. Z- ^4 G! O# d
var Registry = xdc.useModule('xdc.runtime.Registry');
) `1 V% N$ R+ J$ CRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% u( H" h# R+ l  k4 n0 xRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
: u& X7 _# W8 a+ K1 U% FRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
. |$ k8 [' j( R2 S  S0 u4 v- lRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
. \/ o# N/ X  R& q5 t9 F
: N% r; W! P4 z1 Q8 q# k; M9 D8 J/* create a logger instance */
, b1 k3 l; T7 M9 R) B& m" w! J: Evar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');" d: R8 F4 b8 S/ b) ~( ?# D" @
var loggerBufP = new LoggerBuf.Params();3 u2 i% W, ]8 [
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */+ T' `. U- C: n5 z/ n0 D% t
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
" J  D' ?" r; t8 K, `
+ n  h# o9 R( Ivar appLogger = LoggerBuf.create(loggerBufP);+ T1 ?4 d3 D7 d
appLogger.instance.name = "AppLog_Core1";
% q9 H( s( b0 {: Z9 ?' `: N8 pDefaults.common$.logger = appLogger;
4 }% ^5 m1 ?: _8 g6 j1 V$ m. kMemory.defaultHeapSize = 0x8192;   
$ _, ^% r5 u. P4 L; f* dIdle.idleFxns[0] = "&LEDStatus";
& Y! X( G' O) v# ?5 fCache.initSize.l2Size = Cache.L2Size_32K;
% x; f* K6 d) w$ K
; _; ]7 C* Z- e) R. z8 j5 X+ k" O4 n) ~
回复 支持 反对

使用道具 举报

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 */% H& A! s$ ]# j/ I/ S0 V0 S
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% y& Y% g" l; c$ Mvar heapMemParams = new HeapMem.Params();5 n5 p7 |+ U& _  P% n0 L. D/ z& U" G
heapMemParams.size = 0x4000;2 H/ P2 ^" }8 p+ U1 m

0 C0 @# J; w1 ]- b8 g; Z* m3 c- Avar Memory = xdc.useModule('xdc.runtime.Memory');! {% M# H6 n- O4 {3 O5 z: C! k
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 @" {, h- X, j! \/ `3 j6 J3 \' y5 Q2 f+ [$ |% f' x* [9 e
我大约calloc  每次共计大小为5K*16bits,5 O" o1 I" K2 r6 h9 x
而默认配置才0x4000、需要改大。8 O1 s+ Q& o4 ^) p
7 o# Q5 y, b; r7 M
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
  e) ]: q, o3 l4 G6 Y( s. i0 o) T" rProgram.heap = 0;2 h3 i; o% [# F# k) g
Program.argSize = 100;  /* minimum size */
/ i+ r6 a8 n9 C) Z& aProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 19:24 , Processed in 0.042365 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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