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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构  F6 |5 x2 @8 S% c2 z* w6 @3 h; E

) B- w) K3 D0 P) g    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
. H6 [" j3 k3 F+ o+ Z; N& }6 {1 r- x) g6 h' Q. q
其他程序段。。。。。6 p6 C( s2 w3 n! w

' C# C/ j6 v1 A5 _& L. m/ G  n% G, n1 V   free(x_d);
: J; w9 Y4 f- J( b6 K+ q7 L
8 \( t2 o# H5 h" T4 m' H& D使用DSP侧单独调试功能,验证动态申请没有问题,
! b4 b4 @+ a& Y' q2 S/ q" J/ [6 d
% B* ]3 u0 N9 ~% `6 \3 s# A- t但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
* i8 S8 P; w6 F! S0 I

' f( g9 f; p, n* I* q
: K9 E7 c; l: o0 [7 c+ [; I$ ^
; |$ Z( C$ @6 O' Z2 M
6 p  q$ L5 j' O5 i
! @" r7 x6 {* Q; k9 C) m* U6 j8 m& z2 o, K% i( [# M$ b
) K. |2 p8 r2 E9 U, W

8 u; h& {3 G; M  G7 S% m" Q$ L# a  e

/ N0 x2 L3 U2 T+ d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ V# v8 {& H0 f4 V' G' t
Program.heap = 0;
8 V3 v4 ?: _- r" X' }. n3 wProgram.argSize = 100;  /* minimum size */
% S5 a3 U, k) f' ?/ KProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */- u6 K* @2 |% k
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( \8 Z; {" B$ k3 Q; evar heapMemParams = new HeapMem.Params();; @9 J1 J8 U' _
heapMemParams.size = 0x4000;
% ?' v+ q: T" w4 I7 I" |4 _, ?
var Memory = xdc.useModule('xdc.runtime.Memory');: l9 Q" @: k# q# e6 e& b
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ c, f$ s% b+ E4 k0 ?; G
. |' W5 D2 |$ K, B) q/ H4 @
我大约calloc  每次共计大小为5K*16bits,8 w& n. i+ {& i6 w1 U
而默认配置才0x4000、需要改大。
4 o' F+ t) h. s! [9 c; t1 |3 P  p: h3 o+ \
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明2 @. r; `9 R& R4 u9 }8 s
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下) M8 f( `1 K3 ^# I% t
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) N8 R4 [0 p. b7 Y- D; F
) |# n$ t) M( S0 A3 q! u$ ^) ?4 I
是不是需要在DSP.CFG中进行配置' c0 g) a' x3 g) a8 i
我现在的配置为' S/ k& h. J2 f2 x9 _
% m4 n) T, w0 T) T+ T: I2 X
/*8 g- m, {+ p3 I% H+ x* z; }( T
*  ======== Operating System Configuration ========8 P+ N; o" y( K+ Y% S7 C7 x
*/4 m3 }8 G* e2 r2 U2 C' H* u! n

+ b9 w1 ?5 [/ ^5 {0 O' g/* no rts heap */9 X5 c1 l) R  Q: |
Program.heap = 0;/ @* a+ F# o& v
Program.argSize = 100;  /* minimum size */( A! R& w+ V% A. W, D
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
  y) l; r% \* U. w6 A2 t. k+ ?# w$ h
/* create a default heap */: D4 P& J: f4 ^  k5 R, p* ^
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');, r, Z2 d- ?& S
var heapMemParams = new HeapMem.Params();
; v( |; m* l8 O$ M' U& v( {heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
- `) F' W% U% o8 K
$ u, ]9 N# o) K( g" S& `
var Memory = xdc.useModule('xdc.runtime.Memory');5 _6 P# \  H  P
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);- v! x/ M" ]2 X' }  S

  c! H" i1 N$ D0 b/* configure System module */
" _" b$ T# [: f& }) d( j$ kvar SysMin = xdc.useModule('xdc.runtime.SysMin');% N7 S8 Y) j( x- s
SysMin.bufSize = 0x1000;' s* O. ?6 E: A% I6 |# A, O/ ^
SysMin.flushAtExit = false;0 ~) a+ }6 A6 F/ g* n: `1 E

0 N/ i: H" z5 e" `2 |* x! qvar System = xdc.useModule('xdc.runtime.System');7 \. F$ D/ B, A' n% f) u+ Z
System.SupportProxy = SysMin;& G. M" \* x& ]" |  D+ X
4 g5 V. U1 H/ E9 J5 O
/* configure SysBios to use the lower half of Timer 1 */( m1 c7 c  P" Z/ Z
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');3 C  [) B  |" B4 O
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
2 n' ]3 O% `2 x5 r5 `$ R/ D8 |Timer.timerSettings[1].master = true;, U8 @, q! A! \" o
Timer.defaultHalf = Timer.Half_LOWER;
+ [- V( T# v3 v# M0 mClock.timerId = 1;" c* }. l( p* R: w8 u0 D

: F( E1 @! R$ U- M1 x: A  F9 ?+ u, d2 K  L
/*
: P: x6 k. x" t, }2 G; m- l& R* |0 l *  ======== Miscellaneous Configuration ========$ i/ i) D  f7 O4 ?9 E
*/0 ?& Z, l4 |- P2 T* e
" P; P. W1 P* S( z  N- K' G
/* set default diags mask */3 P. V" C3 w( [  r! |
var Diags = xdc.useModule('xdc.runtime.Diags');
1 T4 z6 d; ^& Y! h' Evar Defaults = xdc.useModule('xdc.runtime.Defaults');: j, R% C2 L+ i$ K
% Y. _2 w& |( U3 i' {) T
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* r- J/ u# @* @( F2 Z# w9 \: P3 lDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 T) B6 x; z- q$ K9 ~% L/ x2 P7 hDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;" g* `9 Y& \  N, {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 B" p1 F" C) k1 |- T
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */% g$ E5 v' O4 K, T+ K
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ q) g, Y  m) v/ {  {" d+ U
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
6 b: p9 l3 A1 g# v  {Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* p8 `  p9 l: x# Z+ F& \Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
- ^: \0 ~. D" r* P0 @. O7 }Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;& @; g% {5 [/ A/ B( b
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
: [; C0 c) i9 _Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- w, r5 v8 r& [+ `, h0 H' C
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  J  H* d: P$ a; [4 P- U) qDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;+ h2 s% B% k5 x. O! \4 q

3 ]/ L1 g' {9 l/* override diags mask for selected modules */
  H+ g8 m+ h: S" A( L; pxdc.useModule('xdc.runtime.Main');
8 m& g+ \: j/ I; K' v5 N6 fDiags.setMaskMeta(
! Y5 k- w0 y* T) v- y    "xdc.runtime.Main",
" m0 U7 A% G, _' E2 G    Diags.ENTRY | Diags.EXIT | Diags.INFO,
( D9 M$ y& E3 b0 r. a* L    Diags.RUNTIME_ON
: Y9 C, V) }0 L$ G);
" d5 ^& r% o" U3 u: s  U' Z
, m( z; T+ x+ ?, c! Y' Fvar Registry = xdc.useModule('xdc.runtime.Registry');- j3 W0 U/ u! [7 G
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;* T& U4 `  I0 F8 q! A9 g  ?& K
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
3 y" j2 w- ?& Q0 X0 eRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;5 ^1 b' Y) d- A; Q- ]( L& t
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
* v8 x' \8 I0 ], L) |, q* l: K2 T) W  b* Y% U( M! e' n
/* create a logger instance */) T( V; Y4 O: G+ A. I, p0 s6 ]
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');) w& N4 X' n- \# U, S
var loggerBufP = new LoggerBuf.Params();  n( e5 o$ W. B5 Y
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 O; c& i& k8 Q& {8 x% |7 J) ~3 ^! p
loggerBufP.bufType = LoggerBuf.BufType_FIXED;6 U: q+ U2 x$ O7 A* }

) ]' `! [: B0 s# `- tvar appLogger = LoggerBuf.create(loggerBufP);
$ L1 E$ f! R8 j; UappLogger.instance.name = "AppLog_Core1";; U/ e; A+ a6 J+ j; k1 z6 b
Defaults.common$.logger = appLogger;: ~6 ]; `4 H$ R, J% P
Memory.defaultHeapSize = 0x8192;   
( z' E5 }  q4 D' c0 Z( D& oIdle.idleFxns[0] = "&LEDStatus";
4 o% Q: g9 }) y: \* i/ W7 TCache.initSize.l2Size = Cache.L2Size_32K;/ Q+ T* |. u$ n( O; R
/ Y% M5 C5 ^9 n5 a0 z
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-26 20:49 , Processed in 0.041293 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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