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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

! r% b( s: v: C+ K    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256" G- L; B6 f. c2 @" m2 U5 @( Q

8 Q# N4 K5 [) G5 k7 K6 p) W: N其他程序段。。。。。! g; w2 S' |$ K8 x' n: y) L
& c: J+ j0 x- f7 n4 H$ j
   free(x_d);
- y$ k0 r' f# d" O8 ^3 }4 x. ]: Q, R/ D! }, |! Z4 S- k
使用DSP侧单独调试功能,验证动态申请没有问题,( R; }- i% C& b0 J0 z3 v

# R0 |& z- A( S7 g5 |但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
' ]4 u% \% F9 \4 }/ T5 v1 F
* G) J- |0 n2 {$ W# ]" g( j

% P% Y( u1 i5 z; [3 I, L' ]9 k+ F% ]. N9 J2 M

' C! h% v% L6 N5 W# B8 A" X8 [* s1 P, m- F. P9 A, I/ v4 p

7 w4 F) P$ T& I. ~' g; `" f8 Z- l' c5 V& I
9 j* D3 _0 z4 u
( z9 a" L& H1 P" o0 w) N. i3 t
/ M' R& c* s/ k2 n: v& w) y' L
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明7 d# {0 N  d$ o
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下' `% x5 L8 f3 \. d
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)# Y; J) g2 Z' b4 G/ c* W4 n8 F# K2 q0 o

1 ]: H! ?5 Q$ m是不是需要在DSP.CFG中进行配置4 Y# t: y; D" L% {, S
我现在的配置为7 C5 j/ {; h4 B; I5 l
5 @' u# `7 ~& M# _
/*
: y& A2 T) ~1 q* [7 V1 v+ l *  ======== Operating System Configuration ========  V: S% j# [3 P6 q/ C* f: {
*/
2 \/ T/ L6 Y  G) i+ s4 j% D" p- K& p; \5 D& m) ~
/* no rts heap */, P: h: f( M1 E( e9 _
Program.heap = 0;
9 b# R1 o% S* C/ Z7 C/ A3 dProgram.argSize = 100;  /* minimum size */
. R" @0 M( y: \' dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
2 O$ R' b" l* B- ]3 N
/ H9 ~8 C7 ]# m1 b. P2 p$ Q3 z/* create a default heap */
6 f: r+ T  |. l8 q8 y# j2 _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');1 H+ k$ B4 q8 P- J
var heapMemParams = new HeapMem.Params();
& i/ r9 H+ U9 ^; K+ \% p0 b2 LheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
! s! m2 x7 R( v3 u3 ^& b  m7 t3 x% Q( G: T- J
var Memory = xdc.useModule('xdc.runtime.Memory');& _5 N7 x' V# c  N
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( r+ ^+ H- @' B9 V7 _8 ~
' _0 u# Z6 q: }/* configure System module */7 A8 s& z- E1 ?5 n/ u% G
var SysMin = xdc.useModule('xdc.runtime.SysMin');
9 E9 h9 [$ F  }4 Y* ^. K- [& K, aSysMin.bufSize = 0x1000;
/ d7 [9 Q, q+ h, ?( ^' Y; ]SysMin.flushAtExit = false;# N( Z' _* |: ~3 E
1 Q; B3 A; v+ `' L9 n$ H5 c3 s  Y
var System = xdc.useModule('xdc.runtime.System');
5 V  l& ?; M9 k6 nSystem.SupportProxy = SysMin;
/ Q; D2 ]6 Z1 d0 f" n) J2 w8 g
. r: y: z' w1 F! ~# g/* configure SysBios to use the lower half of Timer 1 */" M( I# s% g& z4 X4 ~
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
4 Q1 `3 e' v3 w' c; G5 |var Clock = xdc.useModule('ti.sysbios.knl.Clock');2 u# |! T1 w: ]: J  n
Timer.timerSettings[1].master = true;
1 S8 e/ [7 z0 G9 M/ O1 {Timer.defaultHalf = Timer.Half_LOWER;
/ G0 w7 h6 l3 ^* pClock.timerId = 1;* Y' ]0 M' G" x! u$ [" i# B6 V* u
0 y7 c8 m! U7 l/ q- K" l8 _

7 t! Y% l9 Y' ?' M) w/*
. |4 Y, O7 C, k) `+ p *  ======== Miscellaneous Configuration ========4 \& H$ E) @" C) A  w2 f
*/$ |- S* X2 s. d0 z8 C7 G$ f1 w/ W

& M0 H7 W% m. U8 Y/* set default diags mask */6 h6 \; Y0 `+ ~9 C
var Diags = xdc.useModule('xdc.runtime.Diags');
0 p0 c# ^/ D) }. v( D6 @$ \var Defaults = xdc.useModule('xdc.runtime.Defaults');/ l0 W& k* b; `% y$ p  p

* ^6 W5 T, M, l) R9 U: x! qDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
* N1 v/ O* B4 v$ U: z9 x: s, IDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;8 K6 E4 d. L! S/ Y( a* W
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
' O+ j6 m% l' C4 p6 Y3 `Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */* m: ^) F- |0 y& k9 u
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
" a$ G# H3 X2 k4 S# FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; j% N' \0 j: Y% x0 f9 wDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;6 k7 e/ b1 W2 e& N
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;; F. O' o9 ?: E- m8 i0 [
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
5 q* d# ?& M& t6 `/ bDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;+ E" K. p+ O% ]6 A
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
+ x/ X+ I7 h7 G  ~! x/ ~Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;, c; |+ Y  N6 G! z9 _8 s6 i
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* q, J) x: U5 z- h* j' ]6 B* `- u  zDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;7 [, j* l% ?/ T' n7 ?! p

! c% `) G# V  x- N( q/* override diags mask for selected modules */! w, L! U- H- F# m+ l% m, Z
xdc.useModule('xdc.runtime.Main');
8 z- X# g1 d9 b$ M% SDiags.setMaskMeta(
, y( [8 _9 U- R0 [9 e% o$ r    "xdc.runtime.Main",
2 y# M7 q4 i6 ?  |: u/ l    Diags.ENTRY | Diags.EXIT | Diags.INFO,: n$ l: e; E/ ]! S
    Diags.RUNTIME_ON
' e& t% U  e' ?7 t( s);
# c; @/ l* t  |( s) i+ b  V2 f" ^  n! U2 N
var Registry = xdc.useModule('xdc.runtime.Registry');$ [/ ?/ ]8 A( X/ W
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
, C% c+ k" C) x) n, _2 ^Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;+ F. _/ c) X: [5 ?! |4 a# R
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;4 v* g' q3 l: P& i: Z
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;# a+ h( ^" r2 G
5 d3 {) H0 N* ~* C7 |: Z% t
/* create a logger instance */  ^7 W1 y5 b2 n: I& W3 z" o- R/ q8 [- L
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');; O  u. F' [2 \. {
var loggerBufP = new LoggerBuf.Params();
8 x1 R' g1 |3 S% I" {; A. _0 ~loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */8 g4 |; D3 V- k8 x  i' V/ ~' E# |& P  X) }
loggerBufP.bufType = LoggerBuf.BufType_FIXED;' g" g8 y: x- r8 ~/ y# C

3 S: v* I8 Z( `0 |( _var appLogger = LoggerBuf.create(loggerBufP);  ^0 C8 T) O5 g
appLogger.instance.name = "AppLog_Core1";
2 L+ [# c  V& c0 D) _6 }Defaults.common$.logger = appLogger;
4 R# C3 l5 a& ?0 M1 `Memory.defaultHeapSize = 0x8192;    " B3 q# A5 Q# K1 D% x# P
Idle.idleFxns[0] = "&LEDStatus";5 Q! ]2 D3 W6 _. I6 z
Cache.initSize.l2Size = Cache.L2Size_32K;
7 p0 [! E- B% T; H, N' k) r4 ~* j; ]' ^7 l1 \, O
回复 支持 反对

使用道具 举报

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 */
5 W" \' G% f% `6 q4 c+ S/ E% r# L$ uvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');% J- _# Z4 {, }+ N' U: b. ?5 q! v
var heapMemParams = new HeapMem.Params();
+ j, p9 ]9 Y! \1 E$ H. y4 p9 {heapMemParams.size = 0x4000;  q) p! D8 ~5 s% U  v9 T1 K

* T, q5 z2 E4 N2 Y5 Y: d: y) Q) Pvar Memory = xdc.useModule('xdc.runtime.Memory');
0 c8 j! U# @4 g9 PMemory.defaultHeapInstance = HeapMem.create(heapMemParams);7 M4 A7 W7 B5 r

: t0 c$ e$ U: X/ Z我大约calloc  每次共计大小为5K*16bits,
# K! K- F  r0 M4 o$ D# f9 M而默认配置才0x4000、需要改大。
1 C) E* p' [6 c5 S" s" h" U' q+ `
& H4 V& u" ?, ]- |# |
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
9 D% W& d3 @- Q# ]& T. O8 n; ~Program.heap = 0;) j; J% G) \' U  h) W- \
Program.argSize = 100;  /* minimum size */; ^8 {9 c5 r0 K# Z8 g$ P3 a" C
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-2 09:05 , Processed in 0.048436 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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