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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构5 D) O5 Z2 {4 i5 X
. B) p, C& N6 c* Y8 g" O, F+ q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# \) z9 {3 p8 U9 ?

! J! Z4 R) ~8 ?$ g3 v其他程序段。。。。。
& d" v' k# `2 r' L $ a' [3 @2 s6 R# `" m% Z" |8 j
   free(x_d);  N. s) d7 a4 {/ y+ M
8 I  j2 i  e' ]
使用DSP侧单独调试功能,验证动态申请没有问题,
6 v) {, u. D6 O1 x5 ^! x8 S% _/ ~; b) `* ?/ O6 k0 h# W4 {. g$ e
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
1 [7 U$ Z/ N* ?
; W! N( F" G- p8 F% Z# f0 {4 `: @' v

7 g- b, K: B, o6 L8 T
7 Q- l: t7 y' |) c8 B- `. m# w# E$ F- R. _/ m$ |  Q
8 x. P* T# V0 Q3 R, Z2 A5 i

# j  ~6 j1 ?3 {  h$ `, W& }- b
' G- I* O, t8 }  M/ i, l( m7 N
% y/ Z5 ]7 |5 q" `
% F$ t& m" y5 ~6 Z3 r* v& f+ o
- X2 y1 M/ \) Q. O4 L# ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明) K/ B5 ~8 q6 |9 Z, k" Q% J) `% d
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
* O$ J: Z1 ]' e/ }9 x7 y" A(不过疑惑的是,为何单独DSP仿真就没有问题呢?)4 y/ A; N7 e! k1 M6 n7 J
/ b1 q/ T6 O1 H
是不是需要在DSP.CFG中进行配置9 m7 B/ |$ Y1 ]7 z" W9 p; ~! L
我现在的配置为* \* k) `' R+ r# h7 R! R0 ?
1 t+ o; o4 |) s/ b0 x- ?
/*6 S& z# r% s( l5 x. S
*  ======== Operating System Configuration ========
4 I) t# K8 N0 r% ? */
6 G2 k, J3 o: h+ I1 C4 [+ z5 ~  m! ?6 \& N9 z
/* no rts heap */
& z# U+ r: D: [3 |* V1 Z8 AProgram.heap = 0;" |' F/ R3 K# L3 b$ |
Program.argSize = 100;  /* minimum size */+ B; n$ G+ Z+ ~
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大7 M3 [5 N3 N8 r' b6 q( R
; P8 Q0 I9 l; s9 {2 H3 P* T) B
/* create a default heap */
9 \. `6 V  D8 x6 ], Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');- M& a# \2 h1 Z  L" N
var heapMemParams = new HeapMem.Params();- t* H7 U0 O, q  a
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大7 g, ^+ T  u0 z- C+ O

% }, i3 B! M$ b' X/ n: a
var Memory = xdc.useModule('xdc.runtime.Memory');
$ G9 d1 t# K; S) m- hMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
$ f+ s! m( A2 Z9 ?8 _" Q( W+ p% e) b0 H3 Y( t; Q! J
/* configure System module */
8 T# }6 o$ W5 v6 [$ |2 d! \4 [var SysMin = xdc.useModule('xdc.runtime.SysMin');9 A/ O% X) [+ M% b) r1 F# G) C
SysMin.bufSize = 0x1000;
7 s- N! `# P$ P, }SysMin.flushAtExit = false;
# d4 A1 P# z2 P8 \9 y
) W! _4 S$ P& i4 g) ivar System = xdc.useModule('xdc.runtime.System');
/ l  X& _- n# N" ^System.SupportProxy = SysMin;( ?0 _5 d6 m2 d) P6 g6 x4 Q2 @, P

9 k* U* Y' p7 b9 m! {/* configure SysBios to use the lower half of Timer 1 */5 l) B/ F6 E, F- G2 R0 c
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 K, w5 _$ ]: B4 q! H8 C% b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');% Y8 G6 P) ]1 p( T6 Y. G; ~
Timer.timerSettings[1].master = true;2 Y9 l+ h8 }# I1 d: f* c
Timer.defaultHalf = Timer.Half_LOWER;
) P2 A0 ?9 |+ _+ DClock.timerId = 1;
! b3 R( x" R+ q8 t, r( T% i2 G4 F; @; j8 L8 S
; O5 C* q& o! K& P
/*
# l) P" I0 s/ o6 M, y3 d *  ======== Miscellaneous Configuration ========1 q8 q4 W) E4 X* d4 G# a! z! i
*/
% |$ J! a  D; N5 P0 c2 \  ?6 d. ~+ Y5 f# C
/* set default diags mask */7 n0 l( {! B! \4 {* h/ G  D: Q
var Diags = xdc.useModule('xdc.runtime.Diags');& ?! P4 p4 E1 V! e
var Defaults = xdc.useModule('xdc.runtime.Defaults');
) a% |6 C& o  p2 e
1 K7 T" K6 c7 Z# iDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
9 s2 n; z6 j- e: |/ g! ~8 gDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
& y& i+ O, ]9 |1 v% GDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;& O+ u2 b) F1 `, g& L# J
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */8 E" \4 B3 [- \( f
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */& C8 M1 }4 R0 \7 L( F" C& W; q" \
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; Y/ e" o2 A  lDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
" Z* k) b+ R2 l  D# D) `4 s# sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  O$ `& j) p5 _# t/ m
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
2 t5 K6 z0 z0 f4 _) kDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
% e# s+ m! |' `* p2 bDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;1 u* C6 [0 t: S) M& n8 }
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;' H+ B+ k$ o1 M1 O# d& B# i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
( i8 o2 b; T2 b: f' |# G: ]Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;9 V( W. K& K7 \) B
  S: Z  r! H2 X% l" x5 q& |
/* override diags mask for selected modules */$ R$ s8 ?/ [! s: A& ^9 \: C) k
xdc.useModule('xdc.runtime.Main');
$ B" Z5 D/ z/ H8 q  @! bDiags.setMaskMeta(
" @3 m8 Y- V9 t+ B    "xdc.runtime.Main",
% A( _: h, X6 J1 T! a! S/ W2 `; O    Diags.ENTRY | Diags.EXIT | Diags.INFO,
- z- n) ^0 |% ]    Diags.RUNTIME_ON/ d4 P/ ]8 x3 I1 y& @* [1 W
);
+ q3 K! z4 d" @: u5 \0 r! U# {
% a' U7 Z6 L$ m( C- x" Z4 `& k! Avar Registry = xdc.useModule('xdc.runtime.Registry');4 m/ S& e. `: A1 V& d
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;" u. {5 E/ a5 D. w7 x# n" d# f- }! i
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
& l! Z0 q# S! {! D+ h* u/ ?Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
$ ?$ |* \9 s, M! x8 U0 @Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;0 T, B: |( C/ s! B% t* X
& ?6 y. |  R5 V/ q
/* create a logger instance */
6 d( ?& j/ w5 R* h' Qvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
; R% z$ v; e) v8 \4 b& t  W  l7 n4 {var loggerBufP = new LoggerBuf.Params();2 U( W" V) U5 g
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */* A" R) L+ H( A, e- B
loggerBufP.bufType = LoggerBuf.BufType_FIXED;/ E. m- U/ ~$ @2 d
: _% F2 @9 W: [8 j) R' Y
var appLogger = LoggerBuf.create(loggerBufP);
5 i) d9 p5 R5 h! t" U3 o$ YappLogger.instance.name = "AppLog_Core1";
2 d# q7 a& j- z' t4 DDefaults.common$.logger = appLogger;
  |3 B1 ?6 P$ M$ g! N! NMemory.defaultHeapSize = 0x8192;    " q+ G& c- I( [2 P/ r, W0 t0 A
Idle.idleFxns[0] = "&LEDStatus";4 k6 ^% F/ ^  C9 M, v
Cache.initSize.l2Size = Cache.L2Size_32K;1 B  U9 T9 _+ Q1 k% K1 q
: P  [; U, r/ Z% ?1 J0 s9 P
回复 支持 反对

使用道具 举报

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 */! N! z# `6 c4 F! i  x7 l
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');! T+ i) A/ m3 C9 D/ q  N+ W- J3 ~6 i
var heapMemParams = new HeapMem.Params();
" J2 M: ]7 U5 ^; V; _# vheapMemParams.size = 0x4000;% y& _* u( X! L
# Z; ^2 c/ d. F8 O' d
var Memory = xdc.useModule('xdc.runtime.Memory');
9 j  a& l9 `  Y; e8 f8 K; yMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
2 f+ w. D0 ~$ C3 _5 Z9 x5 U1 G- U$ E( k% a. L. k
我大约calloc  每次共计大小为5K*16bits,5 a4 m" M' b% j9 y1 u9 A
而默认配置才0x4000、需要改大。
2 O2 y6 c: ~7 X6 M" L; R! S, f- C4 P& Z! n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
* g1 v0 n1 v' F! P% xProgram.heap = 0;) _2 `. {+ e: R% o" @# y
Program.argSize = 100;  /* minimum size */
# Q( a7 O3 s' I, m: B+ f" V9 MProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-21 10:14 , Processed in 0.061845 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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