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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
+ g2 c9 x! m& t( d# y" s+ j% L1 q1 M* L
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
1 C+ Q* r8 K5 X0 D
$ R7 H4 B" C% ]. `# T6 u, ?4 p其他程序段。。。。。
! j7 h& W- P' w6 ]$ @* c
, q, U# @! h: t' s4 A( o9 X   free(x_d);8 x: C# u0 b9 D+ d, [: p$ j
( S1 s0 g: x# E5 r! j0 z3 ?8 W3 ]
使用DSP侧单独调试功能,验证动态申请没有问题,4 K. \) O* [% z; d1 ]# P
; }: k  y: T( P( |+ m  V* Y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。9 E7 h' G& C4 R1 C

9 v1 {4 f+ r2 u1 o: M" C$ [; c, a* U5 L9 R4 f0 a, p; D7 I. k
% }& T  P" L+ R7 J+ L% M
3 M  L( d2 b6 E" l  D; U
' [- ]& |" m+ P# Y2 e. l" B

5 ]! K. I; h% y/ G
$ t' B2 Q$ E  m5 Q$ ~  y: x7 c
4 {/ {' K  B! t" s0 i+ ?# h4 w
  B* v  ?% L* |3 r& c- I
% d8 h7 q3 t  C9 f  a
分享到:  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 */
( n6 o% {1 i9 _- a* i' KProgram.heap = 0;
  N# d1 L) d! |- \5 ^4 \2 W8 ]Program.argSize = 100;  /* minimum size */
+ S# ~; N# P+ T: i$ {Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
9 s" R& h1 `9 t! H( ~8 }. gvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 c& m+ q& S* F7 N9 M: Vvar heapMemParams = new HeapMem.Params();$ M; c- O! O1 P
heapMemParams.size = 0x4000;
+ ~$ G: J8 x$ u, N7 u- z/ G- {0 s7 U) _3 r1 a2 M" @0 n
var Memory = xdc.useModule('xdc.runtime.Memory');! ]- e1 U6 _( e& r/ M* Y
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) R; b+ N  W9 w; X9 n! d- r  V* E3 m; w! U( Q4 E6 A
我大约calloc  每次共计大小为5K*16bits,
2 q9 L/ J# X' @& n( P. [+ {4 M: j4 c而默认配置才0x4000、需要改大。% ~" B3 {& h, I- c, s

6 A# C( E8 H& h: M  f% `) J. c
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明
7 h' h5 ^" i; N& R: E; ?我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下5 ~1 c1 R) @# f4 x8 `
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
- H1 w1 {# z' o$ v  l) U
; c* O3 T3 F; k
是不是需要在DSP.CFG中进行配置
0 l6 Q6 m# ~  k" \我现在的配置为
/ K8 B2 s7 @# L' K
$ ]. }: ?" ^' j, X0 W/*
! P: m  z  a( N" l( g *  ======== Operating System Configuration ========
1 {. m. T2 w6 E9 b */
  E5 v9 d6 |. R6 @* \3 J. p) u) y2 u# H( U3 k1 T
/* no rts heap */& {; b/ [9 E* h- L: y7 L; D
Program.heap = 0;
: W, @! u1 M0 N3 W0 qProgram.argSize = 100;  /* minimum size */2 p4 X7 M, _$ x
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
% N! S1 I, V  O7 P7 O. h7 x4 Y  t; G3 R) F, Z* Q
/* create a default heap */$ B* l5 c4 v6 L
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');; V7 _9 K; h( V% V6 ~) z6 b
var heapMemParams = new HeapMem.Params();
; G' O+ z# O  L  Q: UheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
4 Z2 M, d- g% U$ ]0 C
1 H3 w9 \/ `* y* [' d6 P! J# l
var Memory = xdc.useModule('xdc.runtime.Memory');( d. U5 R" n1 u& P$ M
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ b" g1 X) j, ]) D: h% n8 }5 R
2 u% G$ ]( w9 {! u: t8 P+ ]/* configure System module */  H5 b% T8 d: {6 V
var SysMin = xdc.useModule('xdc.runtime.SysMin');
! r& I1 F' j( `& cSysMin.bufSize = 0x1000;' C' P% |* {( z; t5 K( B& O
SysMin.flushAtExit = false;
" d8 U* I( V' G9 N& m/ Y  w3 C+ H% W! Z6 M" u; Y( ~9 M2 M& R
var System = xdc.useModule('xdc.runtime.System');
: T  G1 R$ H2 F2 rSystem.SupportProxy = SysMin;/ b* e9 }: Z! [
% J0 b  |5 v0 v9 d
/* configure SysBios to use the lower half of Timer 1 */
' k% N7 C' n: L. Y) Rvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');( n) W  h6 g" L, N
var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 A) r9 n& O. K$ S  D
Timer.timerSettings[1].master = true;+ W7 a+ h# c. }
Timer.defaultHalf = Timer.Half_LOWER;/ N1 d% R  v  U, E$ `" {2 ^& Y
Clock.timerId = 1;
: e$ u+ M+ X3 b) K' S; s) x+ H4 o$ }3 S! M7 {
. [5 Z$ K. R6 h* b/ V9 ~
/*% J+ D. G& A! ~+ j, L0 k
*  ======== Miscellaneous Configuration ========
( T, m, b' ?7 m. w% X' D6 e */
' ?0 E6 _* p3 n1 d6 E8 Y) U) U
0 g2 B5 r7 t0 F/ {2 @5 J6 @  l* J/* set default diags mask */
  X2 @" `, @- Q) yvar Diags = xdc.useModule('xdc.runtime.Diags');
" L* G. W1 m' g  yvar Defaults = xdc.useModule('xdc.runtime.Defaults');
+ }( N8 s: E% X( s2 @
4 e6 K/ c+ h. r- S! F5 f: CDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. @- {0 B' M1 Q$ n; {8 E" k% RDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;% i: O1 [2 J, o0 ?
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 I. }, j9 b& b6 ?
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */9 H7 W1 s2 `1 u: _. y1 a4 k) l
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
) P7 G: Y5 Y2 c5 lDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 w. D2 F+ a( @' bDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;, g# S% C3 z$ a# _3 G5 \& P& G
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
! k. \9 T& Z0 Y  [Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;( s! {. L' R* V: k- J2 ^+ }0 C
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;# E/ t# r4 M. @. L) q" J
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;. c. F- \* |5 j0 T
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
' P8 R3 R( d; v' W" l$ SDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, a! e9 K( x) \, rDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
6 u# m5 k$ l! k6 n$ ~' x7 ~) }$ t. U4 h$ b
/* override diags mask for selected modules */
2 G6 P, W. }% O1 _8 J& s$ Exdc.useModule('xdc.runtime.Main');
' P4 U. k$ l+ WDiags.setMaskMeta(1 o+ b; \* X; K' x
    "xdc.runtime.Main",( a" K( |+ s; a! h, W
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
# R* U" Q' Q& J, n    Diags.RUNTIME_ON
. y, d  T" f# m+ l' l6 H);
) {, V5 {- n3 }3 z  i/ H/ H8 s) i% C- }$ @2 R: V- ^& I
var Registry = xdc.useModule('xdc.runtime.Registry');
3 W" b+ ]  B' B* l1 ]' pRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;' w- H* H4 P" P9 |
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- g/ w: E4 k& X# D; M7 RRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;# m/ ]# Y9 }' f
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;; h2 S/ M* M/ m( E
/ n' L& g# S5 p  {$ |, s1 T
/* create a logger instance */
# [0 t9 M' e! f; _  E/ svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');0 L! x( W" L, s' g
var loggerBufP = new LoggerBuf.Params();3 n  y! K6 m2 g8 t$ w
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
5 {8 P% f; ^# U* I/ q3 ZloggerBufP.bufType = LoggerBuf.BufType_FIXED;1 V3 T4 j' z9 S' M# }' g2 v- O4 s

# ]' N4 M$ k: U3 H/ bvar appLogger = LoggerBuf.create(loggerBufP);- B1 _$ j" V) U+ F( M" l- m- T
appLogger.instance.name = "AppLog_Core1";. m# C  c0 N4 U& j0 ^6 Z9 G! D
Defaults.common$.logger = appLogger;
+ {; G1 ?! N( Q  n. {; l4 v) E7 y9 ]) p0 ]Memory.defaultHeapSize = 0x8192;    / `1 K: C3 z4 ]( z- D* o: U+ T
Idle.idleFxns[0] = "&LEDStatus";
7 g7 q0 _9 A6 m+ RCache.initSize.l2Size = Cache.L2Size_32K;
- n/ A" U! E8 X$ H( d% _! h9 P1 \" Y# i1 V1 C
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-27 05:16 , Processed in 0.043733 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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