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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

$ d+ P5 N& |  }7 g" N    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
8 [5 G: E7 P9 u4 z1 }6 x! Q' F* u# [9 w$ G
其他程序段。。。。。
& m  L4 Y& j3 @* V$ p/ I- J$ u' J; f
" _8 x; `9 \) m& j   free(x_d);0 |% \  \' [  X: U$ l  ?2 u

, w: T4 Y0 v4 r3 g) x使用DSP侧单独调试功能,验证动态申请没有问题,
5 X- o# Z; i- k3 v  t' F! K, p9 V2 W0 C: D' u4 E' W6 o
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
6 B. F+ q; ?1 u2 `
4 @& ?6 U3 ~" _: Y8 c2 U6 K
, }) ^. f6 L$ s! A6 O

! q( \. S: |) p+ e6 U2 W! u- h+ d( o/ s- F. C

3 `/ I3 ?8 ~, B. ~* t$ j* E* O! {" W& N0 t) _; j

/ \5 A/ Y" C! C' V; S2 |
6 i6 I5 d6 t4 u- ?9 {: v- H4 q* k* B* o/ _  E% A

& i5 ]$ l7 l7 D- Y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明5 b9 x7 |6 L6 K. P. x! h
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
& y5 S0 V6 O$ w/ {(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 n. j7 q9 n4 z

4 _  ~0 {, h8 U. X6 j% H% E. I% R+ K$ S是不是需要在DSP.CFG中进行配置! ]8 A. O- U) u
我现在的配置为
' q. F7 S; m7 {6 D/ j3 M' ]4 j6 P+ ?) U2 y) h! Y
/*
. g1 Z2 B8 n& U' Z- x' p# ^ *  ======== Operating System Configuration ========' t8 v6 ?1 i  m1 n" `4 a8 u* @
*/8 O( S9 [5 [$ ~& p  F# P# Y* j8 C7 t3 k
8 T) {2 x. M* f% r& j+ R% B
/* no rts heap */
' T: T# d2 G4 RProgram.heap = 0;- a% X1 m* [) c6 [3 i; C6 S
Program.argSize = 100;  /* minimum size */
, D. Y' @1 C8 ^$ `Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 Z8 c7 W! N# \" w2 y7 d
; L; q# L$ a0 L6 j/* create a default heap */6 d' v0 L: r& ?! o
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
! E  f2 b  e3 n* e! Jvar heapMemParams = new HeapMem.Params();2 N. {' x$ H! q% W* n" ^- }
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% h2 G- I4 S, U- _2 ?
5 d& \  |% p8 G: ~+ l  e
var Memory = xdc.useModule('xdc.runtime.Memory');- |4 o! H4 P% ^' Q( |
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
) ]1 y. S0 A9 k0 y7 k- y/ x1 a/ \1 `
/* configure System module */4 {3 J  X, L! h& j0 N
var SysMin = xdc.useModule('xdc.runtime.SysMin');( H, k" w* H  K. U- I
SysMin.bufSize = 0x1000;
4 z3 l5 X& r: J- o6 Q% h% f+ eSysMin.flushAtExit = false;
4 ^% f9 i) a. O8 Q3 K. S& u) t; K& @1 K4 A4 V. X
var System = xdc.useModule('xdc.runtime.System');
+ W) E5 G1 W* ?& `$ c8 ZSystem.SupportProxy = SysMin;6 B; c% s# k: H, E4 a8 o+ b
5 P( u; V$ O: W( s/ B7 a
/* configure SysBios to use the lower half of Timer 1 */& N4 _9 {) d7 ]- f
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');" f. s; \: ~) f- B& M8 Y# D# ^$ J
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
: n& |& g+ R; g% P& r' d( X' gTimer.timerSettings[1].master = true;$ `# }% ~3 m) }+ Z6 E2 }! c8 q
Timer.defaultHalf = Timer.Half_LOWER;
% a- q5 Z0 j+ z) S: T8 @% X0 J4 }Clock.timerId = 1;$ ^0 R" v9 w. L; S

' a6 n( a0 w; I. ^3 n0 q6 C$ T: ], ]( s. h  D3 X8 V5 g! G
/*0 ^, l; a! {& C, x" K, v/ B
*  ======== Miscellaneous Configuration ========+ f) ?, `, H7 I' ]6 ~4 {+ d# e% o
*/
; h  k$ _0 `9 a  C
  J# s5 j2 x8 N/* set default diags mask */  W: W7 P. T7 H
var Diags = xdc.useModule('xdc.runtime.Diags');8 {0 V8 P) o: m( W6 V) _
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. y( B: I  A$ C0 D) ]  e& g/ B" D: o5 @: E3 y- @
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
" d# C  E. j  xDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
3 G$ ?5 ^" c# s6 }1 y! e, T' j8 cDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;3 n- _. _+ g! C
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
6 e) Y9 W$ ]# @Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */7 i- ]7 i) s2 r7 K5 H3 X- p# N% |
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
5 o8 \8 X0 [% v1 nDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;# O) X" S$ _3 ?* S0 E5 T; Y4 w
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
. P& l4 c% a! SDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 r) i! e/ I1 I1 l1 A
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
" l( I; b, I5 _) H/ oDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
) f9 X* i4 t8 r& c7 G1 IDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
# H2 L$ R! H: l$ H4 ZDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
, v) z' b  l# x3 {Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;* ~: ?3 y. B; R# m

) R1 R0 V  t- G+ T( L/* override diags mask for selected modules */+ K( J4 s) a+ g9 v% {
xdc.useModule('xdc.runtime.Main');
, Y" i' a" m3 B0 v9 |Diags.setMaskMeta(
3 m; [0 |6 u( T: j! {    "xdc.runtime.Main",
" r7 q8 e; v8 r  l' r  S( @    Diags.ENTRY | Diags.EXIT | Diags.INFO,* z" |% p& @1 W# Y8 {2 P
    Diags.RUNTIME_ON
- z0 O( T% y" s0 S- o' E" F( a);
: L$ ?6 |5 ]  p7 S5 W- U: G% F2 e+ y
var Registry = xdc.useModule('xdc.runtime.Registry');
4 c4 X+ w; g# v6 S  _Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ j$ ?; \3 Q& b. M! j$ X. S/ D
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
- h, I1 K( p2 q: T$ u3 w8 E. tRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
* Q  g$ A0 w2 Z" c# CRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;, t% H8 b; j' D1 W) J6 i( ?
! ^( g" b8 b1 x3 ~# K1 L
/* create a logger instance */
* k; l( L: ?& c: d9 Dvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');8 X" E2 K' Y7 B% T2 p5 N4 l) N3 U
var loggerBufP = new LoggerBuf.Params();
% i& _3 `5 M2 M* u+ g  G8 |6 rloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 d' E; S7 P5 i7 a5 C( V/ `
loggerBufP.bufType = LoggerBuf.BufType_FIXED;: X1 t; {" [5 ?( P1 o) A& a
6 X% [# @& _7 E# G0 m) Z0 [
var appLogger = LoggerBuf.create(loggerBufP);, A( G6 S" Y& K0 V" z
appLogger.instance.name = "AppLog_Core1";( x% y/ B& Q) e) \
Defaults.common$.logger = appLogger;1 a2 k$ f9 O, E9 [+ A% j$ _
Memory.defaultHeapSize = 0x8192;   
" E0 C, M8 z, I. q9 G3 TIdle.idleFxns[0] = "&LEDStatus";
/ V0 q/ C' D9 o4 {9 CCache.initSize.l2Size = Cache.L2Size_32K;
' g' l+ C8 L6 E% N% L1 a- ]. Z
% D# a: u  p" T8 ^( ]' h6 X# T7 t
回复 支持 反对

使用道具 举报

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 */& g8 a2 o$ `/ V; j2 e7 y8 r
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');: ~) {1 K- L0 S+ E9 c  E! U7 [
var heapMemParams = new HeapMem.Params();, X1 w3 ^2 J: x) @0 f- ~
heapMemParams.size = 0x4000;7 F8 k! m3 Q6 c- ^8 B
' U1 E( V1 `; l& i5 T+ }/ x
var Memory = xdc.useModule('xdc.runtime.Memory');
8 \3 D- }) Y7 W+ S0 [: ZMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
( C8 b3 V+ E- |- t! J
  E# Q3 A  ?! ?5 @. U我大约calloc  每次共计大小为5K*16bits,
/ \  ?( z3 X: b而默认配置才0x4000、需要改大。
4 S5 \* q2 Q5 Z, M- p" H1 A. W- G# K% {( H2 B' F5 f/ d
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */+ \% S, c4 E6 i% ^# Q
Program.heap = 0;/ W" O4 A0 U9 i# n0 b) c
Program.argSize = 100;  /* minimum size */; E) C1 B' L* w+ ]# c3 e3 p3 o( 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-2-28 23:35 , Processed in 0.041625 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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