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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
. w2 }& `% W* w
: ~: X) M, A% d1 [& [- `; Q7 n/ R    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
: u0 N  O( ~: k, h- t! [! m* m8 U1 q3 `
其他程序段。。。。。
9 p6 I! X& B5 t' L1 L 2 ~" p% L* j0 }7 `% w4 u, @2 q
   free(x_d);
5 u1 g; ]: I" P  h, P$ y9 Y  @: M7 z* e% A& T1 X1 y6 G
使用DSP侧单独调试功能,验证动态申请没有问题,5 H4 T% I1 t3 f7 o# f& J$ w
/ e9 H% |/ F) w5 B& S* w
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
5 Q! S- O0 R: u; T

! l% E6 I! K9 u  I/ s  l4 s' ?) m  D5 i' r+ D8 }

; ~9 r% r/ O) T3 P. U# f1 f+ w) z# }0 \7 |5 V2 X, k
2 Q1 \: }; [1 S! H2 x, ^2 o
0 p- K% }* x/ p. o' n
$ E' |" d) \* z

# d9 S) [; w9 H: H
- ^; }& J; ]+ ?0 Y* T/ u" @( e
1 g0 g; {1 r. g6 b& `
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# B  F& @: K. p% {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下# S1 A/ n$ {9 l+ ]5 V
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
3 c) T4 L! Z/ r
' m, l9 _6 L5 f9 d) ]# `5 w
是不是需要在DSP.CFG中进行配置
3 p  T4 r& q8 C  [% U/ G我现在的配置为0 R0 u- M8 t- k7 ~) W
7 \: U) }& q& T- K
/*" ~' e% B, g! d& J8 A1 r& z
*  ======== Operating System Configuration ========) `- ~/ i4 X# {. j% U
*/
5 f/ g& ^1 c% B- B! h) ~# a0 q8 m% Q2 L0 Y3 B
/* no rts heap */6 J) R" i6 r  K1 h) y. G9 \) U7 ~
Program.heap = 0;
( o- H) X. w8 d' q7 Q; TProgram.argSize = 100;  /* minimum size */3 O5 H* f- y' [. E/ P2 U7 r
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
! E, {; M5 _0 Q4 [$ l7 Q2 N9 [6 p
0 \* u  W( U- |6 x/* create a default heap */
: Z* a! h9 k7 t  Tvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');/ J7 c( E! c  L5 n5 d2 `) D
var heapMemParams = new HeapMem.Params();5 Y" ?! j9 u- j- Y2 B
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大/ Z: s2 ^" v5 G; J$ b

" q8 b2 L( F1 ^* C4 v* L
var Memory = xdc.useModule('xdc.runtime.Memory');
9 }6 ]$ t* v* }- d2 K6 iMemory.defaultHeapInstance = HeapMem.create(heapMemParams);: t& o- `: m! _' h$ u" H2 o

2 u2 |1 K4 g) ?  t1 x2 X9 y3 E/* configure System module */- s2 T  W3 @  F3 }
var SysMin = xdc.useModule('xdc.runtime.SysMin');
; g% H$ [) H# j! V9 Q5 c, _SysMin.bufSize = 0x1000;: E( s# G6 i4 g7 r5 f: M
SysMin.flushAtExit = false;) Y# |" i% w7 E8 z" T& W, \

. z! n3 |( N8 S; |. J# T/ fvar System = xdc.useModule('xdc.runtime.System');; P3 i7 _2 V$ n, W
System.SupportProxy = SysMin;+ C8 _, I  X  u; l

) ?$ _. s" A7 D( f/* configure SysBios to use the lower half of Timer 1 */
4 F1 O- f# G8 {! D0 Nvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');$ B0 N3 s% s5 p0 J: `1 n8 b; \
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
) w, T$ Q# n" l" {& I/ _7 |4 k0 JTimer.timerSettings[1].master = true;
, K( Z- Q% Q1 Z$ ITimer.defaultHalf = Timer.Half_LOWER;% {8 ?6 B6 }5 C4 ]- l0 b
Clock.timerId = 1;
- B3 h/ v+ m( @% q* v+ H1 @1 _: o4 D* t: l6 D; g0 ^  h

: `( u: k2 d( V3 c7 y/*2 ]; d8 @% c8 ?8 R: F1 V3 c7 d' R
*  ======== Miscellaneous Configuration ========/ z8 _! @* s2 b1 _
*/
5 @# W1 C+ p  H& W* C8 ~2 n3 X* z, v1 v0 g/ j4 v- b
/* set default diags mask */* X7 {! n# N& O% c0 L0 k
var Diags = xdc.useModule('xdc.runtime.Diags');" O5 H5 N! l* ?, `# _6 q
var Defaults = xdc.useModule('xdc.runtime.Defaults');0 G4 K2 y# e$ P, F0 Z6 E

/ `8 F" \  I' ^$ a9 \Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;6 g% C( q& ~5 o; g) ^$ _
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;3 p! Q1 p, I8 \
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
$ s" W0 _/ M9 v4 x  PDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */6 h" j# ^/ o# T/ V% {& E
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
1 v% F9 ~6 ^) m9 ^" GDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
2 P! X6 t' \2 a: g/ m5 PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
' h! C7 F. |. h: o8 mDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;2 Y! O, f; k3 @
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
/ N, y7 r; r$ @% K7 o- ?% aDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
( X5 W* O  S3 R% j- L. u9 mDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
9 o: q5 k+ m: @! [1 f: c% KDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
0 W( }  _! V7 n# |4 B4 ?  V$ \# L7 fDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  }" w* C; \* C
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;4 R# J" S3 O/ n) @+ Y- S5 r3 j, n
1 Q& |5 @( R2 D& d/ m& `3 h
/* override diags mask for selected modules */6 B2 H+ Y9 i4 {" V' w  a
xdc.useModule('xdc.runtime.Main');9 L& H" n! h/ m! V) L7 L
Diags.setMaskMeta(6 W1 D0 c) c% j- V; `2 e4 ?
    "xdc.runtime.Main",
# c" h% b" q: L3 |4 w# [4 A4 s$ R1 Q    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 e! n4 R. Q! V5 E6 N8 n    Diags.RUNTIME_ON
2 q& K: I- v* v/ F) x8 g);4 q5 a) R9 e" |) }/ H
2 ?0 a2 E8 U+ j' t- x/ T' U" c, @3 C
var Registry = xdc.useModule('xdc.runtime.Registry');6 R9 g0 Z  H6 F
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
- y$ {5 q/ K" S- h' B, M1 _Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
7 V$ {; p- Y. m* |Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
6 g" j  I- y' I' H, L: c; ORegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
$ |2 W' D9 \7 z) `9 r3 F
0 X) l% k9 G1 ~& Z/* create a logger instance */8 s& P1 ~& c# O  A0 j) G/ G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
/ N0 Z' V* A! Y$ w; O- E* w: cvar loggerBufP = new LoggerBuf.Params();2 y% P" K) ]5 l1 ?) V
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
/ Z. \- E2 S* E; UloggerBufP.bufType = LoggerBuf.BufType_FIXED;; N' `" t9 O8 U9 {

; \- d, Z6 p) \' zvar appLogger = LoggerBuf.create(loggerBufP);
% I6 G' X1 H/ I$ Z1 V5 _5 FappLogger.instance.name = "AppLog_Core1";
- k6 B% r2 ?1 n, ZDefaults.common$.logger = appLogger;3 N- |! g6 O" c" X3 ^
Memory.defaultHeapSize = 0x8192;   
4 D$ ]' S' q5 H+ j% XIdle.idleFxns[0] = "&LEDStatus";4 E* F# s! f1 G; [) e5 J
Cache.initSize.l2Size = Cache.L2Size_32K;
( V4 G5 a" N1 g) b1 r; v8 l; r! C, \4 B# v% J
回复 支持 反对

使用道具 举报

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 */
& s0 t; r! L/ h" i+ r6 q0 f- Vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% ]  L% [& f: @8 Q1 T
var heapMemParams = new HeapMem.Params();6 D% G3 I& D9 Q. \& \* B
heapMemParams.size = 0x4000;
1 T$ a0 {8 A' o0 u' n& f- a8 b/ W+ i+ {6 ^5 h2 v
var Memory = xdc.useModule('xdc.runtime.Memory');6 {5 c3 E5 V- e/ d% G
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);2 {8 P0 l6 N; x( k+ J& k+ m; v
, j, |; K( X7 @: ?1 g# Q( a$ \! A' [
我大约calloc  每次共计大小为5K*16bits,
2 o  C, ~* @* m3 c) n0 Y# ?8 A而默认配置才0x4000、需要改大。: _! a9 S" S- G
& D3 M. b/ Z8 r
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
% F- Z9 }% L: J( P* [5 }* PProgram.heap = 0;
) s0 u: y* ?) F/ U1 ]# N4 L8 b: WProgram.argSize = 100;  /* minimum size */  O; C: [  {- r0 K
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-16 15:47 , Processed in 0.045262 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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